본문 바로가기

복습

[Java 복습] 래퍼(wrapper) 클래스

래퍼 클래스

  • 기본형 값을 감싸는 클래스
  • 8개의 기본형을 객체로 다뤄야할 때 사용하는 클래스

 

객체지향언어 => 모든 것이 객체

성능 때문에 기본형을 만들었다!!

public class Ex1 {

    public static void main(String[] args) {

        Integer i = new Integer(100);
        Integer i2 = new Integer(100);
        //Integer i3 = Integer.valueOf(100);

        System.out.println("i1 == i2 ?" + (i == i2));
        System.out.println("i.equals(i2) ? " + i.equals(i2));
        System.out.println("i.compareTo(i2) ? " + i.compareTo(i2)); // 같으면: 0, 작으면: 양수, 크면: 음수, 정렬 사용
        System.out.println("i.toString() = " + i.toString()); // "100"

        System.out.println("MAX_VALUE = " + Integer.MAX_VALUE);
        System.out.println("MIN_VALUE = " + Integer.MIN_VALUE);
        System.out.println("SIZE = " + Integer.SIZE + " bit");
        System.out.println("BYTES = " + Integer.BYTES + " byte");
        System.out.println("TYPE = " + Integer.TYPE);
    }
}
i1 == i2 ?false
i.equals(i2) ? true
i.compareTo(i2) ? 0
i.toString() = 100
MAX_VALUE = 2147483647
MIN_VALUE = -2147483648
SIZE = 32 bit
BYTES = 4 byte
TYPE = int

 

 

Number 클래스

  • 모든 숫자 래퍼 클래스의 조상
  • long 보다 큰 정수를 다룰 때 BigInteger 이라는 것이 있다.
  • double 보다 크고 더 정확한 실수를 다룰 때 BigDecimal 이라는 것이 있다.

 

 

문자열을 숫자로 변환하기

 

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

int i = new Integer("100").intValue(); // floatValue, longValue ...
int i2 = Interger.parseInt("100"); // 주로 이 방법을 많이 사용
Integer i3 = Integer.valueOf("100");

Integer.parseInt("100"); : 문자열 => 기본형
Integer.valueOf("100"); : 문자열 => 래퍼 클래스
String str = b.toString(); : 래퍼 클래스 => 문자열

 

 

N진법의 문자열을 숫자로 변환하는 방법

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

 

 

 

오토박싱 & 언박싱

JDk 1.5 이전에는 기본형과 참조형간의 연산이 불가능

int i = 5;
Integer iObj = new Integer(7);

int sum = i + iObj; // 에러(JDK 1.5 이전)
// int sum = i + iObj.intValue(); //  기본형으로 변환(Integer -> int), 컴파일 후의 코드

 

기본형의 값을 객체로 자동변환하는 것을 오토박싱, 그 반대는 언박싱

public class Ex3 {

    public static void main(String[] args) {

        ArrayList<Integer> list = new ArrayList<Integer>();
        list.add(new Integer(100)); // list에는 객체만 추가 가능
        list.add(100); // JDK 1.5 전에는 에러(오토박싱)

        //Integer i = list.get(0); // list에 저장된 첫 번째 객체를 꺼낸다.
        //int i = list.get(0).intValue(); // intValue()로 Integer를 int로 반환
        int i = list.get(0); // intValue()로 Integer를 int로 반환(언박싱)
    }
}

 

오토박싱(Auto-boxing)

  • int => Integer

 

언박싱(Unboxing)

  • Integer => int

 

public class Ex4 {

    public static void main(String[] args) {

        int i = 0;

        // 기본형을 참조형으로 형변환(형변환 생략가능)
        Integer intg = (Integer) i;  //Integer intg = Integer.valueOf(i)
        Object obj = (Object) i; //Object obj = (Object) Integer.valueOf(i);

        Long lng = 100L; // Long lng = new Long(100L); 삭제 예정 => Long lng = Long.valueOf(100L);

       int i2 = intg + 10; // 참조형과 기본형간의 연산 가능
       long l = intg + lng; // 참조형 간의 덧셈도 가능

       Integer intg2 = new Integer(20);
       int i3 = (int)intg2; // 참조형을 기본형으로 형변환도 가능(형변환 생략가능)
    }
}