반응형
해당 글에서는 자료형 중 기본 자료형, 참조 자료형, 래퍼 클래스에 대해 이해하고 각각을 비교하여 이해를 돕기 위한 목적으로 작성을 하였습니다.
1) 기본 자료형(Primitive Data Type)
💡 데이터를 저장하기 위해 사용되는 자료형을 의미하며 변수에 “실제 값”을 가지는 것을 의미합니다.
[참고] 기본 자료형에 대한 구조
분류 | 타입 | 크기 | 기본값 | 범위 |
정수형 | byte | 1byte | 0 | -128 ~ 127 |
정수형 | short | 2byte | 0 | -32768 ~ 32767 |
정수형 | int | 4byte | 0 | -2147483648 ~ 2147483647 |
정수형 | long | 8byte | 0L | - 9223372036854775808 ~ 9223372036854775807 |
문자형 | char | 4byte | ‘\u0000’ | 0 ~ 65535 (\u0000 ~ \uffff) |
실수형 | float | 4byte | 0.0f | single-precision 64-bit IEEE 754 floating point |
실수형 | double | 8byte | 0.0d | double-precision 64-bit IEEE 754 floating point |
논리형 | boolean | 1byte | false | true, false |
[더 알아보기]
💡 1 바이트(byte)는 8 비트(bit)입니다.
2) 참조 자료형 (Reference Data Type)
💡 실제 값을 갖는것이 아닌 데이터가 저장된 메모리의 “주소 값”을 가지는 자료형이며, 해당 값은 객체를 참조하는 변수 타입을 의미합니다.
💡 [참고] 대표적인 참조자료형 종류 : 해당 내용뿐만 아니라 다양한 참조 자료형이 존재합니다.
참조 자료형 | 설명 |
String | 문자열을 저장하는 데 사용되는 클래스입니다. |
ArrayList | 동적 배열을 나타내는 클래스입니다. |
HashMap | 키-값 쌍을 저장하는 데 사용되는 클래스입니다. |
HashSet | 고유한 요소를 저장하는 데 사용되는 클래스입니다. |
LinkedList | 연결 리스트를 나타내는 클래스입니다. |
Queue | 큐를 나타내는 인터페이스입니다. |
Stack | 스택을 나타내는 클래스입니다. |
💡[참고] 해당 예시에서 Person이라는 클래스가 존재합니다. 이 클래스는 다른곳에서 new 연산자를 사용하여 생성되었으며, person1 변수는 Person 객체를 참조하는 변수를 참조 자료형이라고 합니다.
class Person {
String name;
int age;
}
Person person1 = new Person();
person1.name = "John";
person1.age = 25;
💡 기본 자료형과 참조 자료형의 비교
분류 | 기본 자료형(Primitive Data Type) | 참조 자료형(Reference Data Type) |
종류 | 숫자, 문자, 논리값 등 | 클래스, 인터페이스, 배열, 열거 타입 등 |
null 초기화 가능여부 | 초기화 불가능 | 초기화 가능 |
숫자간의 산술연산 가능여부 | 산술연산 가능 | 산술연산 불가능 |
제너릭 타입내 사용 가능여부 | 사용 불 가능 | 사용 가능 |
3) 래퍼 클래스(Wrapper Class)
💡 래퍼 클래스(Wrapper Class)
- 기본 자료형을 ‘객체(Object)’로 다루기 위해서 비 객체를 객체화 시키는 클래스로 “기본타입의 객체화”를 의미합니다. 즉 기본 자료형을 클래스로 감싸는 것입니다.
1. 기본자료형의 래퍼 클래스
분류 | 기본자료형 타입(Primitive Type) | 래퍼 클래스(Wrapper Class) |
진위형 | boolean | Boolean |
문자형 | char | Character |
정수형 | byte | Byte |
정수형 | short | Short |
정수형 | int | Integer |
정수형 | long | Long |
실수형 | float | Float |
실수형 | double | Double |
2. 박싱(Boxing)과 언박싱(Unboxing)
1. 박싱(Boxing)
💡 기본 타입을 래퍼 클래스의 인스턴스로 변환하는 과정을 박싱(Boxing)이라고 합니다.
/*
* 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);
2. 언박싱(Unboxing)
💡 래퍼 클래스의 인스턴스에 저장된 값을 다시 기본 타입으로 꺼내는 과정을 언박싱(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) | 오토 언박싱 |
진위형 | boolean | Boolean | a.booleanValue() |
문자형 | char | Character | a.charValue() |
정수형 | byte | Byte | a.byteValue() |
정수형 | short | Short | a.shortValue() |
정수형 | int | Integer | a.intValue() |
정수형 | long | Long | a.longValue() |
실수형 | float | Float | a.floatValue() |
실수형 | double | Double | a.doubleValue() |
[더 알아보기]
💡오토 언박싱(Auto Unboxing) 이란?
- 래퍼 클래스의 인스턴스에 저장된 값을 다시 기본 타입으로 꺼내는 과정을 자동으로 처리해주는 기능입니다. 이 기능은 Java 1.5 이상 버전에서 지원됩니다. 따라서 별도의 수동적인 처리 없이 래퍼 클래스를 기본 자료형으로 변환할 수 있습니다.
4) 기본 자료형(Primitive Data Type)과 래퍼 클래스(Wrapper Class)의 비교
1. 비교 요약
분류 | 기본 자료형 | 래퍼 클래스 |
사용 목적 | 간단하고 빠르게 처리가 필요한 경우 | 객체로 다루어야 하는 경우 |
값 비교 방법 | == 연산자를 이용하여 비교한다 | equals() 메소드를 사용하여 비교한다 |
처리 속도 | 빠르다 | 느리다 |
메모리 사용량 | 작다 | 크다 |
null 초기화 가능 여부 | 불가능 | 가능 |
외부에서 변경 가능 여부 | 가능 | 불가능 |
숫자의 산술연산 가능 여부 | 가능 | 불가능 |
제너릭 타입 내에서 사용 가능 여부 | 불가능 | 가능 |
2. 비교 상세
1. null로 초기화 가능여부
💡 기본 자료형은 null로 초기화가 불가능하며 래퍼 클래스의 경우는 null로 초기화가 가능합니다.
int num1 = null; // Wrap using 'Integer.parseInt()'
Integer num2 = null;
2. 숫자의 산술연산 가능 여부
💡 기본 자료형(int)는 숫자의 산술연산이 가능하지만 래퍼 클래스(Integer)의 경우는 산술연산이 불가능합니다.
int a = 3;
int b = 4;
log.debug("산술 연산 테스트 :" + a + b);
Integer c = 3; //
Integer d = 4;
log.debug("산술 연산 테스트 :" + c + d);
3. 제너릭 타입 사용 가능여부
💡 기본 자료형(int)는 제너릭 타입내에 사용이 불가능 하지만 래퍼 클래스(Integer)의 경우에는 제너릭 타입으로 사용이 가능하다.
ArrayList<int> intArrayList = new ArrayList<int>(); // replace 'int' with 'java.lang.Integer'
ArrayList<Integer> integerArrayList = new ArrayList<Integer>();
💡 기본자료형과 래퍼클래스간의 변환방법은 아래의 글에서 이어집니다.
오늘도 감사합니다. 😀
반응형
'Java > 이론 및 문법' 카테고리의 다른 글
[Java] JDK(Java Development Kit), Open JDK 이해하기 (0) | 2023.06.25 |
---|---|
[Java] UUID 이해 및 사용방법 (0) | 2023.03.09 |
[Java] Collection Framework(Queue, Stack, Deque)의 인터페이스와 구현체 이해하기 -2 : 정의 및 예시 (0) | 2023.03.08 |
[Java] Collection Framework(List, Map, Set)의 인터페이스와 구현체 이해하기 - 1 : 정의 및 예시 (0) | 2023.03.06 |
[Java] 정규표현식(RegExp) 이해하기 : 패턴, 문자 클래스, 자주 사용 패턴 (2) | 2023.01.23 |