Java를 배우다 보면 Integer와 int의 차이를 정확히 이해하는 것이 매우 중요합니다. 두 타입은 이름은 비슷하지만 성격과 용도가 완전히 다릅니다. 이 글에서는 두 타입의 핵심 차이점과 실제 코드 예제를 통해 쉽게 설명해 드리겠습니다.
Integer(래퍼 클래스)와 int(기본 데이터 타입)
- Integer와 int의 가장 큰 차이점은 Integer는 래퍼 클래스(wrapper class)이고, int는 기본 데이터 타입(primitive data type)이라는 점입니다.
- int는 32비트 부호 있는(signed) 2의 보수 방식으로 정수를 저장하는 데이터 타입입니다. 반면 Integer는 기본 타입인 int를 객체로 감싸는(wrap) 클래스입니다.
- Integer는 객체가 필요한 메서드의 인자로 사용할 수 있습니다. 반면 int는 정수 값이 필요한 메서드의 인자로 사용되며, 산술 연산식에 직접 활용할 수 있습니다.
- int는 메모리에 정수 값을 저장하는 역할을 하고, Integer는 int 값을 객체로 변환하거나 객체를 다시 int로 변환하는 기능을 제공합니다.
- int 타입 변수는 final로 선언하지 않는 한 값 변경이 가능(mutable)합니다. 반면 Integer 클래스는 하나의 int 값을 담고 있으며 불변(immutable) 특성을 가집니다.
예제 1: int(기본 데이터 타입) 사용하기
public class PrimitiveDataTypeTest {
public static void main(String []args) {
// int 선언
int a = 20;
int b = 40;
int result = a + b;
System.out.println("Result is: " + result);
}
}
실행 결과
Result is: 60
위 예제에서 볼 수 있듯이, int는 산술 연산자(+)를 사용해 직접 계산할 수 있습니다. 이것이 기본 데이터 타입의 장점입니다.
예제 2: Integer(래퍼 클래스) 사용하기
public class WrapperClassTest {
public static void main(String []args) {
int a = 20;
Integer b = Integer.valueOf(a);
System.out.println("Converted Value of b is: " + b);
Integer c = new Integer(30);
int d = c.intValue();
System.out.println("Converted Value of d is: " + d);
}
}
실행 결과
Converted Value of b is: 20 Converted Value of d is: 30
위 예제에서 Integer.valueOf(a)는 기본 타입 int를 Integer 객체로 변환하는 박싱(Boxing) 과정이며, c.intValue()는 Integer 객체를 다시 int로 변환하는 언박싱(Unboxing) 과정입니다.
마무리 정리
| 구분 | int | Integer |
|---|---|---|
| 분류 | 기본 데이터 타입 | 래퍼 클래스 |
| 저장 방식 | 값 자체를 저장 | 객체 형태로 저장 |
| null 허용 여부 | 불가능 | 가능 |
| 변경 가능성 | final이 아니면 변경 가능 | 불변(immutable) |
| 주요 용도 | 산술 연산, 일반적인 정수 처리 | 컬렉션(List, Map 등), 제네릭, null 처리 |
결론적으로, 단순한 숫자 연산에는 int를 사용하고, 컬렉션이나 제네릭처럼 객체가 필요한 상황 또는 null 값 표현이 필요한 경우에는 Integer를 사용하는 것이 바람직합니다.