티스토리 뷰

반응형

 JAVA의 Wrapper Class에 대한 개념은 그냥 지나가기 쉬운 부분이라 꼭 정리를 해둘 필요가 있다. 특히, JDK 1.5 이후 버전부터 AutoBoxing기능이 지원되면서, 더욱 그냥 지나가기 쉬워졌다. 그리 어려운 내용이 아니니 쭉 훑어보면 될 것이다.


 JAVA는 객체로 이루어져있고, 모든 데이터가 객체로 표현된다. Object를 상속하는 모든 클래스를 참조형(Reference Type)이라고 한다. 하지만 이처럼 객체로 표현하지 않고 원시적인 형태로 표현하는 예외를 두고 있는데, 그것이 바로 기본형(Primitive Type)이다. 

 

JAVA의 기본형과 이에 대응하는 Wrapper Class. (출처: 자체제작)


  

 표의 좌측에 나열된 기본형의 예를 보면 기본형의 정의에 대해 더 명확해졌을 것이다. 기본형은 선언 시 Stack영역에 저장되며, 당연히 사칙연산이 가능하다. 한편, 이러한 기본형들을 참조형으로 나타낸 것이 Wrapper Class이다. 기본형 변수를 객체화할 필요가 있을 때(기본형 변수를 List에 저장할 때가 대표적임) 쓰인다.




 

Primitive Type과 Wrapper Class간의 관계개념도


  

 기본형을 Wrapper Class로 변환하는 것을 Boxing이라 한다. (반대의 작업은 unboxing이다.) int와 Interger를 예로 (un)boxing에 대해 설명하자면, boxing을 할 때는 Integer라는 WrapperClass에 선언되어있는 valueOf( )라는 메소드를 이용한다. 아래의 프로그램 구동 결과 화면에는 true가 출력된다.


Integer num1 = new Integer(10);


Interger num2 = Integer.valueOf(10);


if(num1.equals(num2)) {

 

System.out.println("true");


}


반대로 Unboxing을 할 때도 Integer에 미리 선언되어있는 메소드를 이용한다. 아래의 프로그램 구동 결과, 화면에는 true가 출력된다.


int num1 = Integer.intValue(new Integer(10));


int num2 = 10;


if(num1==num2) {


System.out.println("true");


}


 이러한 귀찮은 작업들을 JDK 1.5버전 이후로는 할 필요가 없어졌다. Auto(un)boxing이 지원되기 때문. 컴파일러가 자동으로 boxing과 unboxing을 해준다. Auto(un)boxing에 대해 아래의 표로 더 명확하게 알아보겠다.

 

 

AutoBoxing의 결과. (출처: 자체제작)


  

 Auto(un)boxing 덕분에 개발자는 기본형과 Wrapper Class의 기본원칙을 신경쓸 필요가 없어졌다고 할 수 있겠다.



 


-끝-


  


 


출처

그림2: http://sajupauledayan.com/java/4-things-to-remember-on-autoboxing-and-unboxing



«   2022/06   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
글 보관함
Total
810,040
Today
21
Yesterday
243