JAVA

Java에서 원시 타입과 래퍼 클래스의 이해

jki09871 2024. 10. 14. 20:01

Java를 처음 배우거나 개발을 하다 보면, **원시 타입(primitive types)**과 **래퍼 클래스(wrapper classes)**라는 용어를 자주 접할 수 있다. 이 두 가지의 차이점과 어떻게 사용되는지 잘 이해하는 것이 중요하다. 이번 글에서는 이를 쉽게 설명해보겠다.


1. 원시 타입(Primitive Types)이란?

원시 타입은 Java에서 가장 기본적인 데이터 타입이야. 이들은 단순히 값을 저장하는 데 사용되며, 매우 가볍고 빠르다. 자바에서 제공하는 8가지 원시 타입이 있다

  • 정수형: byte, short, int, long
    (숫자를 저장하는 데 쓰인다)
  • 부동 소수점형: float, double
    (소수점이 있는 숫자를 저장하는 데 쓰인다 )
  • 논리형: boolean
    (참(true) 또는 거짓(false) 값을 저장한다)
  • 문자형: char
    (문자 한 개를 저장한다)

원시 타입의 특징:

  • 메모리 사용이 적어: 메모리를 효율적으로 사용하고 성능이 빠르다.
  • 직접 값을 저장: 예를 들어, int는 그 자체로 숫자 값을 저장한다.
  • null 값을 가질 수 없어: 원시 타입은 항상 기본 값이 있어. int의 기본 값은 0이고, boolean은 false이다.

예시:

int number = 10;  // 원시 타입인 int에 숫자 10을 저장
boolean isJavaFun = true;  // boolean 타입에 true를 저장

2. 래퍼 클래스(Wrapper Classes)란?

래퍼 클래스는 원시 타입을 객체로 감싼 것이야. 객체는 좀 더 복잡한 기능을 제공하고, null 같은 값을 가질 수 있게 해준다. 자바에는 각 원시 타입마다 대응되는 래퍼 클래스가 있다.

  • 정수형: Byte, Short, Integer, Long
  • 부동 소수점형: Float, Double
  • 논리형: Boolean
  • 문자형: Character

래퍼 클래스의 특징:

  • 객체로 다룰 수 있어: 래퍼 클래스는 객체이기 때문에, 제네릭, 컬렉션 같은 객체 기반 기능에서 사용할 수 있다.
  • null 값을 가질 수 있어: 원시 타입은 null 값을 가질 수 없지만, 래퍼 클래스는 가능하다.
  • 추가 기능 제공: 각 래퍼 클래스에는 숫자 변환이나 문자열로 변환하는 여러 유용한 메서드가 있다.

예시:

Integer number = 10;  // 래퍼 클래스인 Integer로 숫자 10을 객체로 저장
Boolean isJavaFun = null;  // Boolean 클래스는 null 값을 가질 수 있어

3. 왜 원시 타입과 래퍼 클래스가 따로 있을까?

원시 타입을 사용하는 이유:

  • 성능이 더 중요할 때, 예를 들어 수치 계산이나 반복 작업에서 원시 타입이 빠르고 메모리도 적게 쓴다.

래퍼 클래스를 사용하는 이유:

  • 객체가 필요할 때. 예를 들어, Java의 컬렉션(리스트나 맵 등)은 객체만 저장할 수 있어서, 이럴 때 원시 타입 대신 래퍼 클래스를 사용한다.

예시:

// ArrayList는 객체만 저장할 수 있어서, int 대신 Integer를 사용해
List<Integer> numbers = new ArrayList<>();
numbers.add(100);
numbers.add(null);  // 래퍼 클래스는 null 값을 허용해

5. 요약

  • 원시 타입은 단순한 데이터 값을 저장하고, 메모리 사용이 적고 빠르지만, 객체가 아니기 때문에 더 복잡한 처리를 할 때는 한계가 있어.
  • 래퍼 클래스는 원시 타입을 객체로 만들어주며, null 값을 가질 수 있고, 여러 유용한 메서드를 제공해. 하지만 더 많은 메모리를 사용하고 성능이 조금 느릴 수 있어.

각 상황에 맞춰 원시 타입래퍼 클래스를 적절히 선택하는 것이 중요하다. 실생활에서 간단한 수치 계산이 많으면 원시 타입을, 객체가 필요하거나 제네릭, 컬렉션을 사용할 때는 래퍼 클래스를 사용하는 것이 좋다.

'JAVA' 카테고리의 다른 글

자바 스트림(Stream)  (0) 2024.09.26
자바 람다식 쉽게 이해하기  (1) 2024.09.25
StringBuilder에 대한 가이드  (0) 2024.08.07
Iterator: 컬렉션을 안전하게 순회하기  (0) 2024.08.05
쓰레드(Thread)란?  (0) 2024.07.25