자바/자바 입문 공부일지

자바 기초 공부 일지 31. 래퍼 클래스, Number 클래스

Tomitom 2022. 11. 1. 11:59
반응형

 

 

● 래퍼 클래스 

 

class UseWrapperClass {
   public static void showData(Object obj) {
      System.out.println(obj);
   }

 

상기의 코드를 보면 클래스 안에 인스턴스를 요구하는 메소드가 있습니다. 

이 메소드의 인수 타입 중 Object 타입은 int, float 등 과는 다른 타입이기 때문에 

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

 

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)

 

 

래퍼클래스는 감싸는 용도로 쓰는데 참조 값에 참조를 시킬 때 필요하기 때문입니다. 

기본 자료를 래퍼 인스턴스 안에 넣는 것을 Boxing 이라고 하고, 

래퍼 인스턴스에서 꺼내서 기본 자료형으로 단독 사용하는 것을 Unboxing 이라고 합니다.

 

출처 : 윤성우의 열혈 자바 프로그래밍

 

 

언박싱 메소드의 이름은 다음과 같습니다. 

 

Boolean   public boolean booleanValue()

Character   public char charValue()

Integer   public int intValue()

Long   public long longValue()

Double   public double doubleValue()

 

 

아래의 예제로 확인해볼게요. 

 

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);   // 이 경우에 맨 첫 블록에 있는 iObj의 값은 가비지가 됩니다. 

   dObj = new Double(dObj.doubleValue() + 1.2);

   . . . .

}

 

박싱과 언박싱은 자동으로 진행될 수 있는데, 자료의 입력 위치에 따라 달라집니다. 

 

class AutoBoxingUnboxing {

   public static void main(String[] args) {

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

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

      . . . .

 

인스턴스가 와야할 위치에 기본 자료형이 오면 오토 박싱이 진행되는 것이고,     

 

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

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

      . . . .

   }

}

 

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

 

 

● Number 클래스 

모든 래퍼 클래스가 상속하는 클래스 입니다. 

java.lang.Number

 

언박싱 메소드는 추상 메소드로 정의를 하고 있습니다. 

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

   public abstract int intValue()

   public abstract long longValue()

   public abstract double doubleValue()

     → 즉 래퍼 인스턴스에 저장된 값을 원하는 형의 기본 자료형 값으로 반환(언박싱) 할 수 있습니다. 

(주어진 값을 어떻게 언박싱 하는가에 따라 강제로 형 변환이 가능합니다.) 

 

결국 래퍼 클래스는 참조 자료형과 기본 자료형 간의 형 변환이 안 되지만

기본 자료형을 인스턴스처럼 쓸 수 있게 해주는 역할을 합니다. 

 

아래의 예제를 통해서 확인해볼게요. 

 

package day17;

public class WrapperClassMethod {

	public static void main(String[] args) {

		 Integer n1 = Integer.valueOf(5);   // 정수 5를 정수형으로 언박싱 
	        Integer n2 = Integer.valueOf("1024");   // 문자열 1024를 정수형으로 언박싱 
	        
	        System.out.println("큰 수: " + Integer.max(n1, n2));    // 기본자료들을 참조함 
	        System.out.println("작은 수: " + Integer.min(n1, n2));
	        System.out.println("합: " + Integer.sum(n1, n2));
	        System.out.println();
	        
	        System.out.println("12의 2진 표현: " + Integer.toBinaryString(12));
	        System.out.println("12의 8진 표현: " + Integer.toOctalString(12));
	        System.out.println("12의 16진 표현: " + Integer.toHexString(12));
	}

}

 

 

 

 

반응형