본문 바로가기

# 02/Java

[윤성우 열혈자바] 20-1. 래퍼 클래스

반응형

래퍼 클래스

- 기본 자료형 값래퍼 클래스(인스턴스)로 감싸는 것. 

- 즉, 기본 자료형 값을 가진 인스턴스를 생성한다.








기본 자료형의 값을 감싸는 래퍼 클래스


class UseWrapperClass {


public static void showData(Object obj) {

System.out.println(obj);

}


기본 자료형은 class가 아니기 때문에 Object를 상속하지 않는다.

인스턴스를 요구하는 메소드

이 메소드를 통해서 정수나 실수를 출력하려면 해당 값을 인스턴스화 해야 한다.




public static void main(String[] args) {


Integer iInst = new Integer(3);

showData(iInst);

showData(new Double(7.15));


}

}


이렇듯 기본 자료형의 값을 인스턴스로 감싸는 목적의 클래스를 가리켜 래퍼 클래스라 한다.








래퍼 클래스의 종류와 생성자


  • Boolean                   public Boolean (boolean value)
  • Character                 public Character (char value)
  • Byte                        public Byte (byte value)
  • Short                       public Short (short value)
  • Integer                     public Integer (int value)
  • Long                        public Long (long value)
  • Float                        public Float (float value), public Float (double value)
  • Double                     public Double (double value)       // 자동 형변환이 가능하기 때문에 float 는 따로 정의 안해줌.







래퍼 클래스의 두 가지 기능








박싱과 언박싱 예

public static void main (String[] args) {

Integer iObj = new Integer(10);                        // 박싱
Double dObj = new Double(3.14);                     // 박싱
. . . .

int num1 = iObj.intValue();                              // 언박싱
double num2 = dObj.doubleValue();                  // 언박싱

. . . .

// 래퍼 인스턴스 값의 증가 방법
iObj = new Integer(iObj.intValue() + 10);
dObj = new Double(dObj.doubleValue() + 1.2);

. . . .
}







언박싱 메소드의 이름

  • Boolean                         public boolean booleanValue()
  • Character                      public char charValue()
  • Integer                          public int intValue()
  • Long                             public long longValue()
  • Double                          public double doubleValue()







오토 박싱과 오토 언박싱


class AutoBoxingUnboxing {

public static void main (String[] args) {


Integer iObj = 10;                        // 오토 박싱 진행

Double dObj = 3.14;                       // 오토 박싱 진행


. . . .


인스턴스가 와야 할 위치에 기본 자료형 값이 오면 오토 박싱 진행



int num1 = iObj;                        // 오토 언박싱 진행

double num2 = dObj;                    // 오토 언박싱 진행


. . . .


기본 자료형 값이 와야 할 위치에 인스턴스가 오면 오토 언박싱 진행

}

}









오토 박싱, 오토 언박싱의 또 다른 예


public static void main(String[] args) {


Integer num = 10;


num ++;                            // new Integer(num.intValue() +1); - 명확하게 쓰기위해 이렇게 굳이 쓰는 개발자도 있음!!


. . . .                            오토 박싱과 오토 언박싱 동시에 진행!


num += 3;                        // new Integer(num.intValue() +3);


. . . .                            오토 박싱과 오토 언박싱 동시에 진행!


int r = num + 5;                // 오토 언박싱 진행

Integer rObj = num - 5;            // 오토 언박싱 진행


. . . .

}








Number 클래스


java.lang.Number


모든 래퍼 클래스가 상속하는 클래스




java.lang.Number에 정의된 추상 메소드들


public abstract int intValue()


public abstract long longValue()


public abstract double doubleValue()


-> 즉 래퍼 인스턴스에 저장된 값을 원하는 형의 기본 자료형 값으로 반환할 수 있다.








Number 클래스의 추상 메소드 호출의 예


public static void main(String[] args) {


Integer num1 = new Integer(29);

System.out.println(num1.intValue());                // int형 값으로 반환

System.out.println(num1.doubleValue());            // double형 값으로 반환


Doubl num2 = new Double(3.14);

System.out.println(num2.intValue());                // int형 값으로 반환

System.out.println(num2.doubleValue());            // double형 값으로 반환


}










래퍼 클래스의 다양한 static 메소드들


public static void main(String[] args) {


// 클래스 메소드를 통한 인스턴스 생성 방법 두 가지

Integer n1 = Integer.valueOf(5);                    // 숫자 기반 Integer 인스턴스 생성 - new Integer(5); 랑 같음!!

Integer n2 = Integer.valueOf("1024");                // 문자열 기반 Integer 인스턴스 생성


// 대소 비교와 합을 계산하는 클래스 메소드

System.out.println( "큰 수 : " + Integer.max(n1, n2) );

System.out.println( "작은 수 : " + Integer.min(n1, n2) );

System.out.println( "합 : " + Integer.sum(n1, n2) );

System.out.println();


// 정수에 대한 2진, 8진, 16진수 표현 결과를 반환하는 클래스 메소드

System.out.println( "12의 2진 표현 : " + Integer.toBinaryString(12) );

System.out.println( "12의 8진 표현 : " + Integer.toOctalString(12) );

System.out.println( "12의 16진 표현 : " + Integer.toHexString(12) );

}






반응형