Whiteship's Note

Null은 객체인가 아닌가?

Java : 2006.11.12 10:08


Null은 객체다.

Agile Java 번역서인 "지름길로 빠르게 배울 수 있는 자바 프로그래밍"의 p168쪽 중간에서 약간 위부분에 이렇게 쓰여있다.

명시적으로 초기화하지 않은 참조는 null 값을 가진다. null 값은 널 객체로 불리는 유일한 인스턴스를 나타낸다. null 객체에 메시지를 보내면, NullPointerException을 받게된다.

어디에 있을까.. API에 있으려나...없습니다. 아쉬운데로 NullPointerException API에 있는 내용을 읽어 봅니다.

Thrown when an application attempts to use null in a case where an object is required. These include:

  • Calling the instance method of a null object.
  • Accessing or modifying the field of a null object.
  • Taking the length of null as if it were an array.
  • Accessing or modifying the slots of null as if it were an array.
  • Throwing null as if it were a Throwable value.

Applications should throw instances of this class to indicate other illegal uses of the null object.

출처 : http://java.sun.com/j2se/1.5.0/docs/api/java/lang/NullPointerException.html

Null은 객체가 아니다.

먼저 가장 시각적으로 확인되는 실험을 통해 Null이 객체가 아니라는 것을 성일이 형이 증명(?) 했습니다. 트랙백을 걸어주셨으면 좋겠는데 아직 안걸어 주셔서 링크를 따옵니다.

그리고 구글 신님이 알려주신 링크 http://www.faqs.org/docs/thinkjava/chap08.htm 이곳에 8.10을 보면 null은 Java에서 "객체가 아님"을 나타내는 특별한 "값"(Java의 키워드)이라고 나와있습니다.

결론

마지막 링크가 걸린 곳의 하단에 보면 이러한 글을 볼 수 있습니다.
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.

"null이라는 값은 Object 가 아님을 나타 내주는 문자, 즉 자바의 키워드로 null object를 가리키는 특별한 값을 나타내는 키워드라고 생각합니다. 그리고 이 값(nul)을 가지고 있는 reference를 통해서 null object에 어떠한 call을 하든지 NullPointerException을 발생시킨다."

이것이 저의 결론이며 성일이 형이 실험한 "null instanceOf Object" 는 null은 Object가 아님을 나태내는 값이기 그런 결과가 나올 수 있다고 생각하며 그런 결과가 나온것이 타당하다고 생각합니다.

수학에서 보이지 않는 면에서 봐야 보이는 수인 허수 처럼 객체가 아닌 객체가 Null Object이고 그 것을 가리키는 값이 null이라는 키워드 아닐까 싶습니다.

그리고 대엽님이 달아준 리플에도 null type이라는 단어가 있습니다. type이라는 것은 어떤 객체가 있다고 보아도 무방하지 않을까요? 거기에 null reference라는 단어까지 사용되고 있습니다. 이로 미루어 보아 null도 일종의 매우 특별한 객체(객체가 아닌 객체이고 하는 일은 NullPointerException 리턴해주는 일)로 보아야 하지 않을까요?

'Java' 카테고리의 다른 글

