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이 발생할 수 있습니다.
'Java' 카테고리의 다른 글
정적 바인딩, 동적 바인딩, 리플렉션 맛보기 (0) | 2024.07.30 |
---|---|
switch문에 대해.. (0) | 2023.06.23 |
String 메소드의 .equals와 .equalsIgnoreCase 의 차이점 (0) | 2023.06.23 |