객체를 생성하는 역할을 하는 구성 요소로서, 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드라고 정의한다.
new 키워드를 사용하여 객체를 생성할 때 호출되는 것이 생성자이다.
생성자는 인스턴스 변수들을 초기화하는 데 사용되는 특수한 메서드이다.
생성자의 이름은 반드시 클래스의 이름과 같아야 한다.
생성자는 리턴 타입이 없다. 하지만 메서드에서 리턴 값이 없을 때 표시하는 void 키워드를 사용하지 않는다.
생성자는 오버로딩이 가능하므로 한 클래스 내에 여러 개의 생성자가 존재할 수 있다.
cf. 메서드 오버로딩 : 하나의 클래스에 같은 이름의 메서드를 여러 개 정의하는 것을 의미한다.
this() 를 통하여 생성자도 상호 호출이 가능하다.
this()
메서드는 자신이 속한 클래스에서 다른 생성자를 호출하는 경우 사용한다.this()
메서드를 사용하기 위해서는 크게 2가지 문법요소를 충족시켜야 한다.this()
메서드는 반드시 생성자의 내부에서만 사용할 수 있다.this()
메서드는 반드시 생성자의 첫 줄에 위치해야 한다.public class Test {
public static void main(String[] args) {
Example example = new Example();
Example example2 = new Example(5);
}
}
class Example {
public Example() {
System.out.println("Example의 기본 생성자 호출!");
}
public Example(int x) {
this();
System.out.println("Example의 두 번째 생성자 호출!");
}
}
// 출력
Example의 기본생성자 호출!
Example의 기본생성자 호출!
Example의 두 번재 생성자 호출!
인스턴스 변수와 매개변수를 이름만으로는 구분하기가 어려워지는 문제가 발생하게 되는데, 이를 구분해주기 위한 용도로 주로 사용되는 방법이 this 키워드이다.
public class ConstructorExample {
public static void main(String[] args) {
Car car = new Car("Model X", "빨간색", 250);
System.out.println("제 차는 " + car.getModelName() + "이고, 컬러는 " + car.getColor() + "입니다.");
}
}
class Car {
private String modelName;
private String color;
private int maxSpeed;
public Car(String modelName, String color, int maxSpeed) {
this.modelName = modelName;
this.color = color;
this.maxSpeed = maxSpeed;
}
public String getModelName() {
return modelName;
}
public String getColor() {
return color;
}
}
// 출력
제 차는 Model X이고, 컬러는 빨간색입니다.
this.modelName = modelName
대신 modelName = modelName
라고 작성하면 둘 다 지역변수로 간주되게 된다.
모든 메서드에는 자신이 포함된 클래스의 객체를 가리키는 this 라는 참조변수가 있는데, 일반적인 경우 컴파일러가 this.
를 추가해주기 때문에 생략하는 경우가 많다.
this
는 인스턴스 자기 자신을 가리키며, 우리가 참조변수를 통해 인스턴스의 멤버에 접근할 수 있는 것처럼 this
를 통해서 인스턴스 자신의 변수에 접근 할 수 있다.