Whiteship's Note

Null은 객체인가 아닌가? 2

Java : 2006.11.12 12:54

http://www.faqs.org/docs/thinkjava/chap08.htm 이곳의 8.10에 있는 원문입니다.

8.10 null

When you create an object variable, remember that you are creating a reference to an object. Until you make the variable point to an object, the value of the variable is null. null is a special value in Java (and a Java keyword) that is used to mean "no object."

The declaration Point blank; is equivalent to this initialization

    Point blank = null;

and is shown in the following state diagram:

The value null is represented by a dot with no arrow.

If you try to use a null object, either by accessing an instance variable or invoking a method, you will get a NullPointerException. The system will print an error message and terminate the program.

    Point blank = null;
    int x = blank.x;              // NullPointerException
    blank.translate (50, 50);     // NullPointerException

On the other hand, it is legal to pass a nullobject as an argument or receive one as a return value. In fact, it iscommon to do so, for example to represent an empty set or indicate anerror condition.

이렇게 나와있습니다.

import java.awt.Point;

public class NullTest {
   public static void main(String args[]){
       Point blank = null;
       int x = blank.x;            
       blank.translate (50, 50);    
를 실험해본 결과.. compile은 통과 되고 실행시 NullPointerException이 발생합니다.

결국.. null은 그냥 그 레퍼런스가 아무것도 가리키고 있지 않다는 것을 나타내고 이러한 비어있는.. 즉 아무것도 가리키고 있지 않은 레퍼런스에 뭐든 call을 하면(레퍼런스의 타입에 정의되어 있는 메소드나 변수) NullPointerException이 발생한다는 것으로 결론을 맺는것이 해피하고 맞는것 같습니다.

결국 제가 잘못 생각했던 것 같습니다. Null Object라는 단어를 Null 객체가 아니라 비어있는 객체라고 비어있는 레퍼런스라고 생각을 했어야 했는데 너무 제멋대로 받아들인 격이 되었군요. 디코더(대엽)님께서 지적해 주셔서 한번 더 살펴봤기에 망정이지 계속 잘못 생각하고 있을뻔했습니다. 감사합니다. 찬욱이랑 성일형도 썡큐요~

'Java' 카테고리의 다른 글

Throwable 계층구조  (0) 2006.11.21
상속에 대하여...  (6) 2006.11.20
assertEquals()는 같은 Type을 비교하라.  (2) 2006.11.18
Java에서 실수 표현 부정확성  (19) 2006.11.15
Java 오픈소스 되다.(GPL 산하의)  (1) 2006.11.13
Null은 객체인가 아닌가? 2  (3) 2006.11.12
Null은 객체인가 아닌가?  (13) 2006.11.12
Reference Object 활용  (2) 2006.11.09
XML을 EXEL 파일로 바꾸기  (0) 2006.11.08
Enumeration & Iterator  (2) 2006.11.07
Auto (un)boxing은 -128~127  (4) 2006.11.07

: 1 : ··· : 114 : 115 : 116 : 117 : 118 : 119 : 120 : 121 : 122 : ··· : 140 :