본문 바로가기

Java Programming

null은 무엇인가? 아무것도 없는건가?

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

2.null은 객체인가?

Java에서 공참조(힙에 실제로 참조되는 object가 없는 참조)의 경우는 당연히 객체가 붙어 있지 않다. 그러나, Java API 레퍼런스의 NullPointerException 항에는 다음과 같이 기술되어 있다.

"object가 필요한 경우 application이 null을 사용하려고 하면 throw된다. 가령 다음과 같은 경우이다."
  • null object의 instance method 호출
  • null object의 field(member variables)에 대한 액세스 또는 그 값의 변경
  • null의 길이를 배열처럼 취득할 경우
  • null의 slot을 배열처럼 액세스 또는 수정
  • null을 Throwable처럼 throw 할 경우

위에서 null object라는 말이 등장하는데 이는 공참조에 객체가 붙어 있지 않은 것이 아니라 null을 가리키는 객체라고볼수 있다. 즉, 공참조라는 것은 JVM에서 봤을때 아무것도 참조하지 않는것이 아니라 null이라고 하는 object를 참조하고있는것이다. 그러나 JSL 4.3.1에서는 다음과 같이 나와있다.

"참조값(reference)은 이러한 객체의 포인터나 어떤 객체도 참조하지 않는 특수한 null참조가 된다"

즉, 공참조는 어떤 객체도 참조하지 않는다고 단정하고 있다. 하지만 '==' 연산에 있어 두개의 객체가 모두null이거나 동일한 객체 또는 배열 참조의 경우 true라고 되어있는것으로 봐서 서로 다른 두 객체가 동일한 null을참조하고 있으므로 true가 된것이 아닌가 하는 생각을 할 수 있다.

즉, null도 object라고 봐야 하지 않을까?

------------------------------------------------------------------------------------------------------
라는 내용이 있었는데.. 실제로 null 값이라면 아무것도 나오지 않아야 하는건가.. 하는 생각이 들었습니다.

ArrayList를 공부하던 도중에..

import java.util.*;

public class TestCollection1 {
   public static void main(String[] args) {
       List set = new ArrayList();

       set.add("superman");
       set.add("batman");
       set.add("apuaman");
       set.add("");
       set.add(new Integer(33));
       set.add(new Float(44.4F));
       set.add(new Long(33));
       set.add(new Integer(33));
       set.add("batman");

       System.out.println(set);
   }
}

의 경우에는 4번째 set.add(""); 에서 아무것도 넣지 않으면 널값일까.. 하다가.. String은 그냥 빈공간의
아무것도 만들어지지 않은 instance를 생성하는걸 알고 다시 테스트를 했습니다 =ㅅ=;;

import java.util.*;

public class TestCollection1 {
   public static void main(String[] args) {
       List set = new ArrayList();

       set.add("superman");
       set.add("batman");
       set.add("apuaman");
       set.add(null);
       set.add(new Integer(33));
       set.add(new Float(44.4F));
       set.add(new Long(33));
       set.add(new Integer(33));
       set.add("batman");

       System.out.println(set);
   }
}

이렇게 하게되면 아무것도 없는게 되겠죠? 당연히 아무것도 없는 값을 예상했었습니다만... =ㅅ=;;
일헌!!

[superman, batman, apuaman, null, 33, 44.4, 33, 33, batman]

이런 결과값이 나옵니다. null이라는 객체가 존재 하는걸까요?? null이라는 객체 속에는 null이 들어있는겁니다;
후덜덜;;; null도 object이라고 봐야하지 않을까? 라는 의문에는 네 그럴께여.. 라는 대답을 줄수 있었습니다.