자료형과 오토박싱과 언박싱 - 자바 개발자가 알아야 할 필수 개념

상윤·2024년 9월 2일
0

BackEnd

목록 보기
8/11

변수의 타입

자바에서는 모든 변수에 타입이 있고, 타입에 따라 저장할 수 있는 값의 종류와 범위가 달라진다.

기본 타입 (원시: primitive type)

값의 종류기본 타입메모리 사용 크기저장되는 값의 범위
정수byte1byte-128 ~ 127
정수, 문자char2byte0 ~ 65535
정수short2byte-32,768 ~ 32,767
정수int4byte-2,147,483,648 ~ 2,147,483,647
정수long8byte–9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
실수float4byte3.4E+/-38(7개의 자릿수)
실수double8byte1.7E+/-308(15개의 자릿수)
논리형boolean1bytetrue, false

참조 자료형

참조 자료형설명
String문자열을 저장하는 데 사용되는 클래스
ArrayList동적 배열을 나타내는 클래스
HashMap키-값 쌍을 저장하는 데 사용되는 클래스
HashSet고유한 요소를 저장하는 데 사용되는 클래스
LinkedList연결 리스트를 나타내는 클래스
Queue큐를 나타내는 인터페이스
Stack스택을 나타내는 클래스

java.lang.String 클래스
String 인스턴스는 한 번 생성되면 그 값을 읽기만 할 수 있고, 변경할 수는 없다.
이러한 객체를 자바에서는 불변 객체(immutable object)라고 한다.
즉, 자바에서 덧셈(+) 연산자를 이용하여 문자열 결합을 수행하면, 기존 문자열의 내용이 변경되는 것이 아니라 내용이 합쳐진 새로운 String 인스턴스가 생성되는 것.

스트링 클래스 선언

리터럴 선언
String text = "text";

new 연산자를 사용한 선언
String text = new String("text");

리터럴로 선언된 String 클래스는 선언시 객체가 String constant pool 에 저장,
new 는 Heap 영역에 저장

기본 타입 변수 VS 참조 변수 차이점
기본 타입의 경우 실제 값을 변수 안에 저장하지만, 참조 자료형의 경우 메모리의 주소값을 값으로 갖는다. 즉 참조 변수의 경우 주소값을 참조한다는 뜻에서 참조 자료형이라고 부른다.

Wrapper Class

기본 자료형을 ‘객체(Object)’로 다루기 위해서 비 객체를 객체화 시키는 클래스로 “기본타입의 객체화”를 의미. 즉 기본 자료형을 클래스로 감싸는 것

분류기본자료형 타입(Primitive Type)래퍼 클래스(Wrapper Class)
진위형booleanBoolean
문자형charCharacter
정수형byteByte
정수형shortShort
정수형intInteger
정수형longLong
실수형floatFloat
실수형doubleDouble

박싱과 언박싱

박싱
기본 타입을 래퍼 클래스의 인스턴스로 변환하는 과정

/*
 * Java 1.5 이상 버전의 경우 - 오토 박싱 (Auto Boxing)으로 별도의 수동적 처리 없이 Boxing 된다.
 * 기본 자료형 -> 래퍼 클래스 변환
 */
// [Java v1.5이상] 박싱 (Boxing) - 기본 자료형 -> 래퍼 클래스
int aInt = 3;
int bInt = 4;
Integer aInteger = aInt;
Integer bInteger = bInt;
Log.debug(aInteger, bInteger);
/*
 * Java 1.5 미만 버전의 경우 - 박싱(Boxing)으로 수동적인 처리로 Boxing 해야했다.
 * 기본 자료형 -> 래퍼 클래스 변환
 */
int aInt2 = 3;
int bInt2 = 4;
Integer aInteger2 = new Integer(aInt2);
Integer bInteger2 = new Integer(bInt2)
Log.debug(aInteger2, bInteger2);

언박싱(Unboxing)
래퍼 클래스의 인스턴스에 저장된 값을 다시 기본 타입으로 꺼내는 과정

/*
 * Java 1.5 이상 버전의 경우 - 오토 언박싱 (Auto UnBoxing)으로 별도의 수동적 처리 없이 UnBoxing 된다.
 * 래퍼 클래스 -> 기본 자료형
 */
Integer cInteger = 3;
Integer dInteger = 4;
int cInt = cInteger;
int dInt = dInteger;
Log.debug(cInt, dInt);

/*
 * Java 1.5 미만 버전의 경우 - 박싱(UnBoxing)으로 수동적인 처리로 UnBoxing 해야했다.
 * 래퍼 클래스 -> 기본 자료형
 */
Integer cInteger = new Integer(3);
Integer dInteger = new Integer(4);
int cInt = cInteger.intValue();
int dInt = dInteger.intValue();
분류기본 자료형 (Primitive Type)래퍼 클래스(Wrapper Class)오토 언박싱
진위형booleanBooleana.booleanValue()
문자형charCharactera.charValue()
정수형byteBytea.byteValue()
정수형shortShorta.shortValue()
정수형intIntegera.intValue()
정수형longLonga.longValue()
실수형floatFloata.floatValue()
실수형doubleDoublea.doubleValue()

오토 언박싱(Auto Unboxing) 이란?
래퍼 클래스의 인스턴스에 저장된 값을 다시 기본 타입으로 꺼내는 과정을 자동으로 처리해주는 기능 이 기능은 Java 1.5 이상 버전에서 지원, 따라서 별도의 수동적인 처리 없이 래퍼 클래스를 기본 자료형으로 변환할 수 있다.

분류기본 자료형래퍼 클래스
사용 목적간단하고 빠르게 처리가 필요한 경우객체로 다루어야 하는 경우
값 비교 방법== 연산자를 이용하여 비교한다equals() 메소드를 사용하여 비교한다
처리 속도빠르다느리다
메모리 사용량작다크다
null 초기화 가능 여부불가능가능
외부에서 변경 가능 여부가능불가능
숫자의 산술연산 가능 여부가능불가능
제너릭 타입 내에서 사용 가능 여부불가능가능

NPE
null로 초기화 가능여부

  • 기본 자료형은 null로 초기화가 불가능하며 래퍼 클래스의 경우는 null로 초기화가 가능

    숫자의 산술연산 가능 여부

  • 기본 자료형(int)는 숫자의 산술연산이 가능하지만 래퍼 클래스(Integer)의 경우는 산술연산이 불가능

    제너릭 타입 사용 가능여부

  • 기본 자료형(int)는 제너릭 타입내에 사용이 불가능 하지만 래퍼 클래스(Integer)의 경우에는 제너릭 타입으로 사용이 가능

0개의 댓글