Primitive : 원시타입
Wrapper Class : 래퍼클래스타입 또는 래퍼 타입
자바는 타입안정형 언어이기 때문에 꼭 숙지할것
Java Primitive Type (원시 타입), Wrapper Class (래퍼 클래스) 차이점
Java Primitive Type (원시 타입), Wrapper Class (래퍼 클래스) 차이점
프로젝트를 하면서 대부분의 경우에 Long을 쓰면서 가끔 어떤 경우에서는 IntelliJ가 자동으로 Long을 long으로 바꿔주는 경우가 있었습니다. 왜 그런지 이유를 몰랐고, 궁금하지도 않았다는 것을 반
wildeveloperetrain.tistory.com
자바를 사용하면서
- Long long
- Integer int
이 둘의 차이를 인식해본적이 있었나요?
저는 지금까지 이런 조그만 차이에는 크게 집중하지 않고
원하는 의도대로 동작하게끔 코드를 짜는데에만 급급했던 것 같아요
그래서 오늘은 이 둘의 차이를 알아볼거에요, 이 둘을 뭐라고 부르는 지 부터 설명을 해봅시다
Java의 원시타입 primitive Type (기본 자료형)
래퍼 클래스 Wrapper Class
이렇게 부르고 있어요.
기본 자료형과 래퍼 클래스
어떤 것들이 해당하는 지 확인해봅시다
| Primitive Type (기본 자료형) | Wrapper Class |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| boolean | Boolean |
| char | Character |
보통 일반적으로 primitive Type(기본 자료형) 이 좀 더 익숙한 타입이고
wrapper class가 대문자가 들어간 타입이라고 생각하면 될 것 같아요
그렇다면 이 둘의 차이가 뭘까요 ?
바로 wrapper class는 primitive type(기본 자료형)을 객체화 한 것입니다
우리가 기존에 알고 있던 int, long, char 같은 타입을
객체화 한 것이 바로 wrapper class 에요
그렇다면 왜 ? 원시 타입을 객체화 한 타입이 존재하며 그 존재의 쓸모는 무엇일까요?
int primitive = 10;
Integer wrapper = 10;
wrapper = null; // null 값이 들어갈 수 있습니다
String str = wrapper.toString(); //메서드를 사용할 수 있습니다
ArrayList<Integer> integerList = new ArrayList(); // 제네릭에 사용할 수 있습니다
1. wrapper class 에는 Null 값이 들어갈 수 있습니다.
즉 int 로 선언한 변수에는 null 이 들어갈 수 없는데
Integer 로 선언한 변수에는 null 이 들어갈 수 있다니깐요
int 는 기본 자료형이라 null을 넣을 수 없어요
int num = null; //컴파일 오류
Integer num1 = null; //가능
이유는
int : 실제 정수값을 저장해 , 예를 들어 0, 1, 100
Integer : 정수 값을 객체로 감싸서 저장해 , 객체가 없다는 의미인 null 도 가능해
2. toString() 메서드 사용이 가능합니다
기본 자료형은 해당 메서드 사용이 안됩니다
Java에서 toString() 은 객체의 메서드 이기 때문이에요
int num=123;
num.toString(); // 컴파일 오류
그러면 기본 원시형은 toString() 을 사용하지 않고 어떻게 문자로 변환할 수 있을까?
3가지 방법이 있어요
2-1. String.valueOf() 사용 -> 추천 !
int num = 123;
String str = String.valueOf(num);
valueOf() 는 어떤 메서드?
값을 특정 자료형의 값이나 객체로 변환해주는 메서드
2-1-1. String.valueOf() - 문자열로 변환
int num = 123;
String str = String.valueOf(num);
2-1-2. Integer.valueOf() - Intger 객체로 변환
- vlaueOf() -> 해당 클래스의 형태로 값을 변환
- parseInt() -> 문자열을 int로 변환
- toString() -> 객체의 값을 문자열로 변환
2-2. Integer.toString() 사용
int num = 123;
String str = Intger.toString(num);
2-3. Integer로 변환해서 사용
int num = 123;
String str = Integer.valueOf(num).toStirng();
3. 제네릭에 사용 가능하다.
제네릭 : 자료형을 미리 지정하는 기능
1. 제네릭이 뭐야?
예를 들어 ArrayList는 여러 데이터를 담을 수 있는 리스트
ArrayList<Integer> integerList = new ArrayList<>();
여기서 Interger가 바로 제네릭임
- ArrayList : 데이터를 담는 리스트
- <Integer> : 이 리스트에는 Integer 타입의 데이터를 담겠다고 지정
- integerList : 리스트 변수명
integerList.add(10);
integerList.add("안녕");
Integer 타입만 넣기로 지정했기 때문에 문자열 "안녕"은 넣을 수 없음
2. 제네릭을 사용하지 않으면 ?
ArrayList list = new ArrayList();
list.add(10);
list.add("안녕");
제네릭 지정하지 않으면 서로 다른 타입의 데이터도 넣을 수 있어
대신 데이터를 꺼내 사용할 때 문제가 생길 수 있지
어떤 문제?
리스트 안에는 문자열이 들어있는데
서로 다른 타입의 데이터가 들어가 있으니
문자열이 들어가 있는지 모르고 integer로 변환하려고 해서 오류가 발생하는 상황이야
ArrayList list = new ArrayList();
list.add("안녕");
Integer num = (Integer) list.get(0); // 실행 시 오류 발생
-> 제네릭을 사용하면 이런 실수를 미리 방지할 수 잇어
3. 그럼 이 코드는 무슨 뜻이야?
ArrayList<Integer> integerList = new ArrayList();
왼쪽의 Integer는 이 리스트에서 사용할 데이터 타입을 지정한거야
핵심은
- 제네릭 : 사용할 데이터 타입을 지정하는 기능
- <Integer> : Integer 타입으로 지정
즉 ArrayList<Integer> 는 Integer 타입의 데이터를 담는 ArrayList 라는 뜻
=> 이런 제네릭에 기본 자료형을 사용할 수 없고, Wrapper 클래스만 사용할 수 있어 😀
ArrayList<int> list = new ArrayList<>(); // 컴파일 오류
ArrayList<Integer> list = new ArrayList<>(); // 가능
왜 그럴까?
: 제네릭은 타입 매개변수에 참조 타입을 사용하기 때문이야.
기본 자료형은 참조 타입이 아니므로 직접 사용할 수 없어
- Integer 는 클래스이므로 사용할 수 있음
1. 참조 타입은 뭐야?
Java의 데이터 타입은 크게 2가지 종류로 나눌 수 있어
- 기본 자료형
- 참조 타입
참조 타입
예시 : String, Integer, ArrayList
객체를 참조함
int 는 숫자 10을 저장하는 기본 자료형
Integer는 숫자를 객체 형태로 다룰 수 있게 만든 클래스
여기서 객체를 참조한다는 건 객체를 직접 값 처럼 다루는게 아니라
그 객체를 가리키는 참조를 통해 접근한다는 뜻
2. 그런데 Integer 에도 숫자를 넣을 수 있잖아?
맞아 그건 Java가 자동으로 변환해주기 때문임
Integer num = 10;
Integer num = Integer.valueOf(10);
Integer 에 10을 넣으면
내부적으로 다음과 같은 변환이 일어나
이런 자동 변환을 오토박싱 이라고 해
핵심
- Integer는 int를 객체로 다룰 수 있도록 만든 참조 타입
2. 참조 타입과 wrapper class 의 차이?
- 참조 타입 : 데이터 타입의 한 종류
- wrapper class : 기본 자료형의 값을 객체로 다룰 수 있도록 감싸는 클래스
int a = 10; // 기본 자료형
Integer b = 10; // 참조 타입이자 Wrapper 클래스
String c = "hello"; // 참조 타입이지만 Wrapper 클래스는 아님
여기서 중요한 점은 String 은 참조 타입이지만 Wrapper 클래스는 아니라는 것
Wrapper 클래스는 참조 타입에 속하는 클래스임. 참조 타입이라고 모두 Wrapper 클래스 인 것은 아님
3. 기본 자료형, 참조 타입, Wrapper class 비교

