[JAVA] 래퍼 클래스(Wrapper Class)란?

2024. 5. 31. 16:53·JAVA
목차
  1. 1. 래퍼 클래스란?
  2. 2. 래퍼 클래스가 생긴 이유?
  3. 3. 박싱(Boxing) 언박싱(Unboxing) 
  4. 4. 래퍼 클래스의 비교
  5. 5. 오토 박싱(Auto-Boxing) 오토 언박싱(Auto-Unboxing)
반응형

1. 래퍼 클래스란?

자바에서 자료형은 기본형(Primitive Type)과 참조형(Reference Type)으로 나누어집니다. 프로그래밍을 하다 기본형의 데이터를 객체로 표현해야 하는 경우가 생기는데 이럴 때 기본형을 객체로 다루기 위해 사용하는 클래스를 래퍼클래스(Wrapper Class)라고 합니다.  지금부터 래퍼클래스에 대해 자세히 알아봅시다.

 

2. 래퍼 클래스가 생긴 이유?

기본형(Primitive Type)은 객체가 아니기 때문에 다음과 같은 한계점이 존재합니다.

  • 객체가 아니다 : 객체가 아니기 때문에 객체지향의 장점을 살릴 수 없다(메소드 제공 불가)
  • null 값을 가질 수 없다 : 기본형은 항상 값을 가지기 때문에 null 표현을 할 수 없다.

이런 단점을 해결하기 위해 기본형을 객체로 감싸서 더 편리하게 사용하도록 자바는 기본형에 대응 하는 래퍼 클래스를 기본으로 제공합니다.

byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

자바에서 제공하는 래퍼클래스

 

래퍼 클래스는 기본형 변수를 편리하게 사용하도록 다양한 메서드를 제공합니다. 또한 객체의 경우 데이터가 없다는 null을 표현할 수 있을 뿐만아니라 컬렉션 프레임워크나 제너릭 등에서 유용하게 사용할 수 있습니다.

 

3. 박싱(Boxing) 언박싱(Unboxing) 

기본형을 래퍼 클래스로 변경하는 것을 물건에 넣은 것 같다고 해서 박싱(Boxing)이라 표현하고 래퍼 클래스에 있는 기본형 값을 다시 꺼내는 과정을 언박싱(Unboxing)이라 합니다.

Integer num = new Integer(10);// 박싱(boxing)
int n = num.intValue(); // 언박싱(unboxing)

 

intValue() : 래퍼 클래스에 들어있는 기본형 값을 꺼내는 메서드

 

4. 래퍼 클래스의 비교

래퍼 클래스는 객체이기 때문에 == 비교를 하면 인스턴스의 참조 값을 비교하기 때문에 값을 비교하려면 equals()를 사용해야 합니다.

Integer num1 = new Integer(10);
Integer num2 = new Integer(10);

System.out.println(num1 == num2); // false
System.out.println(num1.equals(num2)); // true

 

5. 오토 박싱(Auto-Boxing) 오토 언박싱(Auto-Unboxing)

오토 박싱과 오토 언박싱은 컴파일러가 대신 valueOf, xxxValue()등을 추가해주는 기능으로 기본형과 래퍼 클래스를 서로 편리하게 변환할 수 있습니다.

int num = 10;

Integer boxedNum = num; // Auto Boxing  == Integer.valueOf(num);
int unboxedNum = boxedNum; // Auto Unboxing  == boxedNum.intValue();

 

 

+래퍼 클래스의 성능

래퍼 클래스는 기본형보다 다양한 기능을 제공합니다. 하지만 객체이기 때문에 메타데이터를 포함으로 기본형보다 더 많은 메모리를 사용하게 됩니다.

public static void main(String[] args){
	long sum = 0L;
	long startTime = System.currentTimeMillis();
	
	for(int i = 0; i < 1000000; i++) {
		sum += i;
	}
    
	long endTime = System.currentTimeMillis();
	System.out.print(endTime - startTime +"ms");
}
public static void main(String[] args){
	Long sum = 0L;
	long startTime = System.currentTimeMillis();
	
	for(int i = 0; i < 1000000; i++) {
		sum += i; //오토박싱 발생
	}
    
	long endTime = System.currentTimeMillis();
	System.out.print(endTime - startTime +"ms");
}

 

 

기본형 계산 결과

 

래퍼클래스 계산 결과

 

(엄청난 양의 연산을 연속해서 수행하는 경우라면 기본형을 사용하는 최적화를 고려하고 그것이 아니라면 자바에서 제공하는 래퍼 클래스를 유용하게 잘 사용하자!)

반응형

'JAVA' 카테고리의 다른 글

[JAVA] 가비지 컬렉션이란? (Garbage Collection) 1편  (0) 2024.06.04
[JAVA] Call by Value, Call by Reference  (0) 2024.06.03
[JAVA] ENUM 이란?  (0) 2024.05.28
[JAVA] JVM(Java Virtual Machine)  (0) 2023.07.11
[JAVA] String이 불변(immutable)인 이유?  (0) 2023.04.11
  1. 1. 래퍼 클래스란?
  2. 2. 래퍼 클래스가 생긴 이유?
  3. 3. 박싱(Boxing) 언박싱(Unboxing) 
  4. 4. 래퍼 클래스의 비교
  5. 5. 오토 박싱(Auto-Boxing) 오토 언박싱(Auto-Unboxing)
'JAVA' 카테고리의 다른 글
  • [JAVA] 가비지 컬렉션이란? (Garbage Collection) 1편
  • [JAVA] Call by Value, Call by Reference
  • [JAVA] ENUM 이란?
  • [JAVA] JVM(Java Virtual Machine)
여포개발자
여포개발자
여포개발자
어제보다 오늘 더
여포개발자
전체
오늘
어제
  • 분류 전체보기 (141)
    • Backend (41)
      • 프로젝트 (18)
      • MSA 전환 (10)
      • spring (6)
      • JPA (7)
    • JAVA (11)
    • Kotlin 정리 (11)
    • 알고리즘 (59)
      • 프로그래머스 LV0 (5)
      • 프로그래머스 LV1 (12)
      • 프로그래머스 LV2 (17)
      • 프로그래머스 LV3 (8)
      • 백준 (14)
      • 소프티어 (3)
    • 네트워크 (3)
    • Docker (3)
    • SQL (5)
    • Kafka (6)
    • 일상 (1)
    • .NET (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 프로그래머스
  • #JAVA #프로그래머스
  • TroubleShooting #JPA
  • MSA
  • 자바 #백준
  • Kotlin
  • docker
  • JPA
  • #JAVA #프로그래머스 #LV1 #모두화이팅
  • 프로젝트
  • Spring
  • 오블완
  • 프로그래머스LV1
  • #프로그래머스
  • java
  • HTTP
  • JAVA #프로그래머스 #LV0
  • 백준
  • docker #MySQL
  • #JPA #JAVA
  • 모니터링
  • #JAVA #프로그래머스 #LV1
  • 네트워크
  • #프로그래머스 #자바
  • Kotiln
  • 티스토리챌린지

최근 댓글

최근 글

반응형
hELLO· Designed By정상우.v4.5.2
여포개발자
[JAVA] 래퍼 클래스(Wrapper Class)란?
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.