1. 생성자
- new 연산자와 같이 사용되어 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당
- 객체 초기화란 필드를 초기화하거나, 메소드를 호출해서 객체를 사용할 준비를 하는 것을 말합니다.
- 메소드와 비슷하게 생겼지만, 클래스 이름으로 되어 있고 리턴 타입이 없습니다.
2. 기본 생성자
- 모든 클래스는 생성자가 반드시 존재하며, 하나 이상을 가질 수 있습니다.
- 클래스 내부에 생성자 선언을 생략했다면 컴파일러는 기본 생성자를 바이트 코드에 자동으로 추가합니다.
- 클래스가 public class로 선언되면 기본 생성자에서도 public이 붙지만, 클래스가 public 없이 class로만 선언되면 기본 생성자에도 public이 붙지 않습니다.
- 주의) 클래스에 명시적으로 선언한 생성자가 한 개라도 있으면, 컴파일러는 기본 생성자를 추가하지 않는다. (특정 외부 라이브러리 활용 시 기본 생성자를 필수로 요하는 경우도 있습니다.)
3. 생성자 선언
클래스명( 매개변수, ... ) {
// 객체의 초기화 코드
}
- 생성자는 메소드와 비슷해 보이지만, 리턴 타입이 없고 클래스 이름과 동일합니다.
- 매개 변수 선언은 생략할 수도 있고, 여러 개를 선언해도 됩니다.
- 클래스에 생성자가 명시적으로 선언되어 있을 경우에는 반드시 선언된 생성자를 호출해서 객체를 생성해야만 합니다.
4. 필드 초기화
1. 필드를 선언할 때 초기값을 주는 방법
public class Computer {
// 필드 (고유 데이터)
String modelName = "MacBook Air M1";
String adminName = "veaneas";
int serialNumber = 1232;
}
2. 생성자에서 초기값을 주는 방법
관례적으로 필드와 동일한 이름으로 매개 변수를 사용합니다.
이름이 동일하기 때문에 생성자 내부에서 해당 필드에 접근하기 위해서는 this. 연산자를 활용하면 됩니다.
public class Computer {
// 필드
String modelName;
String adminName;
int serialNumber;
// 생성자에서 초기값 대입
public Computer(String modelName, String adminName, int serialNumber) {
this.modelName = modelName;
this.adminName = adminName;
this.serialNumber = serialNumber;
}
}
public class Main {
public static void main(String[] args) {
// Computer2 computer2 = new Computer2(); // 기본 생성자 호출 불가
// 명시된 생성자를 호출해야 합니다.
Computer2 computer2 = new Computer2("LG Gram", "veneas", 1343);
System.out.println(computer2.modelName); // LG Gram
System.out.println(computer2.adminName); // veneas
System.out.println(computer2.serialNumber); // 1343
}
}
5. 생성자 오버로딩
- 모든 클래스는 생성자가 반드시 존재하며, 하나 이상을 가질 수 있습니다.
- 매개 변수를 달리하는 생성자를 여러 개 선언하는 것
- 매개 변수의 타입, 개수, 순서가 다르게 선언합니다.
- 생성자를 다양하게 하여 여러 요구 조건을 수용할 수 있습니다.
public class Computer {
// 필드
String modelName;
String adminName;
int serialNumber;
// 생성자
public Computer() {
}
public Computer(String modelName) {
this.modelName = modelName;
}
public Computer(String adminName, int serialNumber) {
this.adminName = adminName;
this.serialNumber = serialNumber;
}
public Computer(String modelName, String adminName, int serialNumber) {
this.modelName = modelName;
this.adminName = adminName;
this.serialNumber = serialNumber;
}
}
6. 다른 생성자 호출
- this() = 자신의 다른 생성자를 호출하는 코드
- 반드시 생성자의 첫 줄에서만 허용
- 생성자 오버로딩이 많아질 경우 생성자 간의 중복된 코드를 피하기 위해서 사용합니다.
public class Computer {
// 필드
String modelName;
String adminName;
int serialNumber;
// 생성자
public Computer() {
}
public Computer(String modelName) {
this(modelName, "veneas", 1343);
}
public Computer(String adminName, int serialNumber) {
this("Mac Book Air M1", adminName, serialNumber);
}
public Computer(String modelName, String adminName, int serialNumber) {
this.modelName = modelName;
this.adminName = adminName;
this.serialNumber = serialNumber;
}
}
'Backend > 객체 지향 프로그래밍' 카테고리의 다른 글
[Java] 인스턴스 멤버 (0) | 2022.04.08 |
---|---|
[Java] 클래스의 구성 멤버 (메소드) (0) | 2022.04.07 |
[Java] 클래스의 구성 멤버 (필드) (0) | 2022.04.05 |
[Java] 객체와 클래스 (Object & Class) (0) | 2022.04.04 |
[Java] 객체 지향 프로그래밍의 특징 (자바 소스 코드) (0) | 2022.04.03 |