자바에는 기본 타입과 Wrapper 클래스가 존재한다.
기본타입 | Wrapper 클래스 |
boolean | Boolean |
byte | Byte |
short | Short |
int | Int |
float | Float |
long | Long |
double | Double |
char | Character |
Wrapper 클래스
- 프로그램에 따라 기본 타입의 데이터를 객체로 취급해야 하는 경우가 있다. 이때 기본 타입의 데이터를 객체로 포장해 주는 클래스를 Wrapper 클래스라고 한다.
- Wrapper 클래스는 각각의 타입에 해당하는 데이터를 인수로 전달받아, 해당 값을 가지는 객체로 만들어준다.
- Wrapper 클래스는 java.lang 패키지에 포함되어 제공된다.
박싱과 언박싱
- 박싱 : 기본 타입 데이터에 대응하는 Wrapper 클래스로 만드는 동작
- 언박싱 : Wrapper 클래스에서 기본 타입으로 변환
//박싱
int i = 0;
Integer num = new Integer(i);
//언박싱
Integer num = new Integer(10);
int i = num.intValue();
오토 박싱과 오토 언박싱
JDK 1.5부터는 자바 컴파일러가 박싱과 언박싱이 필요한 상황에 자동으로 타입 변환을 해준다.
- 오토 박싱은 기본 타입의 값을 해당 Wrapper 클래스의 객체로 변환하는 것을 의미한다. 오토 박싱은 코드에서 보이지 않지만 Wrapper 클래스 객체의 값을 할당하기 위해 객체를 생성한다.
- 오토 언박싱은 Wrapper 클래스의 객체를 해당 기본 타입의 값으로 변환하는 것을 의미한다.
//오토 박싱
int i = 10;
Integer num = i;
//오토 언박싱
Integer num = new Integer(10);
int i = num;
성능
편의성을 위해 오토 박싱과 오토 언박싱이 제공되지만, 내부적으로 추가 연산 작업이 거치게 된다. 따라서 오토 (언)박싱이 일어나지 않도록 동일한 타입 연산이 이루어지도록 구현하자.
//오토 박싱 연산
public static void main(String[] args) {
long t = System.currentTimeMillis();
Long sum = 0L;
for (long i = 0; i < 1000000; i++) {
sum += i;
}
System.out.println("실행시간: " + (System.currentTimeMillis() - t) + " ms");
}
//실행시간: 19ms
//동일 타입 연산
public static void main(String[] args) {
long t = System.currentTimeMillis();
long sum = 0L;
for (long i = 0; i < 1000000; i++) {
sum += i;
}
System.out.println("실행시간: " + (System.currentTimeMillis() - t) + " ms");
}
//실행시간: 4ms
Reference
'Backend Roadmap > Java' 카테고리의 다른 글
정적 바인딩과 동적 바인딩 (0) | 2024.06.25 |
---|---|
가비지 컬렉션(Garbage Collection) (0) | 2024.06.25 |
스트림(Stream) (0) | 2024.06.25 |
자바 타입 제네릭(Generic) (0) | 2024.06.25 |
JVM 구조, JRE, JDK (0) | 2024.06.25 |