본문 바로가기

프로그래밍 언어/JAVA

JAVA 입문 - wrapper 클래스

지난 글: [프로그래밍 언어/JAVA] - JAVA 입문 - String 클래스

 

기본 자료형을 위한 클래스

지금까지 공부하면서 정수를 사용할 때 기본형인 int를 사용했다. 그런데 정수를 객체형으로 사용해야 하는 경우가 있다고 한다. 예를 들어 매개변수가 객체거나 반환 값이 객체인 경우이다.

public void setValue(Integer i) {...} //객체를 매개변수로 받는 경우
public Integer returnValue( ) {...} //반환 값이 객체형인 경우

이를 위해 자바에서는 기본 자료형처럼 사용할 수 있는 클래스를 제공한다. 이런 클래스를 '기본 자료형을 감쌌다'는 의미로 Wrapper 클래스라고 한다. 그 종류는 아래와 같다.

그럼 가장 대표적인 Integer 클래스를 통해 Wrapper 클래스의 사용법을 알아보자. 다른 클래스도 사용 방법이 크게 다르지 않아 Integer 클래스를 익혀두면 어렵지 않게 응용할 수 있다고 한다.

 

Integer 클래스 사용하기

Integer 클래스의 JavaDoc을 살펴보면 int 자료형을 감싼 클래스라고 설명되어 있다. Integer 클래스의 생성자는 다음과 같이 특정 정수를 매개변수로 받는 경우와 문자열을 받는 경우 두 가지이다.

Integer(int value) {...} //특정 정수를 매개변수로 받는 경우
Integer(String s) {...} //특정 문자열을 매개변수로 받는 경우

자바 소스 파일인 Integer.java를 살펴보면 Integer 클래스는 int 자료형의 특성이 그대로 구현되어 있는 것을 알 수 있다. 사용 가능한 최댓값과 최솟값은 static 변수로 정의되어 있다. 대부분의 Wrapper 클래스가 Integer 클래스 정의와 크게 다르지 않다. 또, Integer 클래스는 멤버 변수로 기본 자료형 int(private final int value)를 갖고 있고, int 값을 객체로 활용할 수 있는 여러 메서드를 제공한다. int value는 final 변수이며 한 번 생성되면 변경할 수 없다.

 

Integer 클래스의 메서드

Integer 클래스의 여러 메서드 중 자주 사용하는 메서드 몇 가지를 보며 Wrapper 클래스 메서드 사용법을 알아보자. Integer 클래스 내부의 int 자료형 값을 가져오기 위해서는 intValue( ) 메서드를 사용한다.

Integer iValue = new Integer(100);
int myValue = iValue.intValue( ); //int 값 가져오기. myValue 값을 출력하면 100이 출력됨

valueOf( ) 정적 메서드를 사용하면 생성자를 사용하지 않고 정수나 문자열을 바로 Integer 클래스로 반환받을 수 있다.

Integer num1 = Integer.valueOf("100");
Integer num2 = Integer.valueOf(100);

parseInt( ) 메서드를 활용하면 문자열이 어떤 숫자를 나타낼 때, 이를테면 학번이나 개수 등이 문자열로 전달된 경우에 문자열에서 int 값을 바로 가져와서 반환할 수도 있다.

int num = Integer.parseInt("100");

다른 Wrapper 클래스의 사용법도 크게 다르지 않다.

 

오토박싱과 언박싱

위에서 배웠듯 어떤 정수 값을 사용할 때 int로 선언하는 경우와 Integer로 선언하는 경우는 전혀 다르다. int는 기본 자료형 4바이트지만 Integer는 클래스이기에 인스턴스로 생성하려면 생성자를 호출하고 정수 값을 인수로 넣어야 한다. 이처럼 기본 자료형과 Wrapper 클래스는 같은 값을 나타내지만 그 쓰임과 특성이 전혀 다르다. 하여 자바5 이전에는 기본 자료형과 Wrapper 클래스형을 함께 연산하기 위해서 둘 중 하나의 형태로 일치시켜야 했다. Integer와 int형으로 선언한 두 값을 더한다면 Integer에서 intValue( ) 메서드를 사용해 정수 값을 꺼내거나 int형으로 선언된 변수의 값을 Integer로 만들어 연산해야 했다. 하지만 자바 5부터는 아래와 같이 변환 없이 사용할 수 있게 되었다고 한다.

기본형을 객체형으로 바꾸는 것을 오토박싱(autoboxing), 객체형을 기본형으로 꺼내는 것을 언박싱(unboxing)이라고 한다. 이는 자바의 연산 방식이 변경된 것이 아니라 컴파일러가 변경하는 것이다. 하여 객체의 형 변환에 신경 쓰지 않고 편하게 프로그래밍할 수 있다.

 

참고 서적: 자바 프로그래밍 입문 - 박은종

'프로그래밍 언어 > JAVA' 카테고리의 다른 글

JAVA 입문 - 제네릭  (0) 2022.06.03
JAVA 입문 - Class 클래스  (0) 2022.06.02
JAVA 입문 - String 클래스  (0) 2022.05.31
JAVA 입문- Object 클래스  (0) 2022.05.30
JAVA 입문 - 인터페이스 활용  (0) 2022.05.29