생성자란?
클래스의 객체가 생성될 때 자동으로 한 번 호출되는 특수 목적의 멤버 함수
레퍼런스 변수를 메모리 참조하기 전, 객체를 초기화하여 객체의 초기 상태를 설정하는 역할
- 생성자는 반드시 1개 이상 있어야 함
- 다른 멤버 함수와 다르게 리턴 타입이 없음
- 생성자 이름은 클래스 이름과 동일한 이름이어야 함
- 매개변수 조건에 따라 생성자 여러 개 작성 가능 (오버로딩 / Overloading)
- 생성자 내에서 매서드를 활용 가능
- 매개 변수를 가질 수 있음
1. 기본 생성자 / Default constructor
객체의 기본값으로 설정하는 매개변수가 없는 생성자
생성자를 생성하지 않으면 기본 생성자를 자동으로 생성
class Display {
Display() { // 생성자 생성
System.out.println("This is test text");
}
}
public class Main {
public static void main(String[] args) {
Display view = new Display(); // 출력
}
}
2. 매개 변수가 있는 생성자 / Parameterized Constructor
매개 변수를 사용하여 객체 생성 시 초기 값을 설정할 수 있도록 하는 생성자
class Display {
String text;
Display(String txt) { // 생성자 생성
text = txt;
System.out.println(text);
}
}
public class Main {
public static void main(String[] args) {
Display view = new Display("test message"); // 출력
}
}
3. 오버로딩 / Overloading
같은 이름의 생성자를 여러 개 사용하는 것
매개변수의 개수나 타입이 다른 여러 개의 생성자를 사용 가능
※ 오버로딩(Overloading)과는 다르다 (여기를 참조)
class Display {
String text1, text2;
int number;
Display() {
System.out.println("This is test text");
}
Display(String txt) {
text1 = txt;
System.out.println(text1);
}
Display(String txt, int num) {
text2 = txt;
number = num;
System.out.println(text2 + number);
}
}
public class Main {
public static void main(String[] args) {
Display view1 = new Display(); // This is test text
Display view2 = new Display("message 1"); // message 1
Display view3 = new Display("message ", 2); // message 2
}
}
4. this()
하나의 생성자에서 다른 생성자를 호출할 때 this()를 사용하여 코드 중복을 줄일 수 있음
※ this와 this()는 다른 개념
- this : 인스턴스 매서드의 매개 변수로 선언된 변수명이 인스턴스 변수명과 같을 때, 인스턴스 변수와 지역 변수를 구분하기 위해서 사용
- this() : 같은 class의 다른 생성자를 호출
class Display {
String text;
int number;
Display() {
this("message ", 0); // this()로 매개 변수가 있는 다른 생성자 호출
}
Display(String text, int number) { // 인스턴스 변수명과 매개 변수명이 같음
this.text = text; // this로 구분
this.number = number;
}
void show() {
System.out.println(text + number);
}
}
public class Main {
public static void main(String[] args) {
Display view1 = new Display();
Display view2 = new Display("message ", 1);
view1.show(); // 출력 : message 0
view2.show(); // 출력 : message 1
}
}
'Programming > Java' 카테고리의 다른 글
[Java] is-a 관계와 has-a 관계 (0) | 2025.03.04 |
---|---|
[Java] 상속 (Inheritance) (1) | 2025.03.04 |
[Java] 클래스 변수, 인스턴스 변수, 로컬 변수, 매개 변수 (0) | 2025.02.28 |
[Java] Java란? (1) | 2025.02.28 |