일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 클래스 변수
- stateful widget
- 프로그래머스
- this()
- stateful widget 생명주기
- 운영체제의 예
- 호출스택
- 오버로딩
- 명예의전당(1)
- object클래스
- PriorityQueue
- 참조형 매개변수
- 기본형 매개변수
- this()와 참조변수 this 차이점
- 운영체제의 분류
- 초기화 순서
- 이것이코딩테스트다
- 인스턴스 메서드
- stateless widget
- FLUTTER
- 참조형 반환타입
- 운영체제의 구조
- static 메서드
- 조상의 생성자
- static import문
- 운영체제란 무엇인가
- webview_flutter
- 객체 배열
- 운영체제의 목적
- 오버라이딩과 오버로딩 차이점
- Today
- Total
Coram Deo
ch 6-32~41 [객체지향 개념] - 생성자, this()와 참조변수 this 차이점, 변수 초기화 본문
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. 자동 → 간단 → 복잡
'자바의 정석' 카테고리의 다른 글
ch 7-10~16[객체지향 개념] - super, 패키지, classpath, import문 (0) | 2022.11.06 |
---|---|
ch 7-1~9 [객체지향 개념] - 상속, 포함 관계, 오버라이딩과 오버로딩 차이점 (0) | 2022.11.05 |
이클립스 git repository 경로 확인 방법 (0) | 2022.11.02 |
ch 6-26~31 [객체지향 개념] - static 메서드, 인스턴스 메서드, 오버로딩 (0) | 2022.11.01 |
코포자를 위한 코딩 공부법 #3 (0) | 2022.10.31 |