Java 프로그래밍, 래퍼 클래스 ( Wrapper Classes )
Java 언어에는 수를 표현하기 위한 기본 자료형(Primitive Types)이 몇가지 있는데, 기본형 뿐만아니라 기본형을 객체로 표현하기 위한 클래스들도 있다. 이들 클래스를 래퍼(Wrapper) 클래스하고 한다. 래퍼라는 이름은 기본형 데이터를 객체로 감싼다(wrap)는 의미에 붙여진 것으로 객체 상태가 아닌 기본형 데이터는 객체를 위주로 처리하는 객체지향 언어에서 오히려 다루기가 곤란한 경우가 있는데 이런 경우에는 기본형 데이터를 랩퍼 객체에 담고 래퍼객체를 이용하는 경우가 많다.
Java의 기본 자료형(Primitive Types)과 그 랩퍼 클래스(Wrapper Classes)
위의 그림에서와 같이 자바 언어에서 수를 표현하는 모든 자료형의 래퍼 클래스들은 모두 Number 클래스로부터 파생되어 생성된 것을 알 수 있다
래퍼 클래스(Wrapper Class)를 사용하는 예
import java.util.*; public class NumNString { public static void main(String[] args) { // 명시적으로 기본형 데이터를 래퍼객체로 생성하는 예 Integer integer = new Integer(100); // 래퍼 객체로부터 기본형 데이터를 추출하는 예 int i = integer.intValue(); System.out.printf("래퍼객체로부터 추출된 수, i=%d %n", i); // i=100 // Auto-Boxing 이용한 랩퍼객체 생성 integer = 200; // Unboxing 이용한 래퍼객체로부터 기본형 데이터 추출 i = integer; System.out.printf("Unboxing 후, i=%d %n", i); // i=200 // 래퍼 클래스를 이용한 문자열을 정수로 변환하는 예 i = Integer.parseInt("123"); System.out.printf("문자열->정수 변환, i=%d %n", i); // i=123 // 래퍼 클래스를 이용하여 자료형의 최대/최소값을 구하는 예 System.out.printf("int max=%d, min=%d %n", Integer.MAX_VALUE, Integer.MIN_VALUE); //max=2147483647, min=-2147483648 // Collection 을 사용할 때 Auto-Boxing, Unboxing을 이용하는 예 List<Boolean> list = new ArrayList<>(); list.add(true); list.add(false); list.add(true); System.out.printf("Boolean Unboxing %b, %b, %b %n", list.get(0), list.get(1), list.get(2)); // true, false, true // 메소드의 파라미터로 기본형 데이터를 전달할 때 Auto-Boxing 을 이용하는 경우 processNum(100); // i=100 processNum(123.456); // d=123.456 // 래퍼객체의 참조변수와 기본형 데이터의 비교시 연산자를 이용한 비교도 가능함 integer = 100; i = 100; boolean res = integer==i; System.out.printf("래퍼객체와 기본 데이터의 연산자를 이용한 비교결과 = %b %n", res); } static void processNum(Number numObj) { String msg = null; if(numObj instanceof Integer) { int i = (Integer)numObj; // Unboxing msg = String.format("i=%d ", i); }else if(numObj instanceof Double) { double d = (Double)numObj; // Unboxing msg = String.format("d=%f ", d); } System.out.printf("전달된 수, %s %n", msg); } }