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의 컬렉션 프레임워크는 객체만을 저장할 수 있다. 예를 들어, ArrayListHashMap과 같은 컬렉션에 데이터를 저장하려면 래퍼 타입을 사용해야 한다.

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

댓글남기기