Auto boxing & Auto unboxing
자바에는 기본 타입과 Wrapper 클래스가 존재한다.
- 기본 타입 : int, long, float, double, boolean 등
- Wrapper 클래스 : Integer, Long, Float, Double, Boolean 등
Wrapper 클래스란?
- 자바의 자료형은 크게 기본타입과 참조타입으로 나누어짐
- 프로그래밍을 하다 보면 기본타입의 데이터를 객체로 표현해야 하는 경우가 종종 있다.
- 이럴 때에 기본타입을 객체로 다루기 위해 사용하는 클래스는 Wrapper 클래스라고한다.
- 래퍼 클래스의 주요 용도는 기본 타입의 값을 박싱 해서 포장 객체로 만드는 것이지만, 문자열을 기본 타입 값으로 변환할 때에도 사용된다. 대부분의 래퍼 클래스에는 parse + 기본 타입명으로 되어있는 정적 메서드가 있다. 이 메서드는 문자열을 매개 값으로 받아 기본 타입 값으로 변환한다.
- 래퍼 객체는 내부의 값을 비교하기 위해 == 연산자를 사용할 수 없다. 이 연산자는 내부의 값을 비교하는 것이 아니라 래퍼 객체의 참조 주소를 비교하기 때문이다.
- 래퍼 클래스와 기본자료형과의 비교는 == 연산과 equals연산 모두 가능하다. 그 이유는 컴파일러가 자동으로 오토박싱과 언박싱을 해주기 때문이다.
Boxing 과 Unboxing
- 기본 타입의 값을 포장 객체로 만드는 과정을 박싱이라고함.
- 반대로 포장객체에서 기본 타입의 값을 얻어내는 과정을 언박싱이라고한다.
AutoBoxing 과 AutoUnboxing
- 기본타입 값을 직접 박싱, 언박싱 하지 않아도 자동으로 박싱과 언박싱이 일어나는 경우가 있다.
- 자동 박싱의 포장 클래스 타입에 기본값이 대입될 경우에 발생한다.
- 예를 들어 int타입의 값을 Integer 클래스 변수에 대입하면 자동 박싱이 일어나 힙 영역에 Integer객체가 생성된다.
- Java에서 아무리 기능적 편의성을 위하여 박싱과 언박싱 그리고 오토박싱을 제공하지만 명백히 다른 타입간의 형변환은 어플리케이션의 성능에 영향을 미칠 수 밖에 없다.
- 아무리 작은 차이가 존재한다고 할지라도 어플리케이션의 성능측면에서 봤을때 반드시 필요한 상황(1건이라던가 대용량이 아닐때)이 아니라면 지양해야하는 기능일 것이다
'Computer science > JAVA' 카테고리의 다른 글
String Class (0) | 2023.01.01 |
---|---|
Serialization(직렬화) (0) | 2022.12.25 |
Primitive type & Reference type (0) | 2022.12.24 |
Call by value와 Call by reference (0) | 2022.12.24 |
JAVA의 컴파일과정(JVM 메모리 구조, JVM GC) (0) | 2022.12.24 |