728x170
해당 글에서는 자료형 중 기본 자료형, 참조 자료형, 래퍼 클래스에 대해 이해하고 각각을 비교하여 이해를 돕기 위한 목적으로 작성을 하였습니다.
![](https://t1.daumcdn.net/keditor/emoticon/face/large/073.png)
1) 기본 자료형(Primitive Data Type)
💡 데이터를 저장하기 위해 사용되는 자료형을 의미하며 변수에 “실제 값”을 가지는 것을 의미합니다.
[참고] 기본 자료형에 대한 구조
![](https://blog.kakaocdn.net/dn/wRWZo/btr0eUsXBB6/jaWBWVxBGRFof4i1ZyfQ9k/img.png)
분류 | 타입 | 크기 | 기본값 | 범위 |
정수형 | byte | 1byte | 0 | -128 ~ 127 |
정수형 | short | 2byte | 0 | -32768 ~ 32767 |
정수형 | int | 4byte | 0 | -2147483648 ~ 2147483647 |
정수형 | long | 8byte | 0L | - 9223372036854775808 ~ 9223372036854775807 |
문자형 | char | 2byte | ‘\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)
![](https://blog.kakaocdn.net/dn/vmyWN/btr0h2pzWis/AP1AUPXoTtYCd140DLk9OK/img.png)
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로 초기화가 가능합니다.
![](https://blog.kakaocdn.net/dn/FRMPQ/btr0aVzdfWK/vpPxcnaOpaDkykPbrA9oaK/img.png)
![](https://blog.kakaocdn.net/dn/euMkKi/btr0aQYXSDo/kF6lHsp0BXI4P5yh2xFkU0/img.png)
int num1 = null; // Wrap using 'Integer.parseInt()'
Integer num2 = null;
2. 숫자의 산술연산 가능 여부
💡 기본 자료형(int)는 숫자의 산술연산이 가능하지만 래퍼 클래스(Integer)의 경우는 산술연산이 불가능합니다.
![](https://blog.kakaocdn.net/dn/bwmnFu/btr0ftVZZfi/z1UwIimdUYtKFp5wmD0RE0/img.png)
int a = 3;
int b = 4;
log.debug("산술 연산 테스트 :" + a + b);
Integer c = 3; //
Integer d = 4;
log.debug("산술 연산 테스트 :" + c + d);
3. 제너릭 타입 사용 가능여부
💡 기본 자료형(int)는 제너릭 타입내에 사용이 불가능 하지만 래퍼 클래스(Integer)의 경우에는 제너릭 타입으로 사용이 가능하다.
![](https://blog.kakaocdn.net/dn/bZVhTH/btr0fu8onPj/RwM6y0jOaFlhTKj6j1B6uK/img.png)
ArrayList<int> intArrayList = new ArrayList<int>(); // replace 'int' with 'java.lang.Integer'
ArrayList<Integer> integerArrayList = new ArrayList<Integer>();
💡 기본자료형과 래퍼클래스간의 변환방법은 아래의 글에서 이어집니다.
[Java/Short] 기본 자료형과 래퍼 클래스의 박싱(Boxing)과 언박싱(Unboxing) 방법
해당 페이지에서는 자주 사용하는 개발 패턴으로 "기본 자료형을 래퍼 클래스로 변환(Boxing)하거나 래퍼 클래스를 기본 자료형으로 변환(Unboxing)”하는 방법에 대해서 공유합니다. 1) 기본 자료형
adjh54.tistory.com
오늘도 감사합니다. 😀
그리드형
'Java > 이론 및 문법' 카테고리의 다른 글
[Java] Collection Framework(List, Map, Set)의 인터페이스와 구현체 이해하기 - 1 : 정의 및 예시 (0) | 2023.03.06 |
---|---|
[Java] String, StringBuffer, StringBuilder 이해하기 (2) | 2023.02.26 |
[Java] Stream API 이해하기 -3: Stream 최종연산 (0) | 2023.02.14 |
[Java] Stream API 이해하기 -2: Stream 중간연산 (4) | 2023.02.08 |
[Java] Stream API 이해하기 -1: 용어 및 Stream 생성 (4) | 2023.02.05 |