티스토리 뷰
안녕하세요
Shiny Ocean 입니다 : )
이번 포스팅에서 다루어볼 내용은 NULL입니다.
개요
지금까지 개발을 진행해보며 NULL 이란 값은 정말 많이 접해왔습니다. 제게는 코드라인 보다는 주로 실행 콘솔창에 에러 메세지의 문구로 자주 등장하였습니다.
그런데 학부 과정에서 NULL은 그냥 값이 없다 이런식으로만 배우고 얼렁뚱땅 넘어갔던것 같습니다. 그래서 여러가지 NULL과 관련된 에러 또는 로직의 문제가 발생했을때 정확한 원인을 잡지못하고 넘어간적이 많았던것같습니다.
그래서 이번 포스팅은 NULL이 정확하게 무엇인지 언제 NULLPointer 예외가 발생하는지 등에 대해 다루어보겠습니다.
Null의 정의
사전적인 의미로는 없는, 값이없음 등의 의미를 하고있지만 코드적으로 그의미는 조금다릅니다. 값이 없다고 생각한다면 초기화 되지 않고 선언만 한 변수는 그값이 null일까요? 자바에서는 그렇지 않습니다.
자바에서 null은 변수가 참조하는 객체가 없을 경우 초기값으로 사용이 가능한것을 의미합니다.
따라서 해당 값은 참조타입의 변수에만 저장이 가능합니다. null로 초기화된 변수는 스택영역에 null 과함께 삽입되고 힙영역의 객체를 참조하지 않습니다.
즉 객체가 스택영역에서 힙영역의 번지를 포인팅하는 값이 없다는 의미로만 사용가능한것이 null입니다.
또, 객체 변수는 선언은했지만 해당 참조 대상은 참조해주지않은 null값의 객체에 접근하려는시도를 하게될때 발생하는것이 NullPointer 예외입니다.
간단한 코드를 통해 알아보겠습니다.
class Human{
int age;
String name;
@Override
public String toString() {
return this.age + ", " +this.name;
}
}
public class Exam {
public static void main(String[] args) {
Human man = null;
System.out.println(man);
//System.out.println(man.toString());
}
}
위의 코드는 Human이라는 객체를 man 이라는 변수명으로 변수를 선언했지만 null로 초기화하여 참조할 객체는 언급하지 않은체로 선언한 것입니다.
이러한 코드는 출력을 찍을 때에는 null이란 값이 나오지만 해당객체를 접근하는경우 (메소드, 필드에 대한 접근)에는 널포인터 예외를 발생시십니다 해당 코드를 주석을 제거하고 실행한 결과는 아래와 같습니다.
'Language > Java - 심화' 카테고리의 다른 글
Java(심화) - 객체 지향 프로그래밍 (0) | 2022.01.04 |
---|---|
Java(심화) - Enum 열거타입 (0) | 2021.12.30 |
Java(심화) - 스트링 타입과 객체 (0) | 2021.12.30 |
Java(심화) - 참조 타입과 메모리 활용 (0) | 2021.12.30 |
Java(심화) - intro (1) | 2021.12.28 |