참조 타입
객체 등을 참조하는 타입
String, ArrayList
객체를 참조함
null 가능
Wrapper 클래스
기본 자료형을 객체로 다루도록 만든 클래스
Integer, Double
클래스의 객체로 사용 가능
null 가능
Wrapper 클래스
- 클래스의 객체로 사용 가능 ? 이게 뭔 말이지?
1. 클래스와 객체의 차이
Integer num = Integer.valueOf(10);
Integer : 클래스임 . 객체를 만들기 위한 설계도
num : 객체를 참조하는 변수
Integer.valueOf(10) : 숫자 10을 담은 Integer 객체를 얻는 코드
즉, Integer는 클래스이고 , 그 클래스로 만든 객체를 num 이라는 변수가 참조하는것
다시 돌아와서,
그럼 언제 기본 자료형 사용하고, Wrapper 사용해?
Wrapper 의 경우는 객체를 생성하는 것인데
굳이 객체가 필요하지 않거나 null 반환 할 일 없으면 기본 자료형 사용하는게 더 메모리 측면에서는 효율적임
Java 5 부터는 autoBoxing, autoUnBoxing 이라는 것이 적용되어
자동적으로 기본 자료형과 Wrapper class를 형변환 해주고 있음
Integer wrapper = 10;
int primitive = 10;
wrapper = (Integer)primitive;
primitive = (int)wrapper;
1. 기본 자료형, wrapper class 가 존재한다
2. 둘은 이름 뿐 아니라 타입 자체가 다르다. 예 int, Integer
3. Wrapper 클래스는 기본 자료형의 값을 객체로 다룰 수 있도록 만든 클래스이다
4. wrapper class는 null 값 허용, toString() 메서드 사용, 제네릭 타입으로 사용 가능
5. Java 5 부터는 오토박싱, 오토 언박싱이 가능해졌다
추가로 알아두면 좋을 내용 3가지
1. 모든 Wrapper 클래스는 참조 타입이다
Integer, Double, Boolean 등은 참조 타입이다
Streing 도 참조 타입이지만 Wrapper 클래스는 아님
2. Wrapper 클래스는 객체이므로 메서드를 사용할 수 있음
3. 오토 언박싱 시 주의해야함
Integer num = null;
int value = num; //NullPointException 발생
Integer 의 null 을 int 로 변환할 수 없기 때문
int -> 기본 자료형
Integer -> 참조 타입이자 Wrapper 클래스
오토박싱 -> int 에서 Integer로 자동변환
오토언박싱 -> Integer 에서 int 로 자동 변환
제네릭에는 int 대신 Integer 를 사용
'JAVA' 카테고리의 다른 글
| Postgresql 타입과 자바 타입 매핑 (0) | 2026.10.09 |
|---|---|
| Java 두 날짜 비교 - Java 8 기점 차이 (0) | 2026.10.09 |
| 전략 패턴 이란 ? (0) | 2026.05.14 |
| 7장 여러 데이터를 하나에 넣을 수는 없을까요? (0) | 2023.03.07 |
| 6장 제가 조건을 좀 따져요 (0) | 2023.02.17 |