Java

오토 박싱 & 오토 언박싱

오개발 2024. 10. 30. 15:40

개발을 하면서 항상 이런 부분을 무지성하게 사용 된거 같아서 글을 작성합니다.

 

java 기본 타입 : int, long, float, double, char, short, byte, boolean

java  Wrapper 클래스 :  Integer, Long, Float, Double, Character, Short, Byte, Boolean 

 

 

 

오토 언박싱

오토박싱의 반대 개념으로 래퍼 클래스의 객체를 해당 기본 데이터 타입으로 자동으로 변환하는 것을 말한다다. 예를 들어 Integer 타입의 객체를 int 타입으로 할당하면 자동으로 오토 언박싱이 발생한다.

 

// 오토박싱 예제
int i = 10;
Integer integerObj = i; // int 타입의 값을 Integer 객체로 자동 변환

// 오토 언박싱 예제
Integer integerObj2 = 20;
int j = integerObj2; // Integer 객체의 값을 int 타입으로 자동 변환

 

오토박싱과 오토언박싱은 불필요한 객체 생성과 메모리 사용 증가를 유발할 수 있습니다.

예를 들어서 반복문에게 기본 타입을 사용하는 대신 레퍼 클래스를 사용할 경우 매번 박싱과 언박싱이 일어나므로 성능 저하가 발생 할 겁니다.

Integer sum = 0;
for (int i = 0; i < 1000; i++) {
    sum += i; // 매 반복마다 오토박싱과 언박싱이 발생
}

 

위에 있는 코드는 최초에 Integer로 래버클래스로 초기화 하였고 i의 값은 int로 기본 타입으로 지정 하였습니다. 여기서 +기를 할때 최초로

int로 언박싱되고 다시 Integer로 박싱됩니다. 자바가 자동으로 해줘서 편한점도 있지만 이 경우 리소스가 사용됩니다.

 

가장 좋은 방법은 기본 타입을 사용합니다.

 

int sum = 0;
for (int i = 0; i < 1000; i++) {
    sum += i;
}

 

위와 아래에 대한 기본타입을 맞춘다면 불 필요한 언박싱 박싱을 하지 않을겁니다

'Java' 카테고리의 다른 글

ArrayList의 자동 크기 증가  (0) 2024.10.31
부동소수점에서 엡실론  (1) 2024.10.31
자바_instanceof (객체타입 확인)  (1) 2024.10.30
초기화 블록  (0) 2024.10.29
스트링 빌더와 스트링 연산 최적화  (3) 2024.10.29