Jay's Cookbook
Menu
  • Tags
  • Categories
  • Projects
Computer Science
OS
Network
Data Structure
Algorithm
Language
Code Architecture
Python
Javascript
Typescript
Java
Backend
Backend Theory
TypeORM
Node.js
NestJS
FastAPI
Frontend
HTML/CSS
React
Next.js
Data Engineering
DE Theory
MySQL
MongoDB
Elastic
Redis
Kafka
Spark
Airflow
AI
Basic
Pytorch
NLP
Computer Vision
Data Analytics
Statistics
Pandas
Matplotlib
DevOps
Git
Docker
Kubernetes
AWS
Java Series [Part18]: 자바의 Wrapper 클래스
language
java

Java Series [Part18]: 자바의 Wrapper 클래스

Jay Kim
Jay Kim 13 Mar 2025
Java Series [Part17]: 자바의 String, StringBuilder 클래스 Java OOP Series [Part1]: 클래스와 인스턴스

Table of Contents

  • 자바의 래퍼 클래스 (Wrapper Classes)
    • 기본 자료형과 래퍼 클래스
    • 왜 래퍼 클래스가 필요한가?
    • 오토박싱과 언박싱 (Auto-boxing / Unboxing)
      • 오토박싱 (Auto-boxing)
      • 언박싱 (Unboxing)
    • 주요 래퍼 클래스의 메서드 예시
      • Integer
      • Boolean
      • Character
    • 정리
    • 기본형과 래퍼 클래스
    • 오토박싱과 언박싱
      • 오토박싱 (Auto-boxing): 기본형 → 래퍼 객체
      • 언박싱 (Unboxing): 래퍼 객체 → 기본형
    • Integer와 Boolean의 팁과 주의사항
      • ✅ Integer 관련 팁과 주의사항
        • 1. == vs .equals() 비교 주의
        • 2. parseInt vs valueOf
      • ✅ Boolean 관련 팁과 주의사항
        • 1. 문자열 파싱 시 주의
        • 2. 객체 비교 주의
    • 요약 정리
    • 마무리

자바의 래퍼 클래스 (Wrapper Classes)

자바는 객체 지향 언어이기 때문에 기본 자료형(primitive type)도 객체처럼 다루고 싶을 때가 많습니다. 이럴 때 사용하는 것이 바로 래퍼 클래스(Wrapper Class) 입니다.

이 글에서는 자바의 래퍼 클래스에 대해 알아보고, 언제 사용하는지, 어떤 장점이 있는지 예제를 통해 설명합니다.


기본 자료형과 래퍼 클래스

자바의 기본 자료형(primitive type)은 다음과 같습니다:

기본 자료형 크기 기본값 래퍼 클래스
byte 1B 0 Byte
short 2B 0 Short
int 4B 0 Integer
long 8B 0L Long
float 4B 0.0f Float
double 8B 0.0 Double
char 2B ‘\u0000’ Character
boolean 1B false Boolean

래퍼 클래스는 각 기본형을 객체로 감싸서, 객체처럼 다룰 수 있게 해줍니다.


왜 래퍼 클래스가 필요한가?

  1. 컬렉션에 사용하기 위해
    • 자바의 컬렉션 프레임워크(List, Map, Set 등)는 객체만 다룰 수 있습니다. 기본형은 직접 사용할 수 없으므로 래퍼 클래스를 사용합니다.
     List<Integer> list = new ArrayList<>();
     list.add(10);  // int -> Integer로 자동 변환
    
  2. 유틸리티 메서드 사용
    • 래퍼 클래스는 형 변환, 비교, 문자열 파싱 등을 위한 유용한 메서드를 제공합니다.
     int num = Integer.parseInt("123");
     String binary = Integer.toBinaryString(10);  // "1010"
    
  3. null 값을 다루기 위해
    • 기본형은 null을 저장할 수 없지만, 래퍼 클래스는 null을 가질 수 있어, 값의 유무를 표현할 때 유리합니다.
     Integer age = null;  // 가능
     int agePrimitive = null;  // 컴파일 에러
    

오토박싱과 언박싱 (Auto-boxing / Unboxing)

자바 5부터는 컴파일러가 기본형과 래퍼 클래스 간의 변환을 자동으로 처리해줍니다.

오토박싱 (Auto-boxing)

기본형 → 래퍼 클래스로 자동 변환

int num = 5;
Integer boxed = num;  // int -> Integer 자동 변환

언박싱 (Unboxing)

래퍼 클래스 → 기본형으로 자동 변환

Integer boxed = 10;
int num = boxed;  // Integer -> int 자동 변환

주의할 점은, null 값을 언박싱하려 하면 NullPointerException이 발생합니다.

Integer val = null;
int num = val;  // 런타임 오류: NullPointerException

주요 래퍼 클래스의 메서드 예시

Integer

Integer a = Integer.valueOf(100);
int b = Integer.parseInt("123");
String s = Integer.toHexString(255);  // "ff"

Boolean

Boolean flag = Boolean.valueOf("true");
boolean bool = Boolean.parseBoolean("false");

Character

Character c = Character.valueOf('A');
boolean isDigit = Character.isDigit('5');
boolean isUpper = Character.isUpperCase('A');

