int와 Intger를 사용할 때는 차이가 있습니다. 어떤차이 일까요?
1. 자료형입니다.
Primitive 자료형 - Wrapper 클래스 관계
int | primitive 자료형 (long, float, double ...) |
산술 연산이 가능하다. | |
null로 초기화 할 수 없다. | |
Integer | Wrapper 클래스 (객체) |
Unboxing을 하지 않으면 산술 연산이 불가능 하지만, null 값을 처리할 수 있다. | |
null 값 처리가 용이하기 때문에 SQL과 연동할 경우 처리가 용이하다. | |
DB에서 자료형이 정수형이지만 null 값이 필요한 경우 VO에서 Integer를 사용할 수 있음. |
int는 primitive(원시) 자료형
Intger는 Wrapper 클래스 입니다.
위 설명에서 wrapper, Unboxing이라는 용어가 나오는데 어떤의미 일까요?
Boxing / Unboxing에 대해 알아보기
일단 Wrapper 클래스를 알아보겠습니다.
래퍼(Wrapper) 클래스
- 기본 자료형(int, double, boolean 등)의 데이터를 인스턴스(객체)로 만들기 위해 사용(포장) 하는 클래스입니다.
- 사용 이유
- 기본 자료형의 값을 굳이 래퍼(wrapper) 클래스로 포장하는 이유는 제네릭, 자료구조, 매개변수 등 기본 자료형이 아닌 레퍼런스 타입을 필요로 하는 경우가 많고 메서드를 갖고 있어 다양하게 활용이 가능하기 때문이다. 그리고 인스턴스를 생성(heap 메모리에 저장) 하여 상속 및 재사용이 가능하다. 또한 문자열(String)과 기본 자료형 간 형 변환하여 사용이 가능하다.(이것에 관한 내용은 다음 포스팅에 다룰 예정이다. )
박싱(boxing), 언박싱(un-boxing)
- 박싱(boxing)은 기본 자료형의 데이터를 래퍼(wrapper) 클래스의 객체로 만드는 과정을 의미합니다,
- 언박싱(un boxing)은 래퍼(wrapper) 클래스의 데이터를 기본 자료형으로 얻어내는 과정을 말합니다.
(예 : int → Integer 박싱(boxing) / Integer → int 언박싱(un boxing))
오토 박싱(auto boxing), 오토 언박싱(auto un-boxing)에 대해서
JDK 1.5부터는 오토 박싱(auto boxing)과 오토 언박싱(auto un-boxing)이라는 것이 지원된다. 위에서 살펴본 박싱(boxing)과 언박싱(unboxing) 하는 방법을 사용하지 않고 간단하게 변환이 가능하다.(컴파일러가 자동으로 박싱 및 언박싱을 해준다.)
오토 박싱은 해당 래퍼(wrapper) 클래스에 기본 자료형의 데이터를 대입하면 된다.(예 : Integer wi = 10;) 오토 언박싱은 반대로 기본 자료형에 래퍼 객체를 대입하면 된다.(예 : int i = wi)
2. int와 Integer간의 변환
- Boxing과 Unboxing이라고 합니다. 자료형 <-> 클래스 간의 변환을 의미합니다.
Boxing | Primitive 자료형 -> Wrapper 클래스 |
Unboxing | Wrapper 클래스 -> Primitive 자료형 |
- 예제 코드
// to int i from Integer ii
int i = ii.intValue();
// to Integer ii from int i
Integer ii = new Integer( i );
- valueOf()와 parseInt()의 차이
Integer.valueOf(String) | Integer 클래스를 리턴하기 때문에 산술 연산을 할 수 없다. |
Integer.parseInt(String) | int 형을 리턴하기 때문에 산술 연산을 할 수 있다. |
※ 정수로 파싱할 수 없는 String을 파라미터로 전달하면 에러가 납니다!
3. int와 Intger간의 메모리 차이
- Object가 8 byte
- Integer가 16 byte
- Integer를 참조하는데 4 byte
- Integer의 사이즈 = 16 + 4 = 20 byte
- int의 사이즈 = 4 byte
-> 5배 차이
참고
출처: https://includestdio.tistory.com/1 [includestdio:티스토리]
'JAVA > - JAVA 프로그래밍 입문' 카테고리의 다른 글
[java] String과 StringBuilder, StringBuffer는 무슨 차이가 있을까? (0) | 2022.08.02 |
---|---|
JAR 과 WAR의 차이는 무엇일까? (0) | 2022.07.23 |
[JAVA]자바 프로그래밍 입문 강좌 (renew ver.) - 초보부터 개발자 취업까지! DAY-9 (0) | 2021.01.22 |
[JAVA]자바 프로그래밍 입문 강좌 (renew ver.) - 초보부터 개발자 취업까지! DAY-8 (0) | 2021.01.21 |
[JAVA]자바 프로그래밍 입문 강좌 (renew ver.) - 초보부터 개발자 취업까지! DAY-7 (0) | 2021.01.20 |