언어 및 도구들 공부/Java

Java에서 Wrapper Class를 쓰는 이유

Dr.Mlem 2024. 9. 27. 06:39
Java에서, Wrapper class를 쓰는 이유가 뭐야?
 

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을 객체로 변환할 수 있게 해줍니다.

 

java
 
 
List<Integer> numbers = new ArrayList<>();
numbers.add(10);  // Integer 타입의 객체로 변환되어 추가됨 (자동 박싱)
 

2. 기본형과 객체형 간의 변환 (Auto-boxing & Unboxing)

Java 5부터는 auto-boxingunboxing 기능을 제공하여, 원시 타입과 그에 대응하는 Wrapper class 간의 변환을 자동으로 처리해 줍니다. 즉, 개발자는 int를 직접 Integer로 변환하지 않고도 컬렉션 같은 곳에서 사용할 수 있습니다.

java
 
 
int num = 5;
Integer wrappedNum = num;  // Auto-boxing: int -> Integer
int unwrappedNum = wrappedNum;  // Unboxing: Integer -> int
 

3. 유틸리티 메서드 제공

Wrapper class는 원시 타입에서 사용할 수 없는 유용한 유틸리티 메서드들을 제공합니다. 예를 들어, Integer.parseInt(), Double.parseDouble() 같은 메서드는 문자열을 숫자로 변환할 때 유용하게 사용됩니다.

 

java
 
 
String str = "123";
int number = Integer.parseInt(str);  // 문자열을 int로 변환
 

4. null 값 표현 가능

원시 타입은 null 값을 가질 수 없지만, Wrapper class는 참조 타입이므로 null 값을 가질 수 있습니다. 이는 데이터베이스의 결과 값이 없을 때처럼, 값이 없음을 명시적으로 나타내야 할 때 유용합니다.

 

java
 
 
Integer num = 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