cbw1030
기록하는 공간
cbw1030
전체 방문자
오늘
어제
  • 전체보기 (101)
    • Programming (99)
      • Java (19)
      • Servlet (10)
      • Spring Framework (13)
      • Javascript (22)
      • AWS (2)
      • 네트워크 (8)
      • 데이터베이스 (13)
      • 리눅스 (3)
      • 블록체인 (7)
      • 용어 정리 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 크롤링
  • react
  • 브라이틱스
  • javascript
  • beautifulsoup
  • web
  • 삼성SDS
  • Brightics Studio
  • 인공지능
  • Brightics AI
  • 데이터 사이언스
  • 브라이틱스 스튜디오
  • 차원축소
  • 머신러닝
  • 브라이틱스 튜토리얼
  • 데이터분석
  • 브라이틱스 스튜디오 사용법
  • 생활코딩
  • Brightics
  • 삼성SDS 브라이틱스

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
cbw1030

기록하는 공간

[Java] 래퍼 클래스와 박싱, 언박싱에 대해 알아보자
Programming/Java

[Java] 래퍼 클래스와 박싱, 언박싱에 대해 알아보자

2020. 10. 28. 22:45
반응형

안녕하세요! 이번 포스팅은 래퍼클래스, 박싱, 언박싱에 대해 알아보겠습니다.

 

1. 래퍼 클래스(Wrapper Class)

List<String> list = new ArrayList<>();

위의 자바 코드를 보면 < > 제네릭을 사용하고 있습니다.

제네릭 타입에는 원하는 자료형을 지정할 수 있는데 기본 자료형인 원시형은 넣지 못합니다.

제네릭 타입에 넣기 위해서는 원시형(기본형)을 담아낼 수 있는 클래스를 넣어야 합니다.

즉, 원시형(Primitive Type)을 객체화한 것을 넣어야 하는데 이를 래퍼 클래스(Wrapper Class)라고 합니다.

 

래퍼 클래스의 종류는 다음과 같습니다.

Boolean
Character
Double
Float
Integer
Long
Short
Byte

Boolean 래퍼 클래스는 boolean 자료형을 객체화한 것이고 나머지도 이와 동일합니다.

* 래퍼 클래스 중에서 Character 클래스와 Integer 클래스만이 자신의 기본 타입과 이름이 다릅니다.

 

2. 박싱(Boxing)

박싱(Boxing)은 원시형(Primitive Type)을 래퍼 클래스로 바꾸는 것을 의미합니다. 

Integer x = new Integer(3); // 박싱

위의 소스코드는 기본형 3을 래퍼 클래스로 박싱한 상태입니다.

그런데 이렇게도 가능합니다.

Integer x = 3; // 오토 박싱

이러한 상태를 오토 박싱(Auto-Boxing)이라 합니다. 컴파일러가 자동으로 정수 3을 new Integer(3)으로 바꿔주고 있습니다.

오토 박싱을 사용하면 new 키워드를 사용하는 번거로움을 줄일 수 있기 때문에 만약 박싱이 필요하다면 오토 박싱을 권장합니다. 몇 자라도 소스코드를 줄이는게 좋잖아요?^^

 

3. 언박싱(UnBoxing)

래퍼 클래스를 원시형(Primitive Type)으로 바꾸는 것을 의미합니다.

Integer x = new Integer(3); // 박싱
int x2 = x.intValue(); // 언박싱

래퍼 클래스를 intValue( ) 메서드를 사용하여 기본형으로 변환하고 x2라는 기본형 변수에 대입했습니다.

이를 언박싱이라 합니다. 

intValue( )처럼 Value 앞에 기본 자료형을 붙여주면 언박싱이 가능합니다. ex) booleanValue( );

 

그리고 오토 박싱과 마찬가지로 오토 언박싱 또한 존재합니다.

Integer x = new Integer(3); // 박싱
int x2 = x; // 오토 언박싱

내부적으로 컴파일러가 자동으로 언박싱을 해주고 있는 상태입니다.

 


다음과 같은 소스코드가 있습니다. 어느 것이 메모리를 더 많이 차지할까요?

Integer x = 3; // 1번
int x = 3;     // 2번

1번 소스코드가 메모리를 더 많이 차지합니다. 오토 박싱이지만 내부적으로 new Integer(3)을 생성하기 때문입니다.

 

오늘 포스팅의 결론은 기본형(원시형)과 래퍼 클래스를 둘 다 사용할 수 있는 경우라면 소스코드 2번처럼 기본형을 사용하는게 낫습니다.

래퍼 클래스는 꼭 필요한 컬렉션에서 사용하면 될 것 같습니다.

반응형
저작자표시 (새창열림)

'Programming > Java' 카테고리의 다른 글

[Java] 제네릭(Generic) 타입이란?  (0) 2021.06.14
[Java] JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가  (0) 2020.11.10
[Java] 제네릭(Generic)을 예시를 통해 알아보자  (0) 2020.10.24
[Java] 인터페이스에 대해 알아보자  (0) 2020.10.17
[Java] 쓰레드(Thread)란 무엇일까? - 기초  (0) 2020.10.07
    'Programming/Java' 카테고리의 다른 글
    • [Java] 제네릭(Generic) 타입이란?
    • [Java] JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가
    • [Java] 제네릭(Generic)을 예시를 통해 알아보자
    • [Java] 인터페이스에 대해 알아보자
    cbw1030
    cbw1030

    티스토리툴바