왜 new Integer()를 사용하면 안 될까?

2026. 2. 13. 14:48·Java

겉으로 보면 `new Integer(10)` 과 `Integer.valueOf(10)` 은 완전히 달라 보인다.
하지만 결과적으로 만들어지는 것은 둘 다 Integer 객체이다.

차이는 “객체를 어떻게 만들고 관리하느냐”에 있다.

 

new Integer(10)

Integer a = new Integer(10);

이 코드는 무조건 새로운 객체를 생성한다.

메모리 구조를 보면 이렇게 된다.

a ───▶ [ Integer 객체 (10) ]

같은 코드를 여러 번 실행하면

Integer a = new Integer(10);
Integer b = new Integer(10);

이렇게 된다.

a ───▶ [ 10 ]
b ───▶ [ 10 ]

✔ 값은 같지만
✔ 서로 다른 객체이다.

따라서

a == b // false

이다.

 

 

Integer.valueOf(10)

Integer a = Integer.valueOf(10);

이 방식은 내부적으로 캐시를 먼저 확인한다.

자바는 기본적으로
-128 ~ 127 범위의 Integer 객체를 미리 만들어둔다.

그래서

Integer a = Integer.valueOf(10);
Integer b = Integer.valueOf(10);

이렇게 하면

a ─┐
   ├──▶ [ 캐시에 있는 10 객체 ]
b ─┘

✔ 같은 객체를 재사용한다.

따라서

a == b // true

가 된다.

 

 

왜 new를 쓰지 말라고 하는가?

1) 불필요한 객체 생성

`new Integer()` 는 무조건 새 객체를 만든다.
이것은 메모리 낭비이다.

반면 `valueOf()` 는

  • 캐시에 있으면 재사용
  • 없으면 새로 생성

즉, 최적화된 방식이다.

 

2) 자바에서 공식적으로 권장하지 않는다

`new Integer(int)` 생성자는 deprecated(사용 권장 안함) 상태이다.

자바 설계 방향은 다음과 같다:

"래퍼 객체는 직접 만들지 말고, 팩토리 메서드를 사용해라."

그래서 `valueOf()` 를 사용하도록 설계했다.

 

 

두 방식이 완전히 다른가?

아니다.
결과 타입은 동일하다.

둘 다 `Integer` 객체이다.

하지만

구분 new Integer Integer.valueOf
객체 생성 항상 새 객체 캐시 재사용
메모리 효율 낮음 높음
권장 여부 ❌ deprecated ✅ 권장

 

 

 

요즘은 어떻게 쓰는가?

사실 요즘은 이렇게도 거의 안 쓴다.

Integer a = 10; // 자동 박싱

이 코드는 내부적으로

Integer a = Integer.valueOf(10);

로 바뀐다.

즉,

✔ new는 거의 쓰지 않는다
✔ valueOf도 직접 잘 안 쓴다
✔ 자동 박싱을 사용한다

 

 

핵심 정리

  • `new Integer()` → 무조건 새 객체
  • `Integer.valueOf()` → 캐시 재사용
  • 두 개는 타입은 같지만 동작 방식이 다르다
  • 성능과 설계 방향 때문에 `valueOf()` 를 사용한다
  • 요즘은 자동 박싱이 기본이다

'Java' 카테고리의 다른 글

static  (0) 2026.02.05
enum: 사용이유와 예시  (0) 2026.02.04
쓰레드란?  (0) 2026.01.29
'Java' 카테고리의 다른 글
  • static
  • enum: 사용이유와 예시
  • 쓰레드란?
sqaxe1
sqaxe1
woojoo-devlog 님의 블로그 입니다.
  • sqaxe1
    Woojoo's Devlog
    sqaxe1
  • 전체
    오늘
    어제
    • 분류 전체보기 (148)
      • Backend (9)
        • Servlet (7)
        • Spring (2)
      • Frontend (1)
      • CS (0)
      • Book (33)
        • 자바 웹 프로그래밍 Next Step (30)
        • 테스트 주도 개발: 고품질 쾌속개발을 위한 TDD.. (1)
        • 성공과 실패를 결정하는 1%의 네트워크 원리 (2)
      • Engineering (0)
        • Testing (0)
      • Infra (6)
        • AWS (6)
      • Java (4)
      • Network (1)
      • 김영한 (28)
        • 자바 입문 (8)
        • 실전 자바 - 기본편 (6)
        • 실전 자바 - 중급편 (10)
        • 실전 자바 - 고급편 (4)
      • Web (39)
        • Web Basics (39)
      • Project (24)
        • NeoSquare (0)
        • Memo Evolution (24)
      • 정보처리기사 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    aws
    java
    개발서적
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
sqaxe1
왜 new Integer()를 사용하면 안 될까?
상단으로

티스토리툴바