본문 바로가기

Programming/JAVA

JAVA : boxing, unboxing

기본type 을 객체로 쓰려한다면 -> boxing
객체를 기본type으로 쓰려한다면 -> unboxing

이때 boxing이 된 기본 type은 객체이므로 heap 메모리에 올라가고
객체였던 것을 기본type으로 unboxing 할 경우엔 stack 메모리에 올라가게 됩니다.

ex )
int i = 123;   // a value type
object o = i;   // boxing
int j = (int) o;   // unboxing



java 1.4버전 까지는 wrapper 클래스를 사용함으로서 이를 명시적으로 작성해야했으나 1.5버전부터는 wrapper클래스를 안쓰는 방향으로 지양합니다.

int i = 123;
Integer wrapI = new Integer(i);  // Boxing개념
i = wrapI.intValue();                // Unboxing개념


C#에도 이러한 개념이 있다고 들었습니다만 아직 C#에 대해 구체적으로 공부해본 적이 없어서 패스하겠습니다 ㅎㅎ
(주절주절 : 제가 알기론 과거 java에서 마소가 임의적으로 JVM을 수정하여 j++이 만들어지고 j#이 만들어졌는데 java의 아버지 고슬링이 java를 open한 대신에 JVM을 건드리지 말라는 약관을 위배하여  j#을 만든 마소를 상대로 소송이 있었는데 마소가 크게 패하고 이때부터 마소의 익스플로러 브라우저에서 java를 지원하지 않은 것으로 알고 있습니다. 결국 java의 applet 같은 동적처리에 효과적인 기능들을 못쓰게 되자 flash가 그 대안으로 나왔고 flash전성시대를 만든 것으로 알고 있습니다. 당시엔 인터넷 브라우저라면 익스플로러뿐이라는 생각이 들만큼 마소의 독점력이 어마어마 했다는...)