Search

Wrapper 클래스

Wrapper 클래스

Java에서 객체로 다루지 않는 기본형 변수를 객체로 다뤄야 할 때 사용하는 클래스
매개변수로 객체를 요구할 때
기본형 값이 아닌 객체로 저장해야 할 때
객체 간의 비교가 필요할 때 등
래퍼 클래스의 생성자는 매개변수로 문자열이나 각 자료형 값들을 인자로 받음.
이 때 각 자료형에 알맞은 문자열을 사용해야 함!
new Integer("1.0")은 예외 발생
boolean → Boolean
Boolean(boolean value)
Boolean(String s)
Boolean b = new Boolean(true); Boolean b2 = new Boolean("true");
Java
char → Character
Character(char value)
Character c = new Character('a');
Java
byte → Byte
Byte(byte value)
Byte(String s)
Byte b = new Byte(10); Byte b2 = new Byte("10");
Java
short → Short
Short(short value)
Short(String s)
Short s = new Short(10); Short s2 = new Short("10");
Java
int → Integer
Integer(int value)
Integer(String s)
Integer i = new Integer(100); Integer i2 = new Integer("100");
Java
long → Long
Long(long value)
Long(String s)
Long l = new Long(100); Long l2 = new Long("100");
Java
float → Float
Float(double value)
Float(float value)
Float(String s)
Float f = new Float(1.0); Float f2 = new Float(1.0f); Float f3 = new Float("1.0f");
Java
double → Double
Double(double value)
Double(String s)
Double d = new Double(1.0); Double d2 = new Double("1.0");
Java
래퍼 클래스는 모두 equal()가 오버라이딩되어 있어 주소값이 아닌 개체가 가진 값을 비교
Integer 객체에 비교연산자를 사용할 순 없어서 compareTo() 사용
toString()도 오버라이딩되어 있어서 객체가 가진 값을 문자열로 반환
WrapperEx1.java

Number 클래스

내부적으로 숫자를 멤버변수로 갖는 래퍼 클래스들의 조상인 추상 클래스
기본형 중 숫자와 관련된 래퍼 클래스들은 모두 Number의 자손
BigInteger : long으로 다룰 수 없는 큰 범위의 정수 처리
BigDecimal : double로 다룰 수 없는 큰 범위의 부동 소수점수 처리
Number 클래스의 실제 소스
객체가 가지고 있는 값을 숫자와 관련된 기본형으로 변환하여 반환하는 메소드들을 정의
public abstract class Number implements java.io.Serializable { public abstract int intValue(); public abstract long longValue(); public abstract float floatValue(); public abstract double doubleValue(); public byte byteValue() { return (byte)intValue(); } public short shortValue() { return (short)intValue(); } }
Java

문자열을 숫자로 변환하기

문자열을 숫자로 변환하는 다양한 방법
int i = new Integer("100").intValue(); // floatValue(), longValue(), ... int i2 = Integer.parseInt("100"); // 주로 이 방법을 많이 사용 Integer i3 = Integer.valueOf("100");
Java
문자열 → 기본형
byte b = Byte.parseByte("100"); short s = Short.parseShort("100"); int i = Integer.parseInteger("100"); long l = Long.parseLong("100"); float f = Float.parseFloat("3.14"); double d = Double.parseDouble("3.14");
Java
문자열 → 래퍼 클래스
Byte b = Byte.valueOf("100"); Short s = Short.valueOf("100"); Int i = Integer.valueOf("100"); Long l = Long.valueOf("100"); Float f = Float.valueOf("3.14"); Double d = Double.valueOf("3.14");
Java
JDK 1.5부터 도입된 오토박싱(autoboxing) 기능 떄문에 반환값이 기본형일 때와 래퍼 클래스일 떄의 차이가 사라짐.
valueOf도 성능이 살짝 느리지만 나쁘지 않음.
int i = Integer.parseInteger("100"); long l = Long.parseLong("100"); int i = Integer.valueOf("100"); long l = Long.valueOf("100");
Java
문자열이 10진수가 아닌 다른 진법(radix) 숫자일 때도 변환이 가능하도록 다음 메소드를 제공
static int parseInt(String s, int radix) // 문자열 s를 radix진법으로 인식 static Integer valueOf(String s, int radix) int i4 = Integer.parseInt("100", 2); // 100(2) -> 4 int i5 = Integer.parseInt("100", 8); // 100(8) -> 64 int i6 = Integer.parseInt("100", 16); // 100(16) -> 256 int i7 = Integer.parseInt("FF", 16); // FF(16) -> 255 // int i8 = Integer.parseInt("FF"); // 진법을 생략하면 10진수로 간주. NumberFormatException 발생
Java
WrapperEx2.java

오토박싱 & 언박싱 (autoboxing & unboxin)

오토박싱 : 기본형 값을 래퍼 클래스의 객체로 자동 변환 해주는 것
언박싱 : 래퍼 클래스의 객체를 기본형 값으로 자동 변환 해주는 것
JDK 1.5 전에는 기본형과 참조형 간의 연산이 불가능했기에, 래퍼 클래스로 기본형 객체를 만들어서 연산해야 했지만..
int i = 5; Integer iObj = new Integer(7); int sum = i + iObj; // 에러. 기본형과 참조형 간의 덧셈 불가(JDK 1.5 이전)
Java
이제는 컴파일러가 자동으로 참조형을 기본형으로 변환해주기 때문에 연산 가능
int sum i + iObj; -> int sum i + iObj.intValue();
Java
이 외에도 내부적으로 객체 배열을 가지고있는 Vector 클래스ArrayList 클래스에 기본형 값을 저장해야 할 때나 형변환이 필요할 때도 컴파일러가 자동으로 코드 추가
ArrayList<Integer> list = new ArrayList<Integer>(); list.add(10); // 오토박싱. 10 -> new Integer(10) int value = list.get(0) // 언박싱. new Integer(10) -> 10
Java
WrapperEx3.java

참고 자료