Java | Wrapper Class란?

바다·2024년 4월 22일
0

Java

목록 보기
11/18
post-thumbnail

Wrapper Class가 무엇일까!?

아무 생각 없이 ArrayList나 Map을 선언할 때 사용했던
Integer, Long 등등...

그냥 이렇게 사용하는 건가보다~ 하고만 있었지
이걸 왜 써야 하는지, 왜 필요한지는 생각해보질 않았다!

내일배움캠프 Java 문법 강의를 들으며, Wrapper Class에 대해서 간단하게 이야기해주셔서 이 부분에 대해서 더 알아보고 싶다는 생각을 하게 됐고! 그래서 쓱 정리해보려고 한다 :)


Java의 자료형

자바의 자료형은 크게 기본형과 참조형이 있다!

기본형 변수(Primitive Type)
- char, int, float, double, boolean 등
- byte 단위로 단일 공간에 자료를 저장

참조형 변수(Reference Type)
- String, Object, Array, List...
- class, inteface 등
- 단일 공간에 담을 수 없는 값들

- Heap에 자료를 저장해두고 그 주소를 '참조'해서 사용

Wrapper class

프로그래밍을 하다 보면 기본형 변수를 객체로 다루기 위해서 사용하는 클래스들을 Wrapper Class라고 한다

"기본형 변수를 한번 랩핑(감싸주는) 변수"

종류

기본 타입래퍼 클래스
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charChracter
booleanBoolean

-> int, char 제외하고 첫글자를 대문자로 바꾸면 됨!

int num = 5;				//기본형 선언
Integer IntegerNum = num;	//Wrapper Class로 감싸기

Wrapper Class를 사용하는 이유!?

  1. 래퍼 클래스는 기본 데이터 타입을 Object로 변환할 수 있다. 메소드에 전달된 인수를 수정하려는 경우 오브젝트가 필요하다 (기본형 변수의 값에 의한 변경 Object는 참조에 의한 변경이기 때문)
  2. Java.util 패키지의 클래스는 객체만 처리하므로 Wrapper class를 사용해야 한다
  3. ArrayList 등과 같은 Collection 프레임 워크의 데이터 구조는 기본형 변수가 아닌 객체만 저장하게 되고 Wrapper Class를 사용하여 Boxing - UnBoxing 이 일어난다

Boxing & UnBoxing

래퍼 클래스는 값을 포장하여 객체로 만드는 것이라고 했다.
하지만, 값을 더하거나 변환시켜야 할 필요가 생겼을 경우 포장을 다시 뜯을 필요가 있다.
이런 과정은 Boxing과 UnBoxing 이라고 한다.

  • Boxing : 기본 타입의 데이터 -> 래퍼 클래스의 인스턴스로 변환
  • UnBoxing : 래퍼 클래스의 인스턴스에 저장된 값 -> 기본 타입의 데이터로 변환
//Boxing
Integer num = new Integer(10);

//UnBoxing
int n = num.intValue();

//재포장
n = n + 100;
num = new Integer(n);

Wrapper 타입의 클래스 언박싱 메소드
👉 (클래스 타입)Value()
ex) intValue(), longValue(), doubleValue()

AutoBoxing & AutoUnBoxing

JDK 1.5부터는 자바 컴파일러가 박싱과 언박싱을 자동으로 처리해준다!

//기존의 Boxing, UnBoxing
Integer num = new Integer(20);
int n = num.intValue();

//AutoBoxing, AutoUnBoxing
Integer num = 20;
int n = num;

Wrapper Class 연산

Wrapper Class는 연산을 위한 클래스가 아니기 때문에, AutoBoxing과 AutoUnBoxing을 이용해서 처리해야 한다!

동등 비교

Wrapper Class로 객체 값을 비교하는 것을 조심해야 한다

Integer num1 = 100;
Integer num2 = 100;

num1 == num2; 	//false

'==' 연산자는 값을 비교하는 것이 아닌, 객체의 주소값을 비교하는 것이기 때문에 같은 100의 값을 저장해도 false가 나온다!

equals() 사용하기!

Integer num1 = 100;
Integer num2 = 200;
Integer num3 = 100;

num1 == num3 		//false
num1.equals(num3)	//true

래퍼 클래스와 기본형 변수를 비교할 때는?

자동으로 오토박싱과 오토언박싱을 해주기 때문에 == 연산과 equals 연산 모두 가능하다!

profile
ᴘʜɪʟɪᴘᴘɪᴀɴs 3:14

0개의 댓글