인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드
위의 문구가 이해가 잘 안간다면 아래의 예시를 보자
class Car{
int speed; // 인스턴스 변수
void start(){ //인스턴스 메서드
}
void car(int speed){ // 이 부분이 생성자!!!
this.speed = speed;
// 이 부분은 인스턴스 변수 speed를 매개변수 speed로 초기화
this는 나중에 이해하자
}
}
위와 같이 클래스가 정의 되어 있다면 우리는
int Car c = new Car();
이런식으로 객체를 만들었다
근데 이 때 생성자를 사용한다면
int Car c = new Car(10);
이렇게 객체를 만든다면
speed 객체의 인스턴스 필드 speed가 10으로 초기화 된다
즉 인스턴스 초기화 메서드
이다
- 생성자의 이름은 클래스의 이름과 같아야 한다.
- 생성자는 리턴이 없다
위 코드 또한 생성자의 조건과 모두 일치하는 것을 볼 수 있다
"엥? 그동안 클래스에 생성자 안만들어도 오류 안나던데요?"
=> 그 이유는 기본 생성자를 컴파일러가 제공하기 때문이다
class Car{
int speed; // 인스턴스 변수
void start(){ //인스턴스 메서드
}
// Car(){} 가 기본생성자로 숨어있다
}
단, 컴파일러가 기본생성자를 추가해주는 경우는 클래스 내에 생성자가 하나도 없을 때다
만약 클래스 내에 생성자가 하나라도 있다면 에러가 발생한다
ex)
class Car{
Car(int x){
}
}
위 코드에서 Car c = new Car();
를 한다면
car()로 초기화하는 생성자가 없어서 에러가 발생한다(기본 생성자 추가 x)
생성자에서 다른 생성자를 호출할 때 사용
다른생성자 호출 시 첫 줄에서만 사용이 가능하다
코드의 중복을 제거할 때 주로 사용
class Car(){
String color;
int speed;
Car(){
this("노랑", 10); // 생성자 this()
// Car("노랑", 10); 과 같다
// 같은 클래스일 땐 this()로 사용
}
Car(String color, int speed){
this.color = color;
this.speed = speed; // 참조변수 this
}
}
인스턴스 자신을 가리키는 참조변수(인스턴스의 주소가 저장)
모든 인스턴스 메서드에 지역변수로 숨어있다 (선언을 안해도 사용할 수 있음)
인스턴스 메서드에서 사용 가능 (생성자 포함)
지역변수와 인스턴스 변수를 구분하기 위해 사용
class Car(){
String color; // 인스턴스 변수
int speed;
Car(String color, int speed){ // 매개변수 - 지역변수
this.color = color;
this.speed = speed; // 참조변수 this
}
}
위와 같이 같은 변수의이름이지만
this.color = 인스턴스 변수 즉 필드의 변수를 의미하고
color = 매개변수로 받은 지역변수를 의미한다 구분하기 위한 용도!!
this, this()의 차이를 완벽히 익혔다
this()는 사실 사용할 일이 많이 없었어서 사용 안했지만 이번에 어떻게 사용하는지 확실히 익힐 수 있는 시간이 되었다
생성자의 개념을 처음 접하는 사람은 이해가 어려울 수 있다
이는 아직 익숙하지 않은 것일 뿐이기 때문에 여러번 보다보면 익혀질 것이다!