개발을 하면서 항상 이런 부분을 무지성하게 사용 된거 같아서 글을 작성합니다.
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 |