[Java] 오토 박싱과 오토 언박싱

최정은·2022년 10월 20일
0

Backend Roadmap

목록 보기
10/23
post-thumbnail

자바에는 기본 타입과 Wrapper 클래스가 존재한다.

기본 타입Wrapper 클래스
booleanBoolean
byteByte
shortShort
intInteger
floatFloat
longLong
doubleDouble
charCharacter

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

Wrapper 클래스
오토 박싱 & 오토 언박싱

profile
https://dolmeng22.tistory.com 로 이전했습니다~

0개의 댓글