[JAVA] Wrapper 클래스

Coastby·2022년 10월 3일
0

LIKELION Back-End School

목록 보기
29/61

객체지향 개념에서 모든 것은 객체로 다루어진다. 그러나 자바에서 8개의 기본형은 객체로 다루지 않는다.
기본형 (primative type) 변수도 객체로 다뤄야 하는 경우가 있다. (예를 들어, 매개 변수로 객체를 요구할 때, 기본형 값이 아닌 객체로 저장해야할 때, 객체간의 비교가 필요할 때 등은 기본형 값들을 객체로 변환하여 작업을 수행해야 한다.)

이 때 사용되는 것이 wrapper 클래스이다. 8개의 기본형을 대체하는 8개의 래퍼 클래스가 있다. 래퍼 클래스의 생성자는 매개변수로 문자열이나 각 자료형의 값들을 인자로 받는다.

  • equals() : 오버라이딩 되어 있어서 주소값이 아닌 객체가 가지고 있는 값을 비교한다.
  • toString() : 객체가 가지고 있는 값을 문자열로 변환한다.
  • compareTo() : Integer 객체에 비교연산자를 사용할 수는 없고, 메서드를 이용한다.
  • static 상수 : MAX_VALUE, MIN_VALUE, SIZE, BYTES, TYPE

○ Number 클래스

추상클래스로 내부적으로 숫자를 멤버변수로 갖는 래퍼 클래스들의 조상이다.

BigInteger : long으로도 다룰 수 없는 큰 범위의 정수
BidDecimal : double로도 다룰 수 없는 큰 범위의 부동 소수점수

문자열을 숫자로 변환하기

JDK1.5부터 '오토박싱' 기능으로 반환값이 기본형일 때와 래퍼 클래스일 때의 차이가 없어졌다. 성능은 valueOf()가 족므 더 느리다.

int i = Integer.parseInt("100");
int i = Integer.valueOf("100");

○ 오토박싱 & 언박싱

오토박싱 : 기본형 값을 래퍼 클래스의 객체로 자동 변환해주는 것
언박싱 : 래퍼 인스턴스를 기본 자료형 값으로 변환하는 것

이전에는 기본형과 참조형 간의 연산이 불가능해서 래퍼 클래스로 기본형을 객체로 만들어서 연산해야 했다.
하지만 JDK1.5 이후 컴파일러가 자동으로 변환하는 코드를 넣어주어 기본형과 참조형 간의 연산이 가능해졌다.

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

int sum = i + iObj;
//컴파일 후
//int sum = i + iObj.intValue();

이 외에도 내부적으로 객체 배열을 가지고 있는 Vector 클래스나 ArrayList 클래스에 기본형 값을 저장해야할 때나 형변환이 필요할 때도 컴파일러가 자동적으로 코드를 추가해준다.
ArrayList에 숫자를 저장하거나 꺼낼 때, 기본형 값을 래퍼 클래스의 객체로 변환하지 않아도 되므로 편리하다.

ArrayList<Integer> list = new ArrayList<Integer>();
list.add(10);					//오토박싱. 10 → new Integer(10)

int value = list.get(0);		//언박싱. new Integer(10) → 10

○ Integer의 함수

System.out.println(Integer.max(3, 2));		//3
System.out.println(Integer.min(3, 2));		//2
System.out.println(Integer.sum(3, 2));		//5

//2진 표현
System.out.println(Integer.toBinaryString(10));		//1010
//문자열을 숫자로
System.out.println(Integer.valueOf("123"));			//123
//정수의 최대값
System.out.println(Integer.MAX_VALUE);				//2147483647
profile
훈이야 화이팅

0개의 댓글