개발 언어/Java
[Java] 생성자
나규태
2021. 8. 24. 22:24
생성자
생성자란?
인스턴스 생성 시 호출되는 "인스턴스 초기화 메서드"이다
1. 생성자의 조건
- 생성자의 이름과 클래스의 이름이 같아야 한다.
- 생성자는 리턴 값이 없다.
public Sample {
Sample() { // 생성자
...
}
}
1.1. 생성자의 특성
- 생성자도 오버로딩이 가능하다.
- 인스턴스 생성은 "new"가 생성한다.
- 생성자는 인스턴스 변수들을 초기화에 사용되는 메서드이다.
1.2. 인스턴스 생성 수행 과정
- 연산자 new에 의해서 메모리(heap)에 클래스의 인스턴스가 생성된다.
- 생성자 클래스()를 호출되어 수행한다.
- 연산자 new의 결과로 생성된 클래스 인스턴스의 주소가 반환되어 참조 변수에 저장된다.
인스턴스 생성 시 클래스 내에 선언되어 있는 생성자 중 하나를 선택해야 한다.
class Sample {
private int a;
private int b;
private int c;
Sample() {
this(0, 0, 0);
}
Sample(int a, int b, int c) {
this.a = a;
this.b = b;
this.c = c;
}
}
Sample sm = new Sample(); // new를 이용한 인스턴스 생성
Sample sm = new Sample(1, 2, 3); // 생성자 중 매개변수 있는 생성자 선택
2. 기본 생성자
클래스 내에 생성자가 없으면 컴파일러가 자동으로 기본 생성자를 추가하여 컴파일한다.
// 컴파일 전
class Sample {
}
// 컴파일 후
class Sample {
Sample() {}
}
3. 생성자에서 다른 생성자 호출하기 - this(), this
- 생성자에서 인스턴스 변수 앞에 this를 붙여 사용한다. 그 이유는 매개변수와 혼동이 올 수 있기 때문이다.
- this는 참조 변수로 인스턴스 자기 자신을 가리킨다. ex) Sample sm = new Sample(); 의 sm과 this가 같다.
- static 메서드에서는 this 사용 불가능하다.
* this
- 인스턴스 자신을 가리키는 참조 변수이다.
- 인스턴스의 주소가 저장되어 있다.
- 모든 인스턴스 메서드에 지역변수로 숨겨져 있다.
* this()
- 생성자 말한다.
- 같은 클래스의 다른 생성자를 호출 시 사용한다.
3.1. 생성자의 이름으로 클래스 이름 대신 this를 사용
class Sample {
private int a;
private int b;
private int c;
Sample() {
this(0, 0, 0);
}
Sample(int a, int b, int c) {
this.a = a;
this.b = b;
this.c = c;
}
}
3.2. 한 생성자에서 다른 생성자를 호출할 때 반드시 첫 줄에서만 호출 가능
class Sample {
private int a;
private int b;
private int c;
// 예시 1
Sample() {
this(0, 0, 0);
}
// 예시 2
Sample() {
this.a = 0;
this(0, 0, 0); // 에러
}
Sample(int a, int b, int c) {
this.a = a;
this.b = b;
this.c = c;
}
}
예시 2번의 이유는 생성자끼리의 호출 이전에 하는 초기화 작업이 무의미 해지기 때문에 에러가 발생하는 것이다.