생성자 (Constructor)와 this
생성자 (Constructor)
Time t = new Time(); // 기본 생성자
t.hour = 12;
t.minute = 34;
t.second = 56;
Time t = new Time(12,34,56); // 매개변수 있는 생성자 호출, 생성자 쓰는 이유
- 인스턴스가 생성될 때마다 호출되는 인스턴스 초기화 매서드
- 인스턴스 생성시 수행할 작업(IV 초기화 등)에 사용한다.
조건
- 생성자 이름은 클래스 이름과 같다.
- 매개변수 유무에 따른 오버로딩이 가능하다.
- 반환값이 없다. (void 안 붙임)
- 모든 클래스는 1개 이상의 생성자를 반드시 가져야 한다.
기본 생성자
class Data1 {
int value;
// 컴파일러가 기본 생성자 자동 추가
// Data1() {}
}
class Data2 {
int value;
// 생성자가 하나도 없을 때만 컴파일러가 기본 생성자 자동 추가
// 생성자가 하나라도 있으니까 기본 생성자 따로 추가해줘야 함
// Data2() {}
Data2(int x) {
value = x;
}
}
public class c6_6_210413 {
public static void main(String[] args) {
Data1 d1 = new Data1();
Data2 d2 = new Data2(); // ERROR:Data2(){} 기본 생성자 없으면
}
}
- 매개변수가 없음
- 생성자가 하나도 없을 때만 컴파일러가 자동 추가 → 기본 생성자 없고 생성자만 있으면 반드시 기본 생성자 따로 추가
결론
- 참조 변수를 선언한다.
- 생성자가 아닌 new 연산자가 객체를 생성한다.
- 생성자는 호출을 통해 생성한 객체의 IV를 초기화한다.
- 객체의 주소(new 연산자의 반환값)를 참조 변수에 연결(대입)한다.
생성자 this()
class Car2 {
String color; // this.color
String gearType; // this.gearType
int door; // this.door
// 코드 중복 제거하기 위해 this 사용
Car2(){
color="white";
gearType="auto";
door=4;
}
Car2() {
this("white", "auto", 4);
// 첫 줄
// Car2(String c, String g, int d) 호출
}
Car2(String color) {
this(color, "auto", 4);
// 첫 줄
// Car2(String c, String g, int d) 호출
}
Car2(String c, String g, int d) {
this.color = c;
this.gearType = g;
this.door = d;
}
}
this("white", "auto", 4);
- 생성자에서 다른 생성자 호출할 때 사용한다.
- 다른 생성자 호출시 첫 줄에서만 사용 가능하다.
참조변수 this
// lv와 iv의 이름이 똑같으므로 this 생략 불가
Car2(String color, String gearType, int door) { // lv
this.color = color; // iv = lv
this.gearType = gearType;
this.door = door;
}
Car2(String c, String g, int d) { // lv
this color = c; // iv = lv
gearType = g; // this 생략 가능
door = d;
}
static long add(long a, long b) {
return a + b; // 객체 생성 여부 모르기 때문에 iv 사용 불가하여 this도 사용 불가
- 인스턴스 자신을 가리키는 참조 변수
- 인스턴스 메서드(생성자 포함)에서 사용 가능하다.
- 지역변수(lv)와 인스턴스 변수(iv)를 구별할 때 사용한다.
- 생성자 this()와 다르다.
요약
this
- 객체 자신을 가리키는 참조 변수, 객체의 주소가 저장되어 있다.
- 모든 인스턴스 메서드에 지역 변수로 숨겨진 채로 존재하여 선언하지 않고 사용 가능하다.
- lv와 iv를 구분하기 위해 사용한다.
- 생성자와 인스턴스 메서드에서 사용 가능하며 클래스 메서드에서는 사용 불가하다.
this(), this(매개변수)
this
this(), this(매개변수)
생성자로써 같은 클래스의 다른 생성자를 호출할 때 사용한다.
Author And Source
이 문제에 관하여(생성자 (Constructor)와 this), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@solda/생성자-this저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)