jeongwon
Wrapper class 본문
기본형(primitive type) 변수를 객체로 다뤄야 하는 경우, 기본자료형을 클래스로 정의한 Wrapper 클래스를 사용한다.
내부적으로 기본형 변수를 지니고 있으며, Wrapper 클래스의 종류는 다음과 같다.
Byte, Short, Integer, Long, Float, Double, Character, Boolean, Void
기본 자료형을 객체에 저장하는 것을 Boxing, 객체에서 기본자료형을 꺼내는 것을 UnBoxing 이라 한다.
//기본자료형 변수 선언
int num1=20;
int num2;
//Integer(Wrapper class)의 참조변수 선언
Integer i1; //null
Integer i2 = new Integer(50);//Auto Boxing
i1 은 아직 저장하고 있는 참조값이 없다.
i2 에는 50 이라는 정수가 저장되었는데, 어떻게 기본 자료형이 객체에 저장된 것일까?
자바는 jdk1.5부터 참조변수에 값(value)이 들어갈 수 있도록 했다. 내부적으로 intValue() 같은 메소드를 호출시켜 자동으로 Boxing 처리를 해주는 것이다.
i1 = num1; //auto boxing
num2 = i2; //auto unboxing
System.out.println(num1+","+i1); //20,20
System.out.println(num2+","+i2); //50,50
이어서 객체 Integer 형 i1 에 기본자료형 변수 num1의 값을 저장하고,
기본자료형 변수 num2 에 객체 Integer 형 i2에 저장된 값을 저장했다.
마찬가지로 내부적 처리를 통해 에러 없이 수행되었다.
실제 쓰는 일은 없지만, class의 최고 조상인 Object 를 통해 객체 간의 Auto Boxing을 살펴보면
Object[] obj1= {50,90.5,4,true,"java",'A'}; //auto boxing
for(Object o : obj1) {
System.out.println(o);//auto unboxing
Object 배열에 담긴 각각의 요소들은 Auto Boxing을 통해 각각 객체가 된다. 때문에 메모리 낭비가 심하다.
(참고: ArrayList등의 컬렉션을 이용하면 메모리낭비를 줄일 수 있다. )
'JAVA' 카테고리의 다른 글
[servlet] javax.servlet.RequestDispatcher (I) (0) | 2022.08.26 |
---|---|
[method] String.getBytes() & charset (0) | 2022.06.04 |
StringBuffer, StringBuilder class - 문자열, 메모리, 가변성 (0) | 2022.05.12 |
String 문자열 저장 - new 연산자, 메모리, Heap, String Pool, 불변성 (0) | 2022.05.12 |
[1] 클래스, 메소드, 문장, 식별자, 자료형, 변수 (0) | 2022.04.24 |