성장일기

 자바에서는 int와 Integer는 얼핏보면 둘다 정수를 저장하는 변수 같지만 차이가 있다. 이 둘의 차이에 대해서는 대충 알고있지만 언젠가는 좀 더 자세히 알고 넘어가야 할 것 같아서 포스팅하려고 한다.

 

 

 

1. Primitive 자료형


int a = 10;
  • 우리가 흔히 알고있는 자료형을 의미한다. (int, float, doule, long...)
  • 산술연산이 가능하다.
  • null로 초기화가 불가하다. (0은 당연히 가능)

 

 

2. Wrapper 클래스


Integer a = new Integer(10);

 Java에서는 기본자료형 이외에 각각을 클래스화 해놓은 Wrapper 클래스가 존재한다. 프로그램에 따라 기본자료형을 객체로 취급해야 하는 경우나 메소드의 파라미터로 객체타입이 요구되는 경우 등 Wrapper 클래스가 유용하게 쓰인다.

  • 클래스 형태이다.
  • Unboxing을 하지 않으면 산술연산이 불가능하다.
  • null값을 처리할 수 있다. (SQL과 연동할 경우 처리가 용이)
기본 타입 래퍼 클래스
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

 

 

3. 박싱(Boxing)과 언박싱(Unboxing)


Integer a = new Integer(10); 	//boxing
int b = a.intValue();	//unboxing

 Wrapper 클래스는 산술 연산을 위해 정의된 클래스가 아니므로, 인스턴스에 저장된 값을 변경할 수 없다. 단지, 값을 참조하기 위해 새로운 인스턴스를 생성하고, 생성된 인스턴스의 값만을 참조할 수 있다.

 

 산술연산을 하기 위해 Wrapper 클래스에 저장되어 있는 데이터를 기본 자료형으로 변환하는 과정을 언박싱(Unboxing)반대로 기본 자료형의 데이터를 Wrapper 클래스의 인스턴스로 변환하는 과정을 박싱(Boxing)이라고 한다.

 

 

4. 오토 박싱(Auto Boxing)과 오토 언박싱(Auto Unboxing)


Character ch = 'x';	//Character ch  = new Character('x'); => auto boxing
char c = ch;	//char c = ch.charValue(); => auto unboxing

 JDK 1.5부터는 박싱과 언박싱이 필요한 상황에서 자바 컴파일러가 이를 자동으로 처리해준다. 이러한 상황을 오토 박싱(Auto Boxing)과 오토 언박싱(Auto Unboxing)이라고 부른다.

 

 

Integer num1 = 10;	//auto boxing
Integer num2 = new Integer(3);	boxing

Integer result1 = num1 + num2	//13
Integer result2 = num1 - num2	//7

 위 에제는 Wrapper 클래스인 result1, result2의 피연산자를 오토 언박싱(Auto Unboxing)하여 기본 자료형끼리 연산을 수행하여 각각 Wrapper클래스의 인스턴스에 저장해준다.

 

 

출처: 코딩의 시작, TCP School

공유하기

facebook twitter kakaoTalk kakaostory naver band