728x90
생성자(Constructor)
클래스명(매개변수) { // 생성자
내용
}
- 클래스의 구성 요소로, (new 키워드에 의해) 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드라고 할 수 있다.
생성자와 메서드의 차이점
- 생성자의 이름은 반드시 클래스의 이름과 같아야한다.
- 생성자는 리턴 타입이 없다.
public class Main {
public static void main(String[] args) {
Constructor C1 = new Constructor();
Constructor C2 = new Constructor("I'm String");
Constructor C3 = new Constructor(2,3);
}
}
class Constructor {
Constructor(){
System.out.println("생성자1입니다.");
}
Constructor(String str) {
System.out.println("생성자2입니다.");
}
Constructor(int a, int b) {
System.out.println("생성자3입니다.");
}
}
// 매개변수와 관계없이 클래스명과 같은 메서드를 생성자 메서드라고 함
생성자 오버로딩을 활용하여 같은 이름을 가진 여러 개의 생성자를 만들 수 있다.
기본 생성자(Default Constructor)
- 모든 클래스에는 반드시 하나 이상의 생성자가 존재하며 인스턴스 생성 시 호출된다. 사용자가 클래스 안에 생성자를 만들지 않을 경우, 자바의 컴파일러가 기본 생성자를 자동으로 추가하여 호출한다. 자동으로 추가된 기본 생성자의 내용은 빈칸이기 때문에 아무것도 일어나지 않는다. 이미 존재하는 생성자가 있으면 기본 생성자는 후순위로 밀린다.
매개변수가 있는 생성자
- 메서드처럼 매개변수를 통해 호출 시에 해당 값을 받아 인스턴스를 초기화하는 데 사용된다. 매개변수가 있는 경우에는 그 개수와 타입에 맞는 생성자를 호출해주어야 한다.
this()
- 생성자 간 상호 호출을 가능하게 하는 메서드로, 자신이 속한 클래스의 다른 생성자를 호출할 때 사용한다.
사용 조건
1. 생성자 내부에서만 사용 가능
2. 반드시 생성자 첫 줄에 위치해야함
public class Main {
public static void main(String[] args) {
Constructor c1 = new Constructor();
Constructor c2 = new Constructor(5);
}
}
class Constructor {
public Constructor() {
System.out.println("기본 생성자 호출."); // 첫번째 출력
}
public Constructor(int a) {
this(); // 두번째 출력
System.out.println("매개변수가 있는 생성자 호출."); // 세번째 출력
}
}
/*
출력
기본 생성자 호출.
기본 생성자 호출.
매개변수가 있는 생성자 호출.
*/
- Constructor 클래스는 기본 생성자와 매개변수가 있는 생성자를 가지고 있다. c1의 new 키워드가 인스턴스를 생성하면 첫번째 생성자가 호출된다.(첫번째 출력) 이후 c2의 두번째 생성자가 호출되면 this() 메서드가 출력되어 다시 기본 생성자가 호출되고(두번째 출력), 마지막으로 매개변수가 있는 생성자가 호출된다.(세번째 출력)
this
package Main.java;
public class PhoneTest {
public static void main(String[] args) {
Phone iphone = new Phone("iphone 14", "sierrablue");
System.out.println("내 폰은 " + iphone.model + "이고, 색상은 " + iphone.color + "입니다.");
iphone.call();
iphone.camera();
}
}
class Phone{
public String model; // 인스턴스 변수 model, color
public String color;
public Phone(String model, String color) { // 생성자의 매개변수 model,color
this.model = model; // this.model은 인스턴스 변수이고, model은 지역변수이다.
this.color = color;
}
void call() {
System.out.println("전화를 거는중");
}
void camera() {
System.out.println("카메라 시스템 작동중");
}
}
- 클래스 안의 인스턴스 변수와 매개변수는 이름이 같아 구분하기 어려운 데 이때, this 키워드를 사용하여 구분할 수 있다. this는 인스턴스 자신을 가리키며, this를 통해 인스턴스 자신의 변수에 접근할 수 있다.
- this를 사용하여 인스턴스 변수를 명시적으로 참조하므로 코드를 더 명확하게 만들고 오류 발생 가능성을 줄일 수 있다.
728x90
'[JAVA] > JAVA 기본' 카테고리의 다른 글
| [JAVA] 상속 (0) | 2022.09.06 |
|---|---|
| [JAVA]내부 클래스 (0) | 2022.09.05 |
| [JAVA] 자바의 변수와 메서드(오버로딩) (0) | 2022.09.04 |
| [JAVA] 클래스와 객체 (0) | 2022.09.02 |
| [JAVA] 입출력 (0) | 2022.08.30 |