객체 (Object)
- 클래스의 정의된 내용에 맞춰 메모리에 생성된 형태를 의미한다.
- 정의한 클래스에 내용에 따라 속성과 기능이 다른 용도를 갖는다.
인스턴스 (Instance)
- 클래스와 객체의 관계를 나타낸다.
- 클래스로부터 객체를 선언한다를 인스턴스 화 한다라고도 표현한다.
- 어떤 객체는 어떤 클래스의 인스턴스이다.
클래스 (Class)
- 객체의 설계도이다.
- 데이터와 기능의 결합한 모듈이다.
- 사용자가 직접 설계하는 사용자 정의 타입이다.
- 객체를 생성하는 용도로 사용된다.
클래스 사용
- 클래스는 객체를 만들기 위한 설계도이며, 객체 변수, 메소드들로 이뤄져있다.
public class Days {
// 객체 변수
int day;
// 메소드
// 리턴타입 메소드명(파라미터) { 기능; }
public void setDay(int day_) {
day = day_;
}
}
// 클래스명 객체명 = new 클래스명();
Days days = new Days();
생성자 (Constructor)
- "new" 키워드로 인스턴스를 생성할 때, 제일 먼저 실행되는 메소드이다.
- 생성자 명명 규칙
- 클래스 이름과 동일한 이름이어야 한다.
- 반환 값은 없지만 void 형으로 적어주면 안된다.
- 기본 생성자 외에 여러 개의 생성자를 가질 수 있다.
public class 클래스명 {
클래스명() {}
}
기본 생성자
- 매개변수가 없고, 어떤 실행문도 없는 생성자를 말한다.
- 모든 클래스에는 반드시 하나 이상의 생성자가 정의된다.
- Java Complier가 어떤 생성자도 없을 경우, 기본적으로 추가해준다.
- 어떤 생성자가 있는 경우, Complier가 기본 생성자를 별도로 추가하지 않는다.
매개변수가 있는 생성자
- 매서드처럼 매개변수를 인자로 받아 인스턴스 초기화에 값을 사용할 수 있는 생성자를 말한다.
- 객체 생성 후 set 메소드를 호출하는 것보다 간결하게 작성할 수 있다.
this 키워드와 this()
this
- 인스턴스 자기 자신을 가르키는 참조변수이다.
- 인스턴스의 주소가 저장되어 있으며, 숨겨진 채로 존재한다.
- static 메서드에서는 사용이 불가능하다.
this()
- 같은 클내스 내부의 다른 생성자를 호출할 때 사용된다.
- 생성자 첫 문장에서만 사용이 가능하다.
예제
package zerobase.chapter07;
// Car 클래스 → 객체 변수, 메소드
class Car {
String name; // 이름
String type; // 종류
Car() { System.out.println("기본 생성자 출력!"); }
Car(String name, String type) {
this.name = name;
this.type = type;
System.out.println("매개변수가 있는 생성자 출력!");
}
public void printCarInfo() {
System.out.println("== Car Info ==");
System.out.println("name = " + name);
System.out.println("type = " + type);
}
public void move() { System.out.println("이동!"); }
public void breake() { System.out.println("정지!"); }
public void load() { System.out.println("짐을 주세요!"); }
public void horn() { System.out.println("빵빵!"); }
}
public class Main {
public static void main(String[] args) {
Car car1= new Car();
car1.name = "Seltos";
car1.type = "SUV";
car1.printCarInfo();
car1.move();
car1.breake();
Car car2 = new Car("Kona", "SUV");
car2.printCarInfo();
car2.load();
car2.horn();
}
}
오버로딩 (Overloading)
- 한 클래스 내에서 같은 이름의 메소드를 여러 개 정의
- 오버로딩 조건
- 메소드의 이름이 같아야 한다.
- 메소드의 매개변수의 수 또는 타입이 달라야 한다.
- 리턴 타입의 차이로는 오버로딩이 성립되지 않는다.
public class Days {
public Days() {}
public Days(String day) {
// 실행문
}
}
접근제어자
- 클래스의 변수나 메소드의 접근에 제한을 두는 키워드이다.
- 접근제어자의 종류
키워드 | 설명 |
private | 해당 클래스에서만 접근이 가능하다. |
public | 어디서든 접근이 가능하다. |
default | 해당 패키지 내에서만 접근이 가능하다. |
protected | 해당 패키지 및 상속받은 클래스에서만 접근이 가능하다. |
Static 키워드
- 변수나 메소드의 특성을 바꾸는 키워드이다.
- Static 키워드의 특징
- 메모리에 한번만 할당된다.
- Static 변수나 메소드는 공유되는 특성을 가지고 있다.
- Static 클래스 변수는 해당 클래스의 각 객체들이 값을 공유한다.
- Static 클래스 메소드는 객체를 생성하지 않아도 호출이 가능하다.
⊙ 참고 문헌
- 마종현, 「제로베이스 백엔드 취업 파트타임 스쿨 5기:Part 01. Java 기초-Chapter 01. Java 프로그래밍-07.클래스와 객체」, 제로베이스, 2024, https://zero-base.co.kr/
- 정영진, 「제로베이스 백엔드 취업 파트타임 스쿨 5기:Part 01-2. 쉽게 배우는 자바-Chapter 06. 클래스와 객체」, 제로베이스, 2024, https://zero-base.co.kr/