생성자
•
객체가 생성될 때에 필드에 초기값을 제공하고 초기화 절차를 실행하는 메소드
•
리턴 타입 없음
•
클래스 이름과 함수이름이 같음
class Pizza{
int size;
public Pizza(){
size = 12;
type = "슈퍼슈프림";
}
publiv Pizza(int a, String t){
size = s;
type = t;
}
}
public class PizzaTest{
public static void main(String[] args){
Pizza obj1 = new Pizza();
}
}
Java
복사
기본 생성자
생성자에 주의할점
this - 객체 자신을 가리키는 참조변수
Car(String color, String gearType, int door) {
// this.color는 iv, color는 lv
this.color = color;
this.gearType = gearType;
this.door = door;
}
Java
복사
위의 코드에서처럼 생성자의 매개변수로 선언된 변수의 이름이 color로 인스턴스 변수 color와 같을 경우에는 이름만으로 두 변수가 서로 구별이 안 된다. 이런 경우에는 인스턴스 변수 앞에 ‘this’를 사용하면 된다.
‘this’를 사용할 수 있는 것은 인스턴스멤버뿐이다. static메서드(클래스 메서드)에서는 인스턴스 멤버들을 사용할 수 없는 것처럼, ‘this’역시 사용할 수 없다. 왜냐하면, static메서드는 인스턴스를 생성하지 않고도 호출될 수 있으므로 static메서드가 호출된 시점에 인스턴스가 존재하지 않을 수도 있기 때문이다.
this 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있다.
모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재한다.
this(), this(매개변수) 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용한다.
this() 함수
public class Circle{
int radius;
public Circle(int radius){
this.radius = radius;
}
public Circle(){
this(0); // 생성자 Circle(int radius)를 호출. Circle(0);
}
double getArea(){
return 3.14 * radius * radius;
}
}
Java
복사
생성자 함수 호출시, 뒤의 로직이 있을 경우
// 올바른 예
public Person(String name, String passport){
this(name);
this.passport = passport;
}
// 틀린 예
public Person(String name, String passport){
this.passport = passport;
this(name);
}
Java
복사
생성자에서 다른 생성자를 첫 줄에서만 호출이 가능하도록 한 이유는 생성자 내에서 초기화 작업도중에 다른 생성자를 호출하게 되면, 호출된 다른 생성자 내에서도 멤버변수들의 값을 초기화를 할 것이므로 다른 생성자를 호출하기 이전의 초기화 작업이 무의미해질 수 있기 때문.
this와 this()의 차이
this는 클래스 내부에서 자기 자신을 가리키는 용도로 사용
this()는 같은 클래스의 다른 생성자를 호출할 때 사용