본문 바로가기
Java

java NullPointerException(NPE)

by ycjung93 2023. 6. 23.

JAVA 메모리 구조

참조타입의 종류 : 열거 타입 , 배열 타입, 클래스, 인터페이스

참조 타입의 경우는 메모리 구조에서 Stack영역에 실제값이 아닌 참조값(reference값)을 지니고 있다.

실제값은 Heap영역에 저장이 되는데, 참조값이란 Heap영역의 주소값이라고 보면 된다.

String name = new String("홍길동");

이 한줄 코드는 Stack영역에 name이라는 이름과 '참조값'이 들어있다.

참조값을 따라가다보면 Heap영역에 도착하고 그 곳에 실제값(홍길동)이 저장되어 있다.

String name = null;

위의 코드처럼 'null'이라는 값을 넣어서 '참조값이 없다'로 지정할 수 있다.

보통 String은 대표적인 자바클래스로써 String클래스 내부에

.length() - 문자열의 길이 계산

.equals(...) - 문자열 비교

과 같은 method들이 있는데,

다음과 같이 썼을때.

위와 같은 NullPointerException 이라는 에러가 뜬다.

이유는..

name이라는 곳에 null 값을 줌으로써 참조하는 곳이 없는데

name.length() 라는 길이 method를 호출하고 있다.

.(점) 을 통해서 해당 메소드를 접근하기 위해서는 가장 먼저

new연산자를 통한 인스턴스화를 하거나 해당 변수가 참조할 수 있는 어떤 값을 대입해주어야 된다.

String 자료형뿐만 아니라 사용자 정의 클래스나 라이브러리 등에서

특정 클래스의 메소드를 사용하기 위해서는 해당 클래스가 반드시 인스턴스화(new...)되어야 된다.

인스턴스화를 확인하지 않고 메소드에 접근하면 NullPointerException이 발생할 수 있습니다.