생성자란?
객체를 만드는 틀인 클래스에서 필요하면 생성자를 구현한다.
객체가 생성될 때 필요한 작업을 수행하는 특별한 메서드이다. 주로 객체 필드에 초기 값을 저장하거나 객체의 사용을 위해 필요한 초기화 작업이 수행된다.
더보기
생성자의 구성
- 반환형을 기술하지 않으며 이름은 반드시 클래스 이름이다.
- 생성자의 인자는 필요하면 기술한다.
- 생성자는 주로 접근 지정자 public을 사용한다.
- 필요하다면 생성자의 접근 지정자도 private 또는 protected도 가능한데, 보통 singleton패턴에서 사용된다.
생성자 구현
public class 학생 {
public String 이름;
public 학생() {
} // new 학생();
public 학생(String 학생) {
this.이름 = 이름;
} // new 학생("땅콩");
public void finalize() {
}
}
객체 생성을 위한 생성자 호출
public class 학생테스트 {
public static void main(String[] args) {
학생 공부하는학생 = new 학생(); // 기본 생성자
공부하는학생.이름 = "땅통";
System.out.println(공부하는학생.이름);
학생 조는학생 = new 학생("땅콩"); // 생성할 당시에 이름을 넣어서 호출할 수 있음
// this.이름 = 이름;
System.out.println(조는학생.이름);
}
]
기본 생성자(default constructor)
인자가 없는 생성자이다.
public class 대학생 {
public String 이름;
}
▼
public class 대학생 {
public String 이름;
public 대학생() {
}
}
클래스 Student에서 생성자가 하나도 구현되지 않았다면,
new Student()와 같이 인자가 없는 생성자를 호출하여 객체를 생성하고, 생성자를 전혀 구현하지 않은 클래스는 자동으로 기본 생성자를 제공해준다.
public class 대학생테스트 {
public static void main(String[] args) {
// 1. 기본 생성자
대학생 열공중인대학생 = new 대학생();
// 2. 사용자정의 생성자
대학생 땡땡이치는대학생 = new 대학생("홍길동");
// 3. 기본 생성자 + 사용자정의 생성자
대학생 전과하려는대학생 = new 대학생();
대학생 전과하려는대학생을말리려는대학생 = new 대학생("이순신");
}
}
클래스에서 인자가 있는 생성자가 적어도 하나 구현되었다면, 더 이상 기본 생성자는 자동으로 사용불가능하며 기본 생성자를 사용하기 위해서는 기본 생성자도 따로 직접 구현해야 한다.
생성자 오버로딩(constructor overloading) : 필요한 여러 생성자 구현
하나의 클래스에서 인자가 다르면 생성자를 여러 개 구현 가능하다.
public class 대학생 {
public String 이름;
public int 나이;
public String 성별;
public String 학과;
// 대학생 신입대학생 = new 대학생();
public 대학생() {
}
// 대학생 신입대학생2 = new 대학생("홍길동");
public 대학생(String 이름) {
this.이름 = 이름;
}
// 대학생 신입대학생3 = new 대학생("홍길동", 20);
public 대학생(String 이름, int 나이) {
this.이름 = 이름;
this.나이 = 나이;
}
// 대학생 신입대학생4 = new 대학생("홍길동", 20, "남");
public 대학생(String 이름, int 나이, String 성별) {
this.이름 = 이름;
this.나이 = 나이;
this.성별 = 성별;
}
// 대학생 신입대학생5 = new 대학생("홍길동", 20, "남", "컴퓨터과학과");
public 대학생(String 이름, int 나이, String 성별, String 학과) {
this.이름 = 이름;
this.나이 = 나이;
this.성별 = 성별;
this.학과 = 학과;
}
}
public class 대학생테스트2 {
public static void main(String[] args) {
대학생 신입대학생 = new 대학생();
대학생 신입대학생2 = new 대학생("홍길동");
대학생 신입대학생3 = new 대학생("홍길동", 20);
대학생 신입대학생4 = new 대학생("홍길동", 20, "남");
대학생 신입대학생5 = new 대학생("홍길동", 20, "남", "컴퓨터과학과");
}
}
위의 코드처럼 객체가 만들어지기 위한 생성자를 처리한다.
자기 자신의 다른 생성자 호출 : this(...)
구현된 자기 자신의 다른 생성자를 호출하는 문장으로 생성자 구현에서 첫줄에는 this(인자)로 다른 생성자를 호출하여 사용가능하다. 하지만 두 번째 줄부터는 사용 불가하다.
public class 대학생 {
public String 이름;
public int 나이;
public String 성별;
public String 학과;
// 대학생 신입대학생 = new 대학생();
public 대학생() {
}
// 대학생 신입대학생2 = new 대학생("홍길동");
public 대학생(String 이름) {
this.이름 = 이름;
}
// 대학생 신입대학생3 = new 대학생("홍길동", 20);
public 대학생(String 이름, int 나이) {
this(이름);
this.나이 = 나이;
}
// 대학생 신입대학생4 = new 대학생("홍길동", 20, "남");
public 대학생(String 이름, int 나이, String 성별) {
this(이름, 나이);
this.성별 = 성별;
}
// 대학생 신입대학생5 = new 대학생("홍길동", 20, "남", "컴퓨터과학과");
public 대학생(String 이름, int 나이, String 성별, String 학과) {
this(이름, 나이, 성별);
this.학과 = 학과;
}
}
반응형
'자바 JAVA > 자바 객체지향' 카테고리의 다른 글
자바 클래스와 객체의 생성 (0) | 2023.05.08 |
---|---|
자바 객체지향 : static과 final 배열 (0) | 2023.05.04 |
자바 객체지향 프로그래밍이란? (0) | 2023.05.03 |
댓글