JAVA

Generic 과 WrapperClass(Boxing / Unboxing)에 대해서

구름이팡팡 2022. 1. 6. 20:34
728x90

<제네릭을 이용하는 이유>

컴파일 과정에서 미리 제네릭 타입을 이용함으로써 사전에 데이터 타입을 잘 못쓰는 것을 막아준다.

//제네릭 아닐 때
ArrayList list = new ArrayList();
list.add("a");
String a = (String)list.get(0); //캐스팅 필요


//제네릭 이용할 때
ArrayList<String> list = new ArrayList();
list.add("a");
String a = list.get(0); //캐스팅 필요없음

- 장점

 1. 실행 시 에러보다 컴파일 시 미리 타입을 체크해서 에러를 방지할 수 있다.

 2. 타입 변환을 따로 할 필요가 없어 속도를 향상시켜 준다.

 

- 단점

※ 기본타입 불가능 => Boxing 필요!

 => Wrapper(포장)Class를 이용 해야한다. (heap영역을 이용하기 때문에 속도가 떨어짐)

 


<Boxing>

: 기본타입을 포장객체로 만드는 과정

 

기본타입(byte, char, short, int, long, float, double, boolean)

WrapperClass(Byte, Character, Short, Integer, Long, Float, Double, Boolean)로 포장

 

cf) 기본타입은 스택 영역, WrapperClass는 힙 영역 이용(힙 영역이 더 속도가 느리다) 

 

 

//자동 박싱
Integer a = 10; //대입
=> int타입의 값을 Integer 클래스 변수에 대입하면 자동 박싱이 일어나 힙 영역에 Integer 객체 생성


//자동 언박싱
Integer a = new Integer(50);
int b = a; //1.대입하면 자동언박싱
int c = a + 50; //2.연산하면 자동언박싱

 

<Unboxing>

: 반대로 포장객체에서 기본타입의 값을 얻어내는 과정

 

728x90