728x90
기본 자료형을 위한 클래스
- 지금까지 정수를 사용할 때 기본형인 int 를 사용했습니다.
- 그런데 정수를 객체형으로 사용해야 하는 경우가 있습니다.
- 예를 들어 매개변수가 객체거나 반환 값이 객체형인 경우, ArrayList를 사용할 경우입니다.
public void setValue(Integer i) {...} // 객체를 매개변수로 받는 경우
public Integer returnValue( ) {...} // 반환 값이 객체형인 경우
ArrayList<Boolean> list = new ArrayList<Boolean>( ) // ArrayList는 객체만 저장할 수 있다.
- 이를 위해 자바에서는 기본 자료형처럼 사용할 수 있는 클래스를 제공합니다.
- 이런 클래스를 기본 자료형을 감쌌다는 의미로 Wrapper 클래스라고 합니다.


- 가장 대표적인 Integer 클래스를 통해 Wrapper 클래스의 사용법을 알아봅시다.
- 다른 클래스도 사용 방법이 크게 다르지 않으므로 Integer 클래스를 익혀 두면 충분히 응용할 수 있습니다.
Integer 클래스 사용하기
- Integer 클래스의 JavaDoc 을 살펴보면 int 자료형을 감싼 클래스라고 설명되어 있습니다.
- Integer 클래스의 생성자는 다음과 같이 특정 정수를 매개변수로 받는 경우와 문자열을 받는 경우 두 가지가 있습니다.
Integer(int value) {...} // 특정 정수를 매개변수로 받는 경우
Integer(String s) {...} // 특정 문자열을 매개변수로 받는 경우
- 우선 자바 소스파일인 Integer.java 파일 부터 살펴보겠습니다.

- Integer 클래스는 int 자료형의 특성이 그대로 구현되어 있습니다.
- 사용 가능한 최댓값과 최솟값이 static 변수로 정의되어 있습니다.
- 대부분의 Wrapper 클래스가 위 Integer 클래스 정의와 크게 다르지 않습니다.
- 또한 Integer 클래스는 멤버 변수로 기본 자료형 int 를 가지고 있고, int 값을 객체로 활용할 수 있는 여러 메서드를 제공합니다.
- int value 는 final 변수이며 한번 생성되면 변경할 수 없습니다.
Integer 클래스의 메서드
- 그러면 Integer 클래스의 여러 메서드 중 자주 사용하는 메서드 몇 가지를 살펴보면서 Wrapper 클래스 메서드 사용법을 알아보겠습니다.
- Integer 클래스 내부의 int 자료형 값을 가져오기 위해서는 intValue( ) 메서드를 사용합니다.
Integer iValue = new Integer(100);
int myValue = iValue.intValue();
- valueOf( ) 정적 메서드를 사용하면 생성자를 사용하지 않고 정수나 문자열을 바로 Integer 클래스로 반환받을 수 있습니다.
public class IntegerWrapper {
public static void main(String[] args) {
Integer iValue = new Integer(100);
int myValue = iValue.intValue();
System.out.println(myValue);
Integer number1 = Integer.valueOf(100);
Integer number2 = Integer.valueOf("100");
System.out.println(number1);
System.out.println(number2);
}
}
- parseInt( ) 메서드를 활용하면 문자열이 어떤 숫자를 나타낼 때("100" 처럼), 문자열에서 int 값을 바로 가져와서 반환할 수도 있습니다.
public class IntegerWrapper {
public static void main(String[] args) {
Integer iValue = new Integer(100);
int myValue = iValue.intValue();
System.out.println(myValue);
Integer number1 = Integer.valueOf(100);
Integer number2 = Integer.valueOf("100");
System.out.println(number1);
System.out.println(number2);
int num = Integer.parseInt("100");
System.out.println(num);
}
}
| 메서드 | 역할 |
| intValue( ) | Integer 클래스 내부의 int 자료형을 가져옵니다. |
| valueOf( ) | 정적 메서드이기 때문에 생성자를 사용하지 않고 정수나 문자열을 바로 Integer 클래스로 반환받을 수 있다. |
| parseInt( ) | "100" 같은 문자열이지만 숫자를 나타내는 문자열에서 int 를 return 해줌 |
오토박싱과 언박싱
- 앞에서 살펴봤듯이 어떤 정수 값을 사용할 때 int 로 선언하는 경우와 Integer 로 선언하는 경우는 전혀 다릅니다.
- int 는 기본 자료형 4바이트지만, Integer 는 클래스이기 때문에 인스턴스로 생성하려면 생성자를 호출하고 정수 값을 인수로 넣어야 합니다.
- 이처럼 기본 자료형과 Wrapper 클래스는 같은 값을 나타내지만, 그 쓰임과 특성이 전혀 다릅니다.
- 그래서 자바 5 이전에는 기본 자료형과 Wrapper 클래스형을 함께 연산하기 위해 둘 중 하나의 형태로 일치 시켜야 했습니다.
- 예를 들어 Integer 와 int 형으로 선언한 두 값을 더한다면 Integer 에서 intValue( ) 메서드를 사용해 정수 값을 꺼내거나 int 형으로 선언된 변수의 값을 Integer 로 만들어 연산해야 했습니다.
Integer num = new Integer(17); // 박싱
int n = num.intValue(); // 언박싱
System.out.println(n);
Character ch = 'X'; // Character ch = new Character('X'); : 오토박싱
char c = ch; // char c = ch.charValue(); : 오토언박싱
System.out.println(c);
- 하지만 자바 5 부터는 다음과 같이 변환 없이 사용할 수 있게 되었습니다.
public class IntegerWrapper {
public static void main(String[] args) {
Integer iValue = new Integer(100);
int myValue = iValue.intValue();
System.out.println(myValue);
Integer number1 = Integer.valueOf(100);
Integer number2 = Integer.valueOf("100");
System.out.println(number1);
System.out.println(number2);
int num = Integer.parseInt("100");
System.out.println(num);
Integer num1 = new Integer(100);
int num2 = 200;
int sum = num1 + num2; // Integer 형과 int 형이 연산을 하면 Integer 형이 .intValue( ) 메서드를 활용해서 언박싱을 하여 연산한다.
Integer num3 = num2; // int 형을 Integer 형에 대입하려고 할 때 Integer.valueOf(int) 가 동작하여 Integer 형으로 자동 변환하여 대입핸다. (오토박싱)
System.out.println(sum);
System.out.println(num3);
}
}
- 기본형을 객체형으로 바꾸는 것을 오토박싱(autoboxing), 객체형을 기본형으로 꺼내는 것을 언박싱(unboxing) 이라고 합니다.
- 이는 자바의 연산 방식이 변경된 것이 아니라, 컴파일러가 자동으로 변경해주게끔 자바 5 부터 바뀐 것입니다.
- 따라서 객체의 형 변환에 신경 쓰지 않고 편리하게 프로그래밍할 수 있게 되었습니다.
- 다른 Wrapper 클래스의 쓰임 또한 크게 다르지 않으므로 JavaDoc 을 참고하여 활용해 보세요.