정처기 감자정처기 감자
Java클래스/메서드

검색

검색어를 입력해 개념, 문제, 필기를 찾습니다.

Java 오토박싱/언박싱과 Integer 캐시

코딩Java
읽는데 6분 소요
처음 쓰인 날: 2026-04-24
마지막 수정일: 2026-04-24
조회수: —
선수학습(1개)
  • Java 기본 제공 클래스 (Integer, Math)

요약

Java 오토박싱(Autoboxing)과 언박싱(Unboxing), Integer 캐시의 동작 원리를 알아봅니다. Integer == 비교에서 127과 128이 다른 결과가 나오는 이유, null 언박싱이 NullPointerException을 일으키는 함정을 코드 동작 중심으로 정리합니다.

이 페이지는 기출 출제 이력이 없는 보충 페이지입니다
오토박싱·언박싱·Integer 캐시는 현재까지 정처기 실기 기출에 등장한 적이 없는 주제입니다. 핵심 기출 범위만 공부하고 싶다면 이 페이지는 건너뛰어도 됩니다. 최근 회차의 출제 범위가 점점 넓어지고 있어 어디서 나올지 예측하기 어렵기 때문에, 혹시 모를 출제에 대비해 추가한 페이지입니다.

오토박싱/언박싱 핵심 정리

개념설명예시
오토박싱기본 타입을 자동으로 래퍼 객체로 변환Integer a = 5; (int → Integer)
언박싱래퍼 객체를 자동으로 기본 타입으로 변환int x = a; (Integer → int)
Integer 캐시-128 ~ 127 값은 Integer 객체를 미리 만들어 재사용Integer.valueOf(100)
캐시 경계 함정a == b가 127에서 true, 128에서 false주소 비교가 달라짐
null 언박싱null을 언박싱하면 NullPointerExceptionInteger n = null; int x = n;

기본 타입과 래퍼 클래스

Java에는 숫자를 담는 두 가지 타입이 있습니다.

  • 기본 타입 (primitive type): int, double, boolean, char 등. 메모리에 값을 직접 저장합니다.
  • 래퍼 클래스 (wrapper class): Integer, Double, Boolean, Character 등. int 같은 값을 객체로 감싸서 저장합니다.
java
코드 하이라이팅 중…
기본 타입래퍼 클래스
intInteger
longLong
doubleDouble
booleanBoolean
charCharacter

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

Java의 컬렉션 (List, Map 등)은 객체만 담을 수 있습니다. int는 기본 타입이므로 List<int>는 만들 수 없고, 대신 List<Integer>를 사용합니다. 이때 숫자를 Integer 객체로 감싸는 역할을 래퍼 클래스가 합니다.


오토박싱과 언박싱

Java 5부터는 기본 타입과 래퍼 클래스 사이의 변환이 자동으로 일어납니다.

오토박싱 (Autoboxing)

기본 타입 값이 래퍼 클래스 타입 자리에 오면, 컴파일러가 자동으로 래퍼 객체를 만들어 줍니다.

java
코드 하이라이팅 중…

내부적으로는 Integer.valueOf(5)가 호출되어 래퍼 객체를 반환합니다. 개발자가 new Integer(5) 또는 Integer.valueOf(5)를 직접 쓰지 않아도 됩니다.

언박싱 (Unboxing)

반대로 래퍼 객체가 기본 타입 자리에 오면, 컴파일러가 자동으로 intValue() 같은 메서드를 호출해 값을 꺼냅니다.

java
코드 하이라이팅 중…
변환 방향이름내부 동작
기본 → 래퍼오토박싱Integer.valueOf(n)
래퍼 → 기본언박싱obj.intValue()
오토박싱은 편리하지만 숨겨진 동작이 많습니다
자동으로 객체가 생성되고, 자동으로 메서드가 호출되기 때문에 코드만 봐서는 객체인지 기본 타입인지 구분이 어렵습니다. == 비교나 null 변수처럼 숨김 동작이 결과를 바꾸는 코드를 만나면 박싱·언박싱이 어디서 일어나는지부터 짚어야 합니다.

Integer 캐시

Integer.valueOf(n)은 호출될 때마다 새로운 객체를 만들지 않습니다. 자주 쓰이는 작은 정수값(-128 ~ 127)은 캐시에 미리 Integer 객체를 만들어두고 재사용합니다. 이 범위의 값으로 오토박싱하면 항상 같은 객체를 가리키게 됩니다.

java
코드 하이라이팅 중…

캐시 범위를 벗어나면 새 객체

128 이상이나 -129 이하의 값은 캐시에 없으므로 새 객체가 생성됩니다. 같은 값이라도 서로 다른 객체가 되어 == 비교 결과가 달라집니다.

java
코드 하이라이팅 중…
값 범위오토박싱 결과a == ba.equals(b)
-128 ~ 127캐시 객체 재사용truetrue
128 이상 또는 -129 이하매번 새 객체falsetrue
Integer는 == 대신 equals()로 비교
Integer 끼리의 값 비교는 반드시 equals()를 사용하세요. ==는 '두 참조가 같은 객체를 가리키는가'를 묻는 주소 비교이기 때문에, 캐시 범위 밖의 값에서는 예상치 못한 false가 나옵니다.

왜 하필 -128 ~ 127일까?

byte 타입의 표현 범위(-128 ~ 127)와 같습니다. 작은 정수는 프로그램에서 매우 자주 등장하므로, 이 범위만 미리 만들어두면 메모리와 실행 속도를 절약할 수 있습니다. 큰 값까지 모두 캐시하면 오히려 메모리 낭비가 되기 때문에 Java가 타협한 구간입니다.


null 언박싱 함정

래퍼 객체는 null 값을 가질 수 있습니다(기본 타입과의 결정적 차이). null인 상태에서 언박싱이 일어나면 NullPointerException 이 발생합니다.

java
코드 하이라이팅 중…

int x = a에서 컴파일러는 a.intValue()를 호출하도록 코드를 변환합니다. a가 null이므로 null.intValue()가 되어 NPE가 발생하는 것입니다. null 검사 없이 Integer 변수를 산술 연산에 사용할 때도 같은 문제가 생깁니다.

java
코드 하이라이팅 중…

자주 생기는 실수

java
코드 하이라이팅 중…
상황문제해결
Integer → int 대입null이면 NPEnull 검사 후 대입
Integer + int 연산null이면 NPEnull 검사 후 연산
Map.get() 결과를 int로 받기키가 없으면 null 반환 → NPEgetOrDefault() 사용
Integer는 null을 가질 수 있음을 항상 의심
기본 타입 int는 항상 값을 가지지만, 래퍼 클래스 Integer는 null일 수 있습니다. 언박싱 직전에 null 가능성이 있는지 점검하는 습관이 필요합니다.

연습 문제

문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)
후수학습(1개)
  • Java 메서드 오버로딩
정처기 감자정처기 감자

정보처리기사 합격
도와줄라고 하는 감자

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매
© 2025 재현기획개발. All rights reserved.
  • 정처기 감자의 시작
  • 업데이트 로그
  • 개인정보 처리방침
  • 이용약관
상호명 : 재현기획개발 / 주소: 서울특별시 영등포구 영등포로 150, 지하1층 108호 L145 가라지(당산동1가, 생각공장 당산) / 대표: 김재현 / 전화: 010-8158-7127 / 통신판매업신고: 제2025-서울영등포-1569호 / 이메일: contact@edugamja.com / 사업자등록번호: 573-51-00999