7.1.2 필드와 지역 변수의 초깃값

jh·2022년 1월 26일
0

Do it! 자바 완전 정복

목록 보기
57/70

필드와 지역 변수의 또 다른 차이점은 초깃값이다. 필드는 직접 초기화하지 않아도 강제로 초기화된다. 반면, 지역 변수는 직접 초기화 하지 않으면 저장 공간이 빈 공간 그대로 있어 값을 출력하고자 할 때 오류가 발생한다. 이는 사실 필드와 지역 변수의 차이가 아니라 각각이 위치하는 메모리 영역의 특징이다. 힙 메모리에는 빈 공간이 저장될 수 없기 때문에 힙 메모리에 위치하는 필드는 강제로 초기화되는 것이고 스택 메모리는 강제로 초기화되지 않으므로 여기에 저장되는 지역 변수 또한 그 특징을 지니고 있는 것이다.

다음 예제를 살펴보면 필드 m,n 그리고 지역 변수 k를 모두 초기화하지 않았다. 초기화하지 않은 지역 변수를 출력하고자 할 때는 오류가 발생하지만 int 자료형의 두 필드는 값 0을 출력한다. 필드가 강제로 초기화됐기 때문이다.

class A {
    int m;
    int n;

    void work1() {
        int k;
        //System.out.println(l); // 초깃값 없이 출력을 시도해 오류 발생
    }
}

public class jh {
    public static void main(String[] args) {
        A a = new A();
        System.out.println(a.m); // 0
        System.out.println(a.n); 
        // a.work1();
    }     
}

5장에서 언급한 것처럼 강제 초기화 값은 필드의 자료형에 따라 다르다. 기본 자료형일 때 불리언 자료형은 false, 정수형은 0, 실수형은 0.0으로 초기화된다. 이외에 모든 참조 자료형은 어느 위치도 가리키고 있지 않다는 것을 나타내는 null 값으로 초기화된다.

실습

class A {
   boolean m1;
   int m2;
   double m3;
   String m4;
   void printFieldValue() {
       System.out.println(m1);
       System.out.println(m2);
       System.out.println(m3);
       System.out.println(m4);
       // 필드는 초기화하지 않아도 값이 강제 초기화돼 출력 가능
   }
   void printLocalVariable() {
       int k;
       // System.out.println(k); // 지역 변수를 초기화하지 않아 오류 발생
   }
}

public class jh {
    public static void main(String[] args) {
        // 클래스를 활용해 객체 생성
        A a = new A();
        // 객체 활용 
        a.printFieldValue();
    }
}

결과

profile
코딩 공부 중...

0개의 댓글