상속에 대하여...  (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
탬플릿 클레스 만들기  (3) 2006.11.05
top

  1. Favicon of http://decoder.egloos.com BlogIcon decoder 2006.11.12 00:48 PERM. MOD/DEL REPLY

    안녕하세요? 지나가다 한번 글 남겨 봅니다.
    null에 대해 알아보고 계셨군요.
    Java Language Specification을 참고해 보는 것은 어떨까요?

    JLS 3rd를 보면 30페이지에 null에 대해 간략히 나타내고 있습니다.
    3.10.7 The Null Literal
    "The null type has one value, the null reference, represented by the literal null, which is formed from ASCII characters. A "null literal" is always of the null type."

    Java Language Specification 페이지입니다.
    http://java.sun.com/docs/books/jls/

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2006.11.12 09:46 신고 PERM MOD/DEL

    대엽님 반갑습니다. 주말은 잘 보내고 계신지.. 고급웹 프로그래밍 과제하기 싫어 죽겠습니다. ㅠ.ㅠ

    흠.. 정말 가보니 저렇게 딱 두 줄 있더군요. 애매합니다.

    "null 타입은 오직 하나의 값을 가지고 있다. null 문자를 가지고 있다. null 문자는 항상 null 타입이다."

    다른 문서도 찾아봤는데 글에 추가하겠습니다.

  2. 찬욱 2006.11.12 11:37 PERM. MOD/DEL REPLY

    자다 일어나서...가장 기초적으로 생각해보자면..

    오브젝트라 함은 특정 행동, 그러니까 메소드나 특정 값, 그러니까 변수를 가지고 있어야(없을 수도 있지만)

    null은 안 그렇지 않습니까~

    자다 일어나서 머리가 돌아가지 않군요...

    어제 11시까지 야근..-- 토요일은 야근이 좋아~~

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2006.11.12 11:43 신고 PERM MOD/DEL

    나도 Null 객체의 API를 본적이 없어서 어떤 메소드나 변수가 있는지는 모르겠지만 없지는 않은것 같다는 추측은 해볼 수 있지...

    "null 객체에 메시지를 보내면, NullPointerException을 받게된다."

    이 문장 때문에...

  3. Favicon of http://decoder.egloos.com BlogIcon decoder 2006.11.12 11:45 PERM. MOD/DEL REPLY

    ㅎㅎㅎ 제 생각은 JLS에 나와있는 그대로 null 은 리터럴이 아닌가 싶네요.
    \u0000 이라는 값을 가진 리터럴이요. ^^;
    null을 객체라 보기는 다소 어려울 것 같습니다.

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2006.11.12 12:36 신고 PERM MOD/DEL

    흠~ 그런가요. 그럼 http://www.faqs.org/docs/thinkjava/chap08.htm

    이곳에서 본 소스코드를 실험한 것을 다시 추가 해보겠습니다. 확인해 주세요. :)

  4. Favicon of http://hsi8007.tistory.com BlogIcon 한성일 2006.11.12 13:48 PERM. MOD/DEL REPLY

    헉 -_-;; 자다 일어나고 깜짝 놀랬네;; 어제 7시에 잠자리에 들었다가
    아 너 한테 트렉백을 달아주는게 예의겠다 라고 생각해서(너때문에 하게된 생각이니까);
    잠자리에서 일어나 여길 왔는데;
    근데 null은 Object다 라는게 떡하니 있는거야 그것때문에 아 다시함 생각해봐야겠다.
    라고 생각 하고 고민했지만; 결론 못내리고
    자면서 생각해보다가 아 어떠한 값도 Object라고 생각할 수 있겠다.
    라는 생각을 하게됐어 (비록 자바에서는 Object로 보지 않지만 )
    난 요즘 Object 라는것이 모든 것을 다 표현 할 수 있다는 생각을 했거든;;
    있다가 잠시후에 얘기해 보자 ㅎㅎ
    아 그리고 트랙백은 내가 다시 걸어야 하는건가??
    오늘 영회형한테 배우고 액션을 취하겠삼 ㅎㅎ
    있다봐~

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2006.11.12 14:12 신고 PERM MOD/DEL

    아 저도 오늘 아침에 decoder님이 리플을 달기 전까진 제 생각을 굳히고 있었는데요. 도무지 알수가 없어요.

    이 글에서 내린 결론이 맞는것인지..이 다음 글에서 내린 결론이 맞는건인지..

    둘 중 뭐가 맞는 건지 또는 둘다 틀린건지(이러면 안되는데ㅋ) 궁금하네요.

    트랙백은 아무때나 주셔도 괜찮아요~ 헤헷 :)

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2006.11.12 14:18 신고 PERM MOD/DEL

    아 그리고

    어떠한 값도 Object라고 생각할 수 있겠다.
    라는 생각을 하게됐어 (비록 자바에서는 Object로 보지 않지만 )
    난 요즘 Object 라는것이 모든 것을 다 표현 할 수 있다는 생각을 했거든;;

    이 중에서도 "비록 자바에서는 Object로 보지 않지만"에 공감합니다. 객체 지향 언어마다 제각각 Object에 대한 정의를 내리고 있기에 그 중 Java도 예외는 아니라고 생각하구요.

    Object 라는것이 모든 것을 다 표현 할 수 있다. 이 부분은 조금 철학적으로 생각하게 만드네요. :)

  5. Favicon of http://decoder.egloos.com BlogIcon decoder 2006.11.12 14:26 PERM. MOD/DEL REPLY

    C언어에서의 null에 대한 링크를 걸어두겠습니다.
    null과 같은 개념은 C언어에서 따왔다는 생각이 듭니다.
    Java의 기본적인 모습은 C언어에 바탕을 두고 있으니까요~

    http://www.cinsk.org/cfaqs/html/node7.html
    한글로 친절하고 충실하게 번역되어 있습니다. :)
    읽어보시면 이해하는데 분명 도움되실 겁니다~

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2006.11.12 14:38 신고 PERM MOD/DEL

    윽.. 무진장 헷갈리네요. 찍어주신 링크를 보면

    NULL은 반드시 포인터가 쓰이는 문맥에서만 쓰여야 합니다.

    이렇게 되어있고 Java에서도 레퍼런스 변수에만 null이라고 적어줍니다.

    그렇다면 역시 제가 이 글에서 내렸었던 결론과 비슷한 냄새가 느껴지게 되네요.

    좋은 링크 감사합니다. 주말인데 어디 안나가시나요? Agile Java 스터디 http://webapp2.net/tt/ 에 관심있으면 말씀해 주세요. :)

    참가 자격은 "열정" 뿐입니다.

  6. Favicon of http://decoder.egloos.com BlogIcon decoder 2006.11.12 15:16 PERM. MOD/DEL REPLY

    결론 잘 읽었습니다. 저도 이번에 많이 알게 되었습니다.
    제 링크가 도움이 되었다면 다행입니다.. :)
    ㅎㅎ; 그런데 타입을 꼭 객체라고 생각할 필요는 없을 것 같습니다.
    단순히 null은 언어를 이루는 빌딩 블록의 하나로서 언어 스펙상에서 특별하게 처리해주는 하나의 특별한 상수(값이 \u0000인)로 보면 될 것 같구요.

    주말에 가끔씩 아르바이트를 하러 오는데, 오늘이 마지막입니다.
    다음주부터는 학교 과제때문에 일을 못할 것 같구요. 웹 프로그래밍... -_-;;

    스터디는 상당히 재밌을 것 같군요... ^^; 참가자격이 다소 부담스럽긴 하지만요. ㅋㅋ;; 관심있어요.

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2006.11.12 23:10 신고 PERM MOD/DEL

    Agile Java 스터디는 격주로 일요일에 합니다. 관심있으시면 Agile Java 사이트에 있는 최신글(꼭 최신글일 필요는 없지만 눈에 잘 띄기 위해서요)에 댓글 남겨주시면 됩니다.

    오늘 스터디를 했으니 아마 다다음주 일요일에 하겠군요. 책은 "지름길로 빠르게 배울 수 있는 자바 프로그래밍"이란 책으로 하고 있구요. 다음 스터디 때는 8,9장을 할 차례네요.

    타입이라는 단어를 객체로 대체한 것은 아니구요. 타입이라는 단어로 객체가 있지 않을까 추정해 본것입니다. 헤헷 심증은 점점더 첫번째 글의 결론으로 굳어져 가는데요. 물증이 없네요.

    스팩의 글은 너무 애매하게 쓴 면이 없잖아 있어서 스펙으로는 부족함을 느끼게 되네요. 저의 영어 독해력이 부족할 수 도 있구요.

    좋은 주말 보내셨길~

Write a comment.




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