박싱 (boxing)
Boxing 이란 원시 타입을 클래스로 변환하여 클래스처럼 다룰 수 있게 캡슐화하는 것을 의미한다.
여기서 원시 타입(Primitive type)은 byte, short, char, int, long, float, double 등의 기초 타입을 의미하며
Java에서 제공하는 기초 타입에 대한 클래스를 래퍼 클래스(Wrapper Class)라고 한다.
Wrapper Class
- 생성자
Character(char ch)
Boolean(boolean boolValue)
Boolean (String str)
Integer(int num)
Integer(String str)
등의 생성자가 존재하지만 효율 상의 이유로 JDK 9부터 deprecated 됨
- ValueOf(primitive_type p)
기초 타입을 전달받아 Wrapper Class 오브젝트를 생성하는 Wrapper Class의 메서드
static Character valueOf(char ch)
static Boolean valueOf(boolean boolValue)
static Boolean valueOf(String str) // 문자열이 "true"이면 true반환, 그 외에는 false 반환
static Integer valueOf(int num)
static Integer valueOf(String str) // 숫자로 변환될 수 없는 문자열의 경우에는 NumberFormatException 예외
... (Byte, Short, Long 등의 자료형도 위와 동일)
- Primitive_tpye_Value()
Wrapper Class의 데이터를 기초 타입으로 반환하는 Wrapper Class의 메서드
char charValue()
boolean booleanValue()
int intValue()
... (Byte, Short, Long 등의 자료형도 위와 동일)
오토박싱 (autoboxing)
기초 타입을 래퍼 클래스로 자동 변환해 주는 것을 의미한다.
오토박싱을 사용하면 생성자나 정적 메서드를 호출할 필요 없이 바로 오브젝트를 생성할 수 있다.
사용하는 방법은 명시적 박싱 없이 Wrapper Class를 마치 기초 타입인 것처럼 사용하면 된다.
동일한 방식을 통해 레퍼 클래스를 기초 타입으로 변환할 때에도 오토언박싱을 사용할 수 있다.
따라서 아래 코드처럼 사용하는 것이 가능하다.
Integer w_num = 100;
int i_num = w_num;
주의할 점
오토박싱을 믿고 래퍼클래스를 남용하게 되면 성능의 저하를 유발할 수 있다.
예를 들어 Integer 타입의 변수 A, B를 선언하고 해당 타입을 통해 A에 B를 더하는 연산을 진행하게 되면
A = A + B에서 A + B를 더하는 과정에서 Integer가 int로 변환되고 다시 A에 전달하기 위해서 Integer로 변환되는
불필요한 변환과정이 유발된다.
'Java > Java 문법' 카테고리의 다른 글
[Java] 수정 가능한 문자열 (StringBuffer) (0) | 2024.12.03 |
---|---|
[Java] String 클래스 (0) | 2024.12.02 |
[Java] 열거형 (enum) (0) | 2024.12.01 |
[Java] 레이스 컨디션 (Race Condition), 스레드 동기화 (synchronized) (0) | 2024.12.01 |
[Java] 스레드(Thread), 모니터(Monitor), Runnable 인터페이스 (0) | 2024.10.27 |