[Java] 기본 타입(primitive types) VS 래퍼 타입(wrapper types)
1. Question
기본 타입(primitive types)
과 래퍼 타입(wrapper types)
의 차이점은?
2. Answer
A. 기본 타입(Primitive Types)
기본 타입(Primitive Types)
은 Java에서 가장 기본적인 데이터 유형으로, 직접적인 값을 저장한다. 이 타입들은 메모리를 효율적으로 사용하고 처리 속도가 빠르다. 기본 타입에는 아래와 같은 종류가 있다.
- 정수형:
byte
,short
,int
,long
- 실수형:
float
,double
- 문자형:
char
, - 논리형:
boolean
장점
- 처리 속도가 빠르고 메모리 사용량이 낮다.
- 스택 메모리에 값이 직접 저장되어 빠르게 접근 가능하다.
단점
- 기본 타입은 객체가 아니므로, 객체 지향 프로그래밍의 이점을 활용하기 어렵다.
- Null 값을 가질 수 없어, ‘데이터가 없음’을 표현하기 어렵다.
B. 래퍼 타입 (Wrapper Types)
래퍼 타입(Wrapper Types)
은 각 기본 타입에 대응하는 클래스 타입으로, 기본 타입의 데이터를 객체로 다룰 수 있게 해 준다. 이 클래스들은 java.lang
패키지에 포함되어 있다. 래퍼 타입에는 아래와 같은 클래스가 있다.
Byte
,Short
,Integer
,Long
Float
,Double
Character
Boolean
장점
- 객체이므로, 메서드 호출과 같은 객체 지향 프로그래밍 기능을 사용할 수 있다.
- Null 값을 지원하여 ‘데이터가 없음’ 또는 ‘미정의’ 상태를 표현할 수 있다.
- 컬렉션 프레임워크(예: ArrayList, HashMap 등)에서 사용 가능하다.
단점
- 기본 타입에 비해 처리 속도가 느리고 메모리 사용량이 더 많다.
- 힙 메모리에 객체로 저장되므로 접근 시간이 더 걸린다.
C. 기본 타입 VS 래퍼 타입
기본 타입을 선택해야 하는 상황
-
성능이 중요한 경우: 기본 타입은 메모리 사용량이 적고 처리 속도가 빠르다. 따라서 대량의 숫자 데이터를 처리하거나 계싼이 많이 필요한 시스템에서는 기본 타입이 더 효율적이다.
-
메로리 사용 최적화가 필요한 경우: 기본 타입은 래퍼 타입보다 메모리를 적게 소모한다. 메모리 사용을 최소화해야 하는 임베디드 시스템이나 모바일 애플리케이션에서 유리하다.
래퍼 타입을 선택해야 하는 상황
-
객체 지향 기능이 필요한 경우: 래퍼 타입은 객체이므로 메서드 호출과 같은 객체 지향 프로그래밍의 기능을 사용할 수 있다. 예를 들어,
Integer
클래스는 숫자와 관련된 유용한 메서드와 상수를 제공한다. -
Null 처리가 필요한 경우: 래퍼 타입은 null 값을 가질 수 있어 ‘데이터가 없음’ 또는 ‘미정의’ 상태를 표현할 수 있다. 이는 데이터베이스 작업과 같이 null을 허용해야 하는 경우에 유용하다.
-
컬렉션 프레임워크 사용: Java의 컬렉션 프레임워크는 객체만을 저장할 수 있다. 예를 들어,
ArrayList
나HashMap
과 같은 컬렉션에 데이터를 저장하려면 래퍼 타입을 사용해야 한다.
3. Detail
A. 기본 타입과 래퍼 타입의 변환 방법
오토 박싱(Autoboxing)
은 기본 타입의 데이터를 자동으로 해당 래퍼 클래스 객체로 변환하는 과정이다. Java 컴파일러가 자동으로 처리해 주기 때문에 프로그래머가 명시적으로 변환 코드를 작성할 필요가 없다. 예를 들어, int
데이터를 Integer
객체에 할당할 때 자동으로 변환된다.
int i = 5;
Integer integer = i; // 오토박싱: int에서 Integer로 자동 변환
언박싱(Unboxing)
은 래퍼 타입의 객체를 기본 타입의 값으로 자동으로 변환하는 과정이다. 이 과정 역시 Java 컴파일러가 자동으로 처리한다. 래퍼 객체를 기본 타입 변수에 할당할 때 자동으로 기본 타입 값으로 변환된다.
Integer integer = new Integer(5);
int i = integer; // 언박싱: Integer에서 int로 자동 변환
자동 변환 외에도, 때때로 명시적으로 타입을 변환할 필요가 있다. 래퍼 클래스는 기본 타입 값을 반환하는 메서드를 제공하여 이러한 명시적 변환을 지원한다.
Integer integer = Integer.valueOf(10);
int i = integer.intValue(); // intValue() 메서드를 사용한 수동 언박싱
4. Reference
None
댓글남기기