자바의 정석을 공부하면서 정리한 내용입니다.
하나의 값을 저장할 수 있는 공간
변수란 변수에 해당하는 값을 할당한 메모리의 주소를 의미합니다.
int number = 2;
RAM
: 메모리 공간
char character = 'c'; // 0 ~ 65535
byte byte1 = 127; // -128 ~ 127
short shortInt = 32767; // -32768 ~ 32767
int integer = 20_0000_0000; // -20억 ~ 약 20억
long longInteger = 800_0000_0000_0000_0000L; // -800경 ~ 800경
float float1 = 3.141592f; // 정밀도는 소숫점 아래 6자리 까지
double double2 = 3.141592789012345; // 정밀도는 소숫점 아래 15자리까지
지역변수를 사용할 때는 반드시 초기화해야 한다.
int fromNum = 65;
char toChar = (char) fromNum;
int toNum = (int) toChar;
System.out.println(toChar);
System.out.println(toNum);
>> A
>> 65
위 타입들을 기본형(Primitive type)이라고 부릅니다.
int number = 2;
Integer numberObject = 2;
위에서 int는 기본형, Integer는 참조형이지만 서로 같은 역할을 합니다.
int는 number라는 메모리 공간에 2가 들어가지만
Integer는 number라는 메모리 공간에 객체 주소가 담기고 이 객체 안에 2라는 값이 저장됩니다.
위처럼 참조타입(Reference type)은 원시타입(Primitive type)에 비해 많은 메모리를 차지합니다.
기본형을 참조형으로 바꿀 순 없나요?
기본 자료타입(primitive type)을 객체로 다루기 위해서 사용하는 클래스들을 래퍼 클래스(wrapper class)라고 합니다.
자바는 모든 기본타입(primitive type)은 값을 갖는 객체를 생성할 수 있습니다. 이런 객체를 포장 객체라고도 하는데 그 이유는 기본 타입의 값을 내부에 두고 포장하기 때문입니다. 래퍼 클래스로 감싸고 있는 기본 타입 값은 외부에서 변경할 수 없습니다. 만약 값을 변경하고 싶다면 새로운 포장 객체를 만들어야 합니다.
래퍼 클래스의 구조도 입니다. Object라는 객체로 부터 상속을 받는 구조로 되어있습니다.
기본 타입의 값을 포장 객체로 만드는 과정을 박싱이라고 하고 반대로 포장객체에서 기본타입의 값을 얻어내는 과정을 언박싱이라고 합니다.
public class Wrapper_Ex {
public static void main(String[] args) {
Integer num = new Integer(17); // 박싱
int n = num.intValue(); //언박싱
System.out.println(n);
}
}
직접 박싱과 언박싱을 하는 방법도 있지만 자동으로 박싱, 언박싱을 해주기도 합니다.
public class Wrapper_Ex {
public static void main(String[] args) {
Integer num = 17; // 자동 박싱
int n = num; //자동 언박싱
System.out.println(n);
}
}
wrapper class는 왜 사용하나요?
기본 자료형을 클래스처럼 다루고 싶을 때 사용합니다.
다시 말해 클래스의 장점을 사용하고 싶을 때 사용합니다.
Generics란?
ArrayList, list, HashMap 같은 컬렉션 객체에서 어떤 타입을 사용할 지 명시해주는 기능