[Java ☕️] Wrapper 클래스 :: 기본형을 감싸는 클래스

ConewLog·2024년 8월 5일
0

Java ☕️

목록 보기
4/7

☕️ 김영한의 실전 자바 - 중급 1편 을 수강하며 학습한 내용을 저만의 언어로 정리하고 있습니다.


1. Wrapper 클래스란?

기본형(primitive type)을 객체로 사용할 수 있도록 하기 위해 존재하는 클래스이다.

Primitive typeWrapper class
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

왜 필요한가?

기본형을 객체로 바꿔줌으로써

  • 객체지향적인 프로그래밍이 가능해진다.

    • 유용한 메서드를 사용할 수 있게 된다.
    • 객체 참조가 필요한 컬렉션 프레임워크를 사용할 수 있게 된다.
    • 제네릭을 사용할 수 있게 된다.
  • null 상태를 표현할 수 있게 된다.

    • 기본형은 항상 값을 가져야 하므로 데이터가 존재하지 않는 상태를 표현하기가 어려웠다.
      • 기본형 지역변수는 항상 값을 초기화해야 한다.
      • 기본형 멤버변수는 초기화하지 않을 시 기본값으로 자동으로 초기화된다.

2. Wrapper 클래스 사용 방법

Boxing 📦

기본형을 Wrapper 클래스 객체로 만드는 것을 Boxing이라고 한다.
(Integer라는 박스에 int를 넣는다!)

Integer integer1 = new Integer(10); // Deperecated!!!
Integer integer2 = Integer.valueOf(10);
Integer integer3 = Integer.valueOf("10");
  • new 연산자를 사용한 Boxing은 앞으로 삭제될 기능이다.
  • 따라서, .valueOf()를 이용해 Boxing하도록 한다.
    • Byte, Short, Integer, Long, Character.valueOf() 는 캐시를 이용해 성능 최적화를 가능하게 한다.
    • 자주 사용되는 범위의 클래스를 미리 생성하고, 그 객체를 반환하는 식으로 최적화한다. 해당 범위의 값이 없을 때는 new 연산자를 사용해 새로운 객체를 만들어 반환한다.

Unboxing 🗃️

Wrapper 클래스 객체였던 것을 다시 기본형으로 바꾸는 것을 Unboxing이라고 한다.
(Integer라는 박스에서 int를 꺼낸다!)

Integer integer1 = Integer.valueOf(10); // boxing
int int1 = integer1.intValue(); // unboxing

Boolean boolean1 = Boolean.valueOf(true); // boxing
boolean bool = boolean1.booleanValue(); // unboxing
  • .xxxValue() 를 이용해 Unboxing 할 수 있다.

비교

래퍼 클래스는 equals()로 비교한다.

  • 객체의 == 비교는 참조값을 비교하므로, 내부 값을 비교하기 위해서는 equals()로 비교한다.
  • Wrapper 클래스 내 이미 equals()가 재정의되어있다.

3. AutoBoxing, AutoUnboxing

개발 중 기본형과 래퍼 클래스간의 변환 과정이 잦기 때문에
자바 1.5 버전부터 Auto Boxing, Auto Unboxing이 가능하다.

int value = 10;
Integer boxed = value; // Auto Boxing
int uboxed = boxed; // Auto Unboxing

4. ParseOOO vs. valueOfOOO

Integer integer = Integer.valueOf("100");
int i = Integer.parseInt("100");
  • valueOf(String s)는 Wrapper 클래스 객체를 반환한다.
    • valueOf(int i)도 가능하다.
  • parseInt(String s)는 문자열 sint형으로 바꾼 것을 반환한다.

참고 사이트

profile
코뉴로그

0개의 댓글