[작성일: 2023. 01. 26]
목차
변수의 초기화
- 지역변수(lv)는 수동초기화 해야 함(사용 전 꼭!!!!)
- 메서드는 호출 스택에 계속 쌓였다가 지워졌다가 하기 때문에 생명주기가 굉장히 짧음. 매번 0으로 초기화하면 성능이 떨어지기 때문에 새로운 값으로 덮어써야 함. (수동 초기화)
- 멤버변수(iv, cv)는 자동 초기화됨.
- 타입마다 다르지만 근본적으로는 0으로 초기화됨.
class InitTest {
int x; // 인스턴스 변수, 자동 초기화
int y = x; // 인스턴스 변수(iv)
void method1() {
int i; // 지역변수(lv)
int j = i; // 에러. 지역변수를 초기화하지 않음.
멤버변수(iv, cv)의 초기화
- 클래스 변수(cv): 클래스가 처음 로딩될 때 단 한 번 초기화함.
- static {} 사용
- 인스턴스 변수(iv): 인스턴스가 생성될 때마다 초기화함.
- 생성자 사용
class InitTest {
static int cv = 1; // 명시적 초기화(간단 초기화)
int iv = 1; // 명시적 초기화
static { cv = 2l } // 클래스 초기화 블럭
{ iv = 2; } // 인스턴스 초기화 블럭(잘 안 씀)
InitTest() { // 생성자
iv = 3;
}
}
명시적 초기화(=), 간단 초기화
- 선언 시 대입 연산자 사용
class Car {
// iv를 대입연산자로 초기화
int door = 4; // 기본형 변수의 초기화
Engine e = new Engine(); // 참조형 변수의 초기화
초기화 블럭, 복잡한 초기화
- 객체 생성 시 무조건 실행되는 함수
class StaticBlockTest {
static int[] arr = new int[10]; // 명시적 초기화
static { // 클래스 초기화 블럭 - 배열 arr을 난수로 채움
for(int i=0; i<arr.length; i++) {
arr[i] = (int)(Math.random()*10)+1;
}
}
}
static { } | - 무조건 최초에 한 번만 실행되는 함수 - 클래스(cv) 초기화 블럭 |
{ } | - 객체가 생성될 때마다 생성자보다 먼저 실행되는 함수 - 생성자들마다 공통적으로 실행하는 내용 - 인스턴스(iv)초기화 블럭 / (거의 안 씀) |
생성자
- iv 초기화, 복잡한 초기화에 사용
Car(String color, String gearType, int door) {
// 매개변수가 있는 생성자
this.color = color;
this.gearType = gearType;
this.door = door;
}
🐣 해당 게시글은 자바의 정석(남궁성 님) 영상으로 함께 공부하며 요약/정리한 글입니다.
🐣 입문 개발자가 작성한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.