Notice
Recent Posts
Recent Comments
«   2024/12   »
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
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

변수의 초기화 본문

Java/객체지향

변수의 초기화

빌드이너프 2023. 6. 1. 22:17

멤버변수(iv, cv)는 자동 초기화됨

지역변수(lv)는 수동 초기화 해야됨

class InitTest{
    int x; // iv
    int y = x; // iv
    
    void method1() {
        int; // lv
        int j = i; // 에러: 지역변수를 초기화하지 않았기 때문
    }
}

 

수정된 코드

class InitTest{
    int x; // iv
    int y = x; // iv
    
    void method1() {
        int = 0 ; // lv, 어떤 값이든 넣어 초기화 시켜줌
        int j = i; // 에러: 지역변수를 초기화하지 않았기 때문
    }
}

 

 

멤버변수(iv, cv)의 초기화

1. 명시적 초기화(=) (간단 초기화)

대입 연산자 = 사용

class Car {
    int door = 4; // 기본형 변수의 초기화
    Engine e = new Engine(); // 참조형 변수의 초기화
}

 

2. 초기화 블럭(cv 초기화) (복잡 초기화)

iv -> 인스턴스 초기화 블럭: {} 거의 사용하지 않는다

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

 

3. 생성자(iv 초기화) (복잡 초기화)

Car(String color, String gearType, int door) { // 매개변수 있는 생성자
    this.color = color;
    this.gearType = gearType;
    this.door = door;
}

 

cv, iv 초기화 종류

  • 자동 초기화
    • 0과 같이 자동으로 초기화됨
  • 간단 초기화
    • 대입 연산자 = 사용
  • 복잡 초기화
    • static block{} 사용 -> cv 초기화
    • 생성자 사용 -> iv 초기화

 

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;
        }
    }
}

 

초기화 시점

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

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

 

class InitTest {
    static int cv = 1; // 명시적 초기화(간단 초기화)
    int iv = 1; // 명시적 초기화(간단 초기화)
    
    static { cv = 2; } // 클래스 초기화 블럭(복잡 초기화)
    { iv = 2; } // 인스턴스 초기화 블럭(복잡 초기화)
    
    InitTest() { // 셍성자(복잡 초기화)
        iv = 3;
    }
}

 

 

정리

초기화 순서

1. cv -> iv (cv 초기화 된 후 iv 초기화)

2. 자동 초기화(0) -> 간단 초기화(=) -> 복잡 초기화(static{}, 생성자)

'Java > 객체지향' 카테고리의 다른 글

포함(Composite) 관계  (0) 2023.06.04
상속(Inheritance)  (0) 2023.06.04
생성자 this()와 참조변수 this  (0) 2023.06.01
생성자 Constructor  (0) 2023.06.01
오버로딩 overloading  (0) 2023.05.30