변수의 타입
Java에는 여러가지 데이터 타입이 존재하는데 이를 크게 분류하면 '기본형'과 '참조형'으로 나눌 수 있습니다.
기본형 : 값을 직접 변수에 저장하는 타입
참조형 : 값을 저장하고 있는 메모리 주소를 변수에 저장하는 타입
기본형
기본형은 크게 4가지 타입이 존재하고 자세하게 들어가면 8가지 타입이 존재합니다.
1. boolean
2. char
3. 정수형 : byte, short, int, long
4. 실수형 : float, double
각각의 타입에 대해서 기본값이 존재하여서 따로 값을 할당하지 않을 경우 null이 아니라 약속된 기본값이 할당되게 됩니다.
자료형 | 기본값 |
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0 |
char | '\u0000' |
boolean | false |
기본형 변수는 앞서 설명했듯 변수에 값이 직접 저장되는 형태입니다.
int a = 1;
int b = 1;
System.out.println(a == b); // true
a와 b에는 실제 값 1이 저장되어 있기 때문에 1과 1을 비교하여 true가 나오게 됩니다.
참조형
기본형 8가지를 제외한 모든 타입을 참조형이라고 부릅니다.
대표적으로 문자열 자료형인 String 타입이 참조형입니다.
기본형 변수에는 실제 값이 저장되는 반면 참조형 변수에는 값이 저장된 메모리의 주소가 담기게 됩니다.
참조형 변수를 선언하기만 하고 값을 할당하지 않을 경우 값이 저장된 주소도 존재하지 않게 되므로 null값을 가지게 됩니다.
String name1 = new String("하얀손");
String name2 = new String("하얀손");
System.out.println(name1); // 하얀손
System.out.println(name2); // 하얀손
System.out.println(name1 == name2); // false
String 타입 변수는 참조형 변수이기에 변수에 "하얀손"이라는 값이 직접 담기는 게 아니라 이 값이 저장된 메모리 공간의 주소가 저장되게 됩니다.
name1이 참조하고 있는 메모리 공간에 "하얀손"이라는 값이 있고, name2가 참조하고 있는 메모리 공간에도 "하얀손"이라는 값이 있지만 각각의 "하얀손"이 저장된 공간은 서로 다른 공간입니다. 따라서 메모리 주소도 서로 다른 값을 가지게 됩니다.
name1과 name2에는 메모리 주소가 담기게 되는데 각각의 "하얀손"은 메모리 주소가 서로 다르기에
name1 == name2가 false가 나오게 되는 것입니다.
만약 참조형 변수를 통해서 실제 값을 비교하고 싶다면 equals() 메소드를 사용하면 됩니다.
String name1 = new String("하얀손");
String name2 = new String("하얀손");
System.out.println(name1.equals(name2)); // true
Wrapper Class
Wrapper Class는 기본형 데이터들을 객체로 다루기 위해서 사용하는 클래스입니다.
기본형을 Wrapper Class로 만드는 것을 Boxing, 그 반대를 UnBoxing이라고 합니다.
기본형(Primitive Type) | 래퍼클래스(Wrapper Class) |
byte | Byte |
short | Short |
int | Integer |
long | Long |
double | Double |
float | Float |
boolean | Boolean |
char | Character |
기본형 데이터를 래퍼 클래스로 박싱해서 사용하게 되면 크게 2가지 장점이 있습니다.
1. null 값을 표현할 수 있다(래퍼클래스도 참조형이기 때문)
2. 객체로 사용이 가능하기에 래퍼클래스의 다양한 메소드를 활용할 수 있다.
'Java' 카테고리의 다른 글
접근제어자와 Getter & Setter (0) | 2023.04.06 |
---|---|
클래스, 객체, 인스턴스 (0) | 2023.04.06 |
얕은 복사 vs 깊은 복사 (0) | 2023.04.04 |
instance of 연산자 (0) | 2023.04.04 |
JDK & JRE & JVM의 개념 (0) | 2023.04.03 |