[기본 개념] 4 | (1.6) Wrapper 클래스

728x90

[기본 개념] 4 | (1.6) Wrapper 클래스

1 Object클래스

2 String클래스

3 StringBuffer클래스와 StringBuilder클래스

4 Math클래스

5> 래퍼(wrapper)클래스

5. 래퍼(wrapper)클래스

 매개변수로 객체를 요구할 때, 기본형 값이 아닌 객체로 저장해야 할 때, 객체 간의 비교가 필요한 경우 기본형 변수를 객체로 변환하여 작업을 수행해야 할 때, 래퍼 클래스가 사용된다.

 

 래퍼 클래스의 생성자는 매개변수로 문자열이나 각 자료형의 값들을 인자로 받는다. 이때 자료형에 맞지 않은 문자열을 사용하면 NumberFormatException이 발생한다.

 

기본형 래퍼클래스 생성자 활용 예시
boolean Boolean Boolean(boolean valye)
Boolean(String s)
Boolean b = new Boolean(true) ;
Boolean b2 = new Boolean("true") ;
char Character Character(char value) Character c = new Character('a') ;
byte Byte Byte(byte value)
Byte(String s)
Byte b = new Byte(10) ;
Byte b2 = new Byte("10") ;
short Short Short(short value)
Short(String s)
Short s = new Short(10) ;
Short s2 = new Short("10") ;
int Integer Integer(int value)
Integer(String s)
Integer i = new Integer(100) ;
Integer i2 = new Integer("100") ;
long Long Long(long value)
Long(String s)
Long l = new Long(100) ;
Long l2 = new Long("100") ;
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") ;
double Double Double(double value)
Double(String s)
Double d = new Double(1.0) ;
Double d2 = new Double("1.0") ;

 

 래퍼 클래스들은 모두 equals( )가 오버라이딩되어 있어서 주소값이 아닌 객체가 가지고 있는 값을 비교한다. 그리고 toString( )도 오버라이딩되어 있어서 객체가 가지고 있는 값을 문자열로 변환하여 반환한다.

 

Number클래스

 이 클래스는 추상클래스로 내부적으로 숫자를 멤버변수로 갖는 래퍼 클래스들의 조상이다. 기본형 중에서 숫자와 관련된 래퍼 클래스들은 모두 Number클래스의 자손이다.

 

  Object
|
 
Number
|
Character

Boolean

 
Byte Short Integer Long Float Double BigInteger BigDecimal

 

       : 래퍼 클래스

BigInteger : long보다 더 큰 범위 정수 

BigDecimal : double보다 더 큰 범위 부동 소수점수

 

문자열을 숫자로 변환하기

문자열을 숫자로 변환하는 다양한 방법이 있다.

 

int i = new Integer("100").intValue( ) ;   // floatValue( ), longValue( ), . . .

int i2 = Integer.parseInt("100") ;          // 주로 쓰는 방법

Integer i3 = Integer.valueOf("100") ;

 

 밑에 표에서 둘 다 문자를 숫자로 바꿔주는 일을 하지만, 전자는 반환값이 기본형이고 후자는 반환값이 래퍼 클래스 타입이라는 차이가 있다.

 

문자열 ---> 기본형 문자열 ---> 래퍼 클래스

    byte       b = Byte.parseByte("100") ;
    short     s = Short.parseShort("100") ;
    int          i = Integer.parseInt("100") ;
    long       l = Long.parseLong("100") ;
    float       f = Float.parseFloat("3.14") ;
    double  d = Double.parseDouble("3.14") ;


    Byte        b = byte.valueOf("100") ;
    Short      s = Short.valueOf("100") ;
    Integer    i = Integer.valueOf("100") ;
    Long        l = Long.valueOf("100") ;
    Float        f = Float.valueOf("3.14") ;
    Double   d = Double.valueOf("3.14") ;

 

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

 예전에는 기본형과 참조형 간의 연산이 불가능했기 때문에, 래퍼 클래스로 기본형을 객체로 만들어서 연산해야 했지만 이제 기본형과 참조형 간의 덧셈이 가능하다. 규칙이 바뀐 것이 아니라 컴파일러가 자동으로 변환하는 코드를 넣어주기 때문이다.

 

아래의 경우, 컴파일러가 Integer객체를 int타입의 값으로 변환해주는 intValue( )를 추가해준다.

 

int i 5 ;

Integer iObj = new Integer(7) ;

int sum = i + iObj ;                  // int sum = i + iObj.intValue( ) ;

 

 이처럼 컴파일러가 기본형 값을 래퍼 클래스의 객체로 자동변환해주는 것'오토박싱'이라고 하고, 컴파일러가 래퍼 클래스의 객체를 기본형 값으로 자동 변환해주는 것'언박싱'이라고 한다.

 

 

 

 

 

출처 | Java의 정석 (남궁 성)

728x90