정리

용도 기본형 래퍼 클래스 사용
성능 위주 O X
컬렉션 사용 X O
null 처리 X O
메서드 활용 X O

기본형은 성능이 좋지만 유연성이 떨어지고, 래퍼 클래스는 기능이 많지만 약간의 오버헤드가 있습니다. 상황에 맞게 선택하는 것이 중요합니다.



기본형과 래퍼 클래스

기본형 래퍼 클래스
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

오토박싱과 언박싱

자바 5부터는 기본형과 래퍼 클래스 간의 자동 변환이 지원됩니다.

오토박싱 (Auto-boxing): 기본형 → 래퍼 객체

int num = 10;
Integer obj = num;  // 자동으로 Integer.valueOf(10) 호출됨

언박싱 (Unboxing): 래퍼 객체 → 기본형

Integer obj = Integer.valueOf(20);
int num = obj;  // 자동으로 obj.intValue() 호출됨
  • 오토박싱과 언박싱은 편리하지만, null 값이 언박싱되면 NullPointerException이 발생할 수 있으므로 주의해야 합니다.

Integer와 Boolean의 팁과 주의사항

✅ Integer 관련 팁과 주의사항

1. == vs .equals() 비교 주의

Integer a = 127;
Integer b = 127;
System.out.println(a == b);  // true (캐싱된 객체)

Integer c = 128;
Integer d = 128;
System.out.println(c == d);  // false (다른 객체)
  • 자바는 -128 ~ 127 범위의 Integer 객체를 캐싱합니다.
  • 그 외의 값은 새로운 객체이므로 ==으로 비교 시 false가 될 수 있습니다.
  • ✅ 객체 비교는 항상 .equals() 사용하기.

2. parseInt vs valueOf

int num = Integer.parseInt("123");       // 기본형 int 반환
Integer obj = Integer.valueOf("123");    // Integer 객체 반환
  • parseInt: 문자열을 int로 변환
  • valueOf: 문자열을 Integer 객체로 변환하며, 내부적으로 캐싱 활용
  • ✅ 공통 객체를 재사용하고 싶다면 valueOf를 사용하세요.

✅ Boolean 관련 팁과 주의사항

1. 문자열 파싱 시 주의

System.out.println(Boolean.parseBoolean("true"));   // true
System.out.println(Boolean.parseBoolean("yes"));    // false
System.out.println(Boolean.parseBoolean("1"));      // false
  • 오직 문자열이 "true" (대소문자 무시)일 때만 true 반환
  • ✅ 문자열을 boolean으로 바꿀 때는 정확한 값인지 확인해야 함

2. 객체 비교 주의

Boolean b1 = true;
Boolean b2 = true;
System.out.println(b1 == b2);  // true (캐싱 객체)

Boolean b3 = new Boolean(true);
System.out.println(b1 == b3);  // false (다른 객체)
  • Boolean.TRUE, Boolean.FALSE 두 객체만 캐싱됩니다.
  • ✅ .equals()나 .booleanValue()로 비교해야 안전합니다.

요약 정리

항목 설명 팁
Integer == -128 ~ 127 범위는 동일 객체 .equals() 사용 권장
Integer.valueOf 캐싱 적용됨 성능상 유리
Boolean.parseBoolean “true” 만 true (대소문자 무시) “yes”, “1”은 false
Boolean 객체 비교 TRUE/FALSE는 캐싱됨 .equals() 또는 .booleanValue() 사용

래퍼 클래스는 컬렉션, 제네릭 등 객체가 필요한 상황에서 기본형 값을 유연하게 다루도록 해주는 중요한 도구입니다. 하지만 위와 같은 동작 특성을 이해하고 사용하지 않으면 예상치 못한 버그가 발생할 수 있습니다. 항상 .equals()를 사용할지, 박싱/언박싱이 일어나는 시점을 의식하며 코드를 작성하는 습관을 들이는 것이 중요합니다.

마무리

자바의 래퍼 클래스는 단순히 기본형을 객체로 감싼 것이지만, 컬렉션과의 호환, null 처리, 다양한 유틸리티 기능 등에서 꼭 필요한 요소입니다.

실제 개발에서는 기본형과 래퍼 클래스의 차이를 명확히 이해하고, 어떤 상황에서 어떤 타입을 사용해야 할지 신중히 판단해야 합니다.

Java Series [Part17]: 자바의 String, StringBuilder 클래스 Java OOP Series [Part1]: 클래스와 인스턴스

You may also like

See all java
25 Mar 2025 Java OOP Series [Part3]: 디자인 패턴
language
java

Java OOP Series [Part3]: 디자인 패턴

20 Mar 2025 Java OOP Series [Part2]: 객체지향
language
java

Java OOP Series [Part2]: 객체지향

15 Mar 2025 Java OOP Series [Part1]: 클래스와 인스턴스
language
java

Java OOP Series [Part1]: 클래스와 인스턴스

Jay Kim

Jay Kim

Web development, data engineering for human for the Earth. I share posts, free resources and inspiration.

Rest
Lifestyle
Hobby
Hobby
Hobby
Hobby
2025 © Jay's Cookbook. Crafted & Designed by Artem Sheludko.