Java/[inflearn] 자바 기본

[김영한_자바기본][2.기본형과 참조형] Null/NullPointerExcepiton 이해 (p.23-29)

줌인. 2024. 2. 2. 14:51
null은 가리키는 대상이 없거나, 나중에 입력하고 싶을때 사용된다.
nullPointerExceptionnull이 없는 곳(참조 주소가 없음)찾아갈 때 발생한다. 

 

 

 

 

 

NullPointerException 이해하기

[p.23 / Data 클래스]

public class Data {
    int value;
}

 

[p.26 / 지역 변수 내 NullPointerException] NullPointerException 이해하기

public static void main(String[] args) {
    Data data = null;
    data.value = 10; //NullPointerException발생 = 주소가 없는 곳을 찾아감
    System.out.println("data.value = " + data.value);
}

>> 출력값

Exception in thread "main" java.lang.NullPointerException: Cannot assign field "value" because "data" is null
at ref.NullMain.main(NullMain.java:7)

 

 

[p.29 / NullPointerException 해결 방법] 객체 생성 추가  (← ← : 파고들기로 이해)

public static void main(String[] args) {
    BigData bigData = new BigData();
    bigData.data = new Data(); //data변수에 객체 생성을 넣어준다.
    System.out.println("bigData.count = " + bigData.count);
    System.out.println("bigData.data = " + bigData.data);

    System.out.println("bigData.data.value = " + bigData.data.value);
}

 

 

[p.23 / Data 클래스]

public class Data {
    int value;
}

 

[p.27 / BigData 클래스] 단순 멤버 번수 선언시 자동 초기화 된다

public class BigData {
    Data data; //Data data = null;의 의미로 사용된다. (자동초기화) 즉 단순 변수 선언
    int count;
}

 

- int = 0;

- boolean = false;

- 참조형 = null;

 

[p.27 / 멤버 변수 내 NullPointerException] null값에 참조할 내역이 없으므로 NullPointerException이 걸린다.

public static void main(String[] args) {
    BigData bigData = new BigData();
    System.out.println("bigData.count = " + bigData.count);
    System.out.println("bigData.data = " + bigData.data); //null

    //nullpointerexception
    System.out.println("bigData.data.value = " + bigData.data.value);
}

>> 출력값

bigData.count = 0
bigData.data = null
Exception in thread "main" java.lang.NullPointerException: Cannot read field "value" because "bigData.data" is null
at ref.NullMain3.main(NullMain3.java:9)

 


BigData에 null값이 아니었다면?

[p.27 / BigData 클래스] 

public class BigData {
    Data data = new Data();
    int count;
}

>> 출력값

bigData.count = 0
bigData.data = ref.Data@312b1dae
bigData.data.value = 0


 

 

 

Null 이해하기

[p.23 / Data 클래스]

public class Data {
    int value;
}

 

[p.23 / Null값 할당] Null 이해하기

public static void main(String[] args) {
    Data data = null; //null -> 값이 없다. 참조값의 위치가 없다
    System.out.println("1. data = " + data);

    data = new Data(); //설계툴 -> 인스턴스/객체 생성
    System.out.println("2. data = " + data);

    data = null; //null -> 값이 없다. 참조값의 위치가 없다
    System.out.println("3. data = " + data);
}

 

>> 출력값

1. data = null
2. data = ref.Data@1d81eb93
3. data = null

 

Gc(카비지 컬렉션)은 참조하지 않는 인스턴스가 있을 경우 자동으로 메모리에서 제거해준다.

 

728x90