ChatGPT의 말:
Java에서 Wrapper class를 사용하는 이유는 원시 타입(primitive type) 데이터를 객체로 다룰 수 있도록 하기 위함입니다. Java는 두 가지 종류의 데이터 타입을 제공합니다: 원시 타입(primitive types)과 참조 타입(reference types). 원시 타입은 int, char, boolean, float 등과 같은 기본 데이터 타입을 의미하고, 참조 타입은 객체를 의미합니다. 아래에서 Wrapper class를 사용하는 몇 가지 주요 이유를 설명할게요.
1. 컬렉션 프레임워크 사용
Java의 컬렉션 프레임워크(List, Set, Map 등)에서는 객체만 저장할 수 있습니다. 따라서, int, char, boolean 같은 원시 타입을 저장하려면 이들을 객체로 변환해야 합니다. 이때 Wrapper class를 사용하여 원시 타입을 객체로 변환할 수 있습니다. 예를 들어, Integer, Character, Boolean 등의 Wrapper class는 각각 int, char, boolean을 객체로 변환할 수 있게 해줍니다.
numbers.add(10); // Integer 타입의 객체로 변환되어 추가됨 (자동 박싱)
2. 기본형과 객체형 간의 변환 (Auto-boxing & Unboxing)
Java 5부터는 auto-boxing과 unboxing 기능을 제공하여, 원시 타입과 그에 대응하는 Wrapper class 간의 변환을 자동으로 처리해 줍니다. 즉, 개발자는 int를 직접 Integer로 변환하지 않고도 컬렉션 같은 곳에서 사용할 수 있습니다.
Integer wrappedNum = num; // Auto-boxing: int -> Integer
int unwrappedNum = wrappedNum; // Unboxing: Integer -> int
3. 유틸리티 메서드 제공
Wrapper class는 원시 타입에서 사용할 수 없는 유용한 유틸리티 메서드들을 제공합니다. 예를 들어, Integer.parseInt(), Double.parseDouble() 같은 메서드는 문자열을 숫자로 변환할 때 유용하게 사용됩니다.
int number = Integer.parseInt(str); // 문자열을 int로 변환
4. null 값 표현 가능
원시 타입은 null 값을 가질 수 없지만, Wrapper class는 참조 타입이므로 null 값을 가질 수 있습니다. 이는 데이터베이스의 결과 값이 없을 때처럼, 값이 없음을 명시적으로 나타내야 할 때 유용합니다.
int primitiveNum = null; // 컴파일 오류
5. 다양한 API와의 호환성
많은 Java API들은 객체를 요구합니다. 원시 타입 대신 Wrapper class를 사용하면 API 호출 시 더 쉽게 사용할 수 있습니다. 예를 들어, 멀티스레딩에서 AtomicInteger 같은 클래스는 int 값을 원자적으로 다루기 위해 사용되며, 이때 기본형 int 대신 Integer를 사용할 수 있습니다.
요약하자면, Wrapper class는 원시 타입을 객체로 변환하여 컬렉션에 저장하거나, 유틸리티 메서드를 제공하는 등의 이유로 사용됩니다. 또, auto-boxing과 unboxing을 통해 원시 타입과 객체 타입 간의 변환도 간편하게 처리할 수 있습니다.
'언어 및 도구들 공부 > Java' 카테고리의 다른 글
buffer 3 (1) | 2024.09.27 |
---|---|
buffer 2, null 1 (0) | 2024.09.27 |
getActualMaximum과 getMaximum (0) | 2024.09.26 |
DAY_OF_MONTH, DAY_OF_WEEK (0) | 2024.09.26 |
cal.getActualMaximum(Calendar.WEEK_OF_MONTH); (1) | 2024.09.26 |