Coram Deo

ch 6-32~41 [객체지향 개념] - 생성자, this()와 참조변수 this 차이점, 변수 초기화 본문

자바의 정석

ch 6-32~41 [객체지향 개념] - 생성자, this()와 참조변수 this 차이점, 변수 초기화

탁탁슝 2022. 11. 3. 19:09

ch 6-32 생성자(constructor)

생성자

- 인스턴스가 생성될 때마다 호출되는 인스턴스 초기화 메서드

(객체 = iv 묶음 이므로, iv 초기화 메서드와 같은 말임.)

원래 객체 생성후 iv 초기화를 해야하는데, 생성자 호출을 하면 한번에 할 수 있음.

- 이름이 클래스 이름과 같아야 한다.

- 리턴값이 없다.(void 안붙임.)

- 모든 클래스는 반드시 생성자를 가져야 한다.

 

ch 6-33 기본 생성자(default constructor)

- 매개변수가 없는 생성자

class Data_1{ 
	int value; 
	Data_1(); // 기본 생성자
}

- 생성자가 하나도 없을 때만, 컴파일러가 자동 추가

(만약 생성자가 하나라도 있다면 컴파일러가 추가해주지 않음.)

* 따라서 대부분의 경우 클래스를 만들때는 기본 생성자를 꼭 만들어줘야 함.

 

ch 6-34 매개변수가 있는 생성자

< 아래 코드의 실행과정 >

Car c = new Car("white", "auto", 4);

1. 참조변수 c가 만들어짐.

2. new 연산자로 객체 생성

3. 매개변수가 있는 생성자 호출 후, 객체 초기화

4. 참조변수 c에 객체의 주소 대입

class Car {
	String color; 		// 색상
    String gearType;    // 변속기 종류 - auto(자동), manual(수동)
    int door; 			// 문의 개수


	Car() {} // 기본 생성자
	Car(String c, String g, int d) { // 매개변수가 있는 생성자
		color = c;
        gearType = g;
    	door = d;
    }
}

// 생성자 덕분에 객체 초기화가 간단해짐.
// Car c = new Car("white", "auto", 4);

ch 6-36 생성자 this()

- 생성자에서 다른 생성자 호출할 때 사용

- 다른 생성자 호출시 첫 줄에서만 사용가능

- 코드의 중복을 제거하기 위해 사용

- 클래스 이름대신 this()를 사용

 

ch 6-37 참조변수 this (생성자 this()와 전혀 관계 없음. 완전히 다른 개념 )

- 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있다.

- 선언하지 않아도 사용가능

- 인스턴스 메서드와 생성자에서만 사용가능

* static 메서드에서는 this 사용불가. (static 메서드는 객체 생성없이 사용가능하기 때문)

- 지역변수(lv)와 인스턴스 변수(iv)를 구별할 때 사용

* lv와 iv의 이름이 다른 경우 this 생략가능. 이름이 같은 경우는 생략불가.

 

ch 6-38 변수의 초기화

- 지역변수(lv)는 수동 초기화 해야함(사용전 꼭!!! 안그럼 에러남)

- 멤버 변수(iv, cv)는 자동 초기화된다.

* 대부분 0으로 자동 초기화됨.

자료형 기본값
boolean false
char '\u0000'
byte, short, int 0
long 0L
float 0.0f
double 0.0d 또는 0.0
참조형 null

ch 6-39 멤버변수(iv, cv)의 초기화

 

0. 자동초기화

    - 대부분 0으로 자동 초기화

1. 명시적 초기화 (=)

    - 선언시 대입연산자로 간단 초기화

2. 초기화 블럭

   - 인스턱스 초기화 블럭 : { }       // iv, 거의 안 씀

   - 클래스 초기화 블럭 : static { } // cv

   - 복잡 초기화

3. 생성자

   - iv 초기화, 복잡 초기화

 

* 멤버변수는 언제 초기화될까?

▶ 클래스 변수(cv) 초기화 시점 : 클래스가 처음 로딩될 때 단 한번(메모리에 올라갈 때)

▶ 인스턴스 변수(iv) 초기화 시점 : 인스턴스가 생성될 때 마다

 

* 초기화 순서

1. cv → iv

2. 자동 → 간단 → 복잡