[Java] 생성자와 this

Jeon817·2023년 4월 17일

Java

목록 보기
1/4

[생성자란?]

  • 객체가 생성될 때 호출되며, 객체를 초기화 해주는 역할을 합니다.
  • 생성자의 이름은 클래스의 이름과 같아야 하고, 리턴 값이 없습니다.
  • 생성자도 오버로딩이 가능하므로 하나의 클래스에 여러개의 생성자가 존재할 수 있습니다.
  • 객체를 만들때 인스턴스마다 다른 값을 가져야 한다면 생성자를 통해서 필드를 초기화 할 수 있습니다. 예를 들어 만들어지는 자동차 마다 모델, 색상, 가격이 다르다면 생성자를 사용하여 필드의 값을 초기화 하는 것이 좋습니다.
  • 모든 클래스에는 생성자가 반드시 하나 이상 정의되어 있어야 합니다. 만약 클래스에 생성자를 하나도 선언하지 않았다면 컴파일러는 기본 생성자(선언할 때 괄호( ) 안에 아무것도 넣지않는 생성자)를 바이트코드 파일에 자동으로 추가시켜줍니다. 따라서 이러한 경우는 기본 생성자 생략이 가능합니다(컴파일러에 의해 생성되는 기본 생성자는 해당 클래스의 접근 제어자를 따릅니다).

ex)

class Car() {
	car() {} //매개변수가 없는 생성자
    car(String a, int b) {} //매개변수가 있는 생성자
}
public class Car() {
	public car() {} //컴파일러가 추가해줌
} 

[this와 this()]

  • this 는 '이것' 이란 뜻으로 객체 즉, 인스턴스 자신을 가리키는 참조변수 이고, 인스턴스의 주소가 저장되어 있습니다(모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재).
  • this() 생성자를 표현한 것으로 같은 클래스의 다른 생성자를 호출할 때 사용하고 this() 를 사용하면 코드의 중복을 줄일 수 있습니다. 아래 두 조건을 만족한다면 생성자 간에도 서로 호출이 가능합니다.
    1) 생성자의 이름으로 클래스이름 대신 this를 사용한다.
    2) 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다.

ex)

class car() { //car -> this
	car() //car -> this()
}

ex) this

Car(String color, String type, String door) { /
	this.color = color;
    this.type = type;
    this.dorr = dorr;
}
  • this에 관한 예제를 설명하면, 생성자의 매개변수로 선언된 변수의 이름이 color로 인스턴스 변수 color와 같을 경우에는 이름만으로는 두 변수가 서로 구별이 안됩니다. 이런 경우에는 인스턴스 변수 앞에 'this'를 사용하면 됩니다.
  • 이렇게 하면 this.color는 인스턴스 변수이고 color는 생성자의 매개변수로 정의된 지역변수로 서로 구별이 가능합니다.

ex) this()

public Car(String model) {
    this.model = model;
    this.color = "Blue";
    this.price = 50000000;
}
public Car(String model, String color) {
    this.model = model;
    this.color = color;
    this.price = 50000000;
}
public Car(String model, String color, double price) {
    this.model = model;
    this.color = color;
    this.price = price;
}
public Car(String model) { //(1)
    this(model, "Blue", 50000000);
}
public Car(String model, String color) { //(2)
    this(model, color, 100000000);
}
public Car(String model, String color, double price) { //(3)
    this.model = model;
    this.color = color;
    this.price = price;
}
  • (1), (2) 번 생성자는 model 혹은 model, color 만 받게 되면 (3)번 생성자를 호출하게 됩니다.
  • 생성자를 안에서 호출할 때 꼭 첫 번째 줄에서 호출해야 합니다. 위에 어떠한코드도 있으면 안됩니다.

0개의 댓글