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