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 |