[Java] wrapper 클래스

자이로 체펠리·2021년 9월 2일
0

wrapper class?

oop에선 모든 데이터가 객체로 이뤄져야 하지만 자바는 8개의 primitive 데이터 형이 존재한다.
그래서 자바는 완전한 oop 언어가 아니라곤 하지만
모든 데이터가 객체로 이뤄져있는것보다. 성능적으로 우수하다.
하지만 primitive형 데이터를 클래스 처럼 사용하면 편할 때가 있다. 그럴 때 wrapper class를 사용한다.
ex) 알고리즘 문제를 풀면 null인지 체크해야 할 때가 있는데 primitive 데이터는 모두 초기값을가지고 있다. 예시 : int 는 0이다.

종류

8개의 primitive 데이터 형은 모두 wrapper class를 갖는다.

대문자로 시작하고 단어의 풀랭스를 사용한다.

대표적으로 Interger class를 살펴보면

public final class Integer extends Numbers implements Comparable{
	....
    private int value;
    ....
}

각 primitive 값을 저장하는 field가 있고, Comparable을 구현 한 것을 알 수 있다.
Comparable을 구현한 이유는 String을 단순히 연산자를 통해 비교할 수 없는 것과 이유가 같다. 왜냐하면 클래스는 연산시 주소값 그 자체가 들어가기 때문이다.

특징

  1. equlas 오버라이딩 => value 비교 가능

  2. 비교시 compareTo를 쓴다.

  3. toString 오버라이딩

  4. MAX_VALUE, MIN_VALUE, SIZE, BYTE, TYPE등 static 상수를 갖는다.

    Number class


    넘 버클래스는 오브젝트에서 나왔으며 모든 숫자 관련 wrapper class가 상속한다.
    number 클래스를 상속하면 value를 Number 내 다른 class로 변환할 수 있다.
    ex) byte byteValue();

    * 문자열 -> 숫자

    String -> privitiveString -> wrapper
    wrapperclase.parsePrimitive()wrapper.valueOf()

    예시 : Integer.parseInt();

    * 오토 박싱 & 언박싱

    jdk 1.5 이전까지는 primitive와 reference 간의 연산이 불가능 했지만 이제는 가능해 졌다(덧셈만).
    이는 컴파일러가 자동으로 코드를 변역해 주기 때문이다.
    => 이를 언박싱이라고 부른다.

    primitive -> wrapper언박싱
    wrapper -> primitive오토박싱
profile
"경의를 표해라. 경의를 갖고 회전의 다음 단계로 나아가는 거다…… [LESSON 4] 다."

0개의 댓글