728x90
반응형
기본형(primitive type)
타입 | 메모리 크기 | 기본 값 | 데이터의 표현 범위 | |
논리형 | boolean | 1 byte | false | true, false |
정수형 | byte | 1 byte | 0 | -128 ~127 |
short | 2 byte | 0 | -32,768 ~32,767 | |
int | 4 byte | 0 | -2,147,483,648 ~ 2,147,483,647 | |
long | 8 byte | 0 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | |
실수형 | float | 4 byte | 0.0F | (3.4 X 10-38) ~ (3.4 X 1038) 의 근사값 |
double | 8 byte | 0.0 | (1.7 X 10-308) ~ (1.7 X 10308) 의 근사값 | |
문자형 | char | 2 byte | '\u0000' | 0 ~ 65,535 |
참조형(reference type)
타입 | 메모리 크기 | 기본 값 | 예시 |
배열(Array) | 4 byte (객체의 주소 값을 가짐) |
Null | int[] array = new int[5]; |
열거(Enum) | public enum EnumTest { START, END } |
||
클래스(Class) | String str = "string"; | ||
인터페이스(Interface) | interface testInterface<T> { void add(T value); } |
기본형 / 참조형 특징
기본형 | 참조형 | |
특징 | - 비객체 타입으로 null을 사용할 수 없음 - 첫 글자는 소문자 사용 - 산술 연산 가능 - 자료형의 길이가 변하지 않음 - 실제 값을 저장하는 공간으로 스택 메모리에 저장 |
- 객체를 참조하는 형으로 null 사용 가능 - 첫 글자는 대문자 사용 - 산술 연산 불가 - 주소를 참조하고 있기 때문에 길이에 연연하지 않음 - 주소 값을 저장하는 공간으로 힙 메모리에 저장 |
.
.
.
혹시 기본형에 Null을 사용하고 싶다면??
래퍼 클래스(Wrapper Class)
기본타입(primitive type) | 래퍼클래스(wrapper class) |
byte | Byte |
char | Character |
int | Integer |
float | Float |
double | Double |
boolean | Boolean |
long | Long |
short | Short |
모든 래퍼 클래스의 부모는 Object부터 시작을 하며,
Boolean과 Character를 제외한 내부적으로 숫자를 사용하는 래퍼클래스의 부모 클래스는
Number를 참조하고 있습니다.
래퍼클래스는 null 이외에도 다양한 이유로 인해 사용이 되곤 합니다.
- 매개변수로 객체가 요구 될 때 - 기본형 값이 아닌 객체로 저장해야될 때 - 객체 간의 비교가 필요 할 때 - 기본형 변수를 객체로 감싸서 객체로 사용할 수 있게 끔 하는 래퍼 클래스. - (기본 자료형을 감싸고 있다고 하여 래퍼클래스 말 그대로 포장클래스로 불립니다.) |
하지만...
주소 값을 참조하고 있기 때문에 기본형때 처럼 ==를 사용하여 비교 시 같은 값이더라도
일치하지 않는다고 나오게 됩니다.
값을 비교하기 위해 아래와 같은 방식으로 비교를 하곤 합니다.
1
2
3
4
|
Integer int01 = new Integer(10);
Integer int02 = new Integer(10);
system.out.println(int01 == int02); //false
system.out.println(int01.equals(int2)); //true
|
cs |
래퍼클래스를 알고 있다면 꼭 알아야 하는 개념!
오토박싱(Auto Boxing) / 오토언박싱(Auto Unboxing)
자바 컴파일러에서는 1.5버전 이후부터 오토박싱과 언박싱을 지원해주고 있습니다.
이는 컴파일러가 자동으로 래퍼클래스를 기본형으로 기본형을 래퍼클래스로 변형해주는 것을 말합니다.
기본타입이 래퍼클래스로 자동변형 해주는 것 => 오토박싱 래퍼클래스를 기본타입으로 자동변형 해주는 것 => 오토언박싱 |
예시
1
2
3
4
5
6
|
// 오토박싱
Integer int01 = new Integer(10); // 1.5 이전
Integer int02 = 10; // 1.5 이후 / 내부적으로는 위처럼 변환되어 동작
// 오토언박싱
int int03 = int02; // 내부적으로는 int int03 = int02.intValue(); 로 변환되어 동작
|
cs |
우리는 위처럼 오토박싱과 언박싱을 통해 조금 더 편한 방식으로 사용할 수 있게 되었습니다.
728x90
반응형
'JavaScript > JavaScript' 카테고리의 다른 글
[JavaScript] Object key and value loop Object.entries() (0) | 2021.08.16 |
---|---|
[JavaScript]두 배열 안에 오브젝트를 비교 후 중복된 값 제거 (0) | 2020.12.13 |
[일기]async await 비동기 방식 처리 (0) | 2020.08.20 |
[JavaScript]프로트타입(Prototype) ?? (0) | 2020.08.10 |
[JavaScript] var, let, const ? (0) | 2020.08.09 |