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
관리 메뉴

충분히 쌓여가는

5.4 null과 NullPointerException 본문

이것이 자바다/05 참조 타입

5.4 null과 NullPointerException

빌드이너프 2024. 3. 31. 12:02

참조 타입 변수는 아직 번지를 저장하지 않고 있다는 뜻으로 null 값을 가질 수 있다

null로 초기화된 참조 변수는 스택 영역에 생성된다

 

참조 변수가 null 값을 가지는지 확인하려면 ==, != 연산 수행

String reVar1 = "자바";
String reVar2 = null;

refVar1 == null //false
refVar1 != null //true

reVar2 == null //true
reVar2 != null //false

 

참조 변수를 사용하면서 가장 많이 발생하는 예외 중 하나는 NullPointerException

변수가 null인 상태에서 객체의 데이터나 메소드를 사용하려 할 때 NullPointerException이 발생함

변수가 null인 상태에서 객체의 데이터나 메소드를 사용하려 할 때 발생

 

배열 변수 intArray에 null을 대입한 상태에서 배열 객체의 0 인덱스 항목에 10을 대입하면

intArray가 참조하는 배열 객체가 없으므로 10을 저장할 수 없다

int[] intArray = null;
intArray[0] = 10; //NullPointerException

 

str 변수에 null을 대입한 상태에서 문자열의 길이를 얻기 위해 length() 메소드를 호출하면 NullPointerException이 발생

str 변수가 참조하는 String 객체가 없으므로 문자열의 길이를 구할 수 없다

String str = null;
System.out.println("총 문자 수: " + str.length());

 

예제

package ch05.sec04;

public class NullPointerExceptionExample {
	public static void main(String[] args) {
		int[] intArray = null;
		// intArray[0]  = 10;
		
		String str = null;
		// System.out.println("총 문자 수: " + str.length());
	}
}

 

NullPointerException이 발생하면 예외가 발생된 곳에서 null인 상태의 참조 변수가 사용되고 있음을 인지해야 함

NullPointerException을 해결하려면 참조 변수가 객체를 정확히 참조하도록 번지를 대입해야 함

 

경우에 따라 참조 타입 변수에 일부러 null을 대입하기도 함

프로그램에서 객체를 사용하려면 해당 객체를 참조하는 변수를 이용해야 하는데, 변수에 null을 대입하면 번지를 잃게 되므로 더 이상 객체를 사용할 수 없게 된다

String hobby = "여행";
hobby = null;

 

어떤 변수에서도 객체를 참조하지 않으면 해당 객체는 프로그램에서 사용할 수 없는 객체가 된다

즉, 힙 메모리에는 있지만 위치 정보를 모르게 때문에 사용할 수 없게 된다

자바는 이러한 객체를 쓰레기로 취급하고, Garbage Collector을 실행시켜 자동으로 제거한다

자바는 코드를 이용해서 객체를 직접 제거하는 방법을 제공하지 않고, 객체를 제거하는 유일한 방법은 객체의 모든 참조를 없애는 것이다