0 시작하기 앞서...
' int 형으로 선언할 때와 Integer 로 선언할 때 무엇이 다를까! '
어느날 문득! 매개변수에 변수를 선언하던 도중 이런 생각을 해보았다.
int, float, double, char, boolean 과 같은 것을 기본타입이라고 하고
Integer, Float, Double, Character, Boolean와 같은 것을 Wrapper Class 라고 합니다.
기본타입과 Wrapper Class 의 육안적으로 보이는 가장 큰 차이점은 Wrapper Class 가 대문자로 시작한다는 것입니다.
대문자를 사용하는 것에는 클래스가 있습니다.
Integer, Float, Double, Character, Boolean 등 이러한 것들은 클래스 타입이라고 부를 수 있습니다.
즉, 객체.
따라서 Null 값도 허용이 됩니다.
반대로 소문자인 int, float, double, char, boolean 과 같은 것들은 자료형입니다.
객체 타입이 아니기 때문에 Null 값은 허용되지 않습니다.
1 박싱과 언박
자료형을 객체로 바꾸는 것을 박싱이라고 하고
객체를 자료형으로 바꾸는 것을 언박싱이라고 합니다.
예시를 들어보겠습니다.
public class EX {
public static void main(String[] args) {
Integer num = new Integer(15); // 박싱
int n = num.intValue(); // 언박싱
System.out.println(n);
}
}
2 스택 메모리와 힙 메모리에 대하여
기본 타입인 int, float, double, char, boolean 은 스택 메모리에 값이 저장되고
Wrapper Class인 Integer, Float, Double, Character, Boolean은 힙 메모리에 저장됩니다.
스택 | 힙 | |
정의 | • 스택 메모리는 각 함수(메서드)가 실행 될 때 사용하는 공간 • 기본 타입은 스택 메모리에 직접 저장 => 빠르게 접근 가능 |
• 힙 메모리는 프로그램 실행 중에 필요한 데이터를 저장하는 공간 • 객체는 메모리에서 동적으로 할당 • 프로그램이 필요할 때 생성되고 삭제 • 유연한 메모리 저장 공간을 제공 |
특징 | • 크기가 제한되어 있음 • 크기 초과하는 데이터 저장 시도 => 스택 오버플로우 발생 |
• 스택에 비하여 느림 • 메모리 해제를 수행하지 않으면 메모리 누수 발생 • 동적할당과 해제로 인한 메모리 관리 오버헤드 발생 가능성 존재 |
이것을 설명한 것에는 이 글을 쓴 이유와 같습니다.
보통 변수를 선언할 때 기본타입으로 선언하는 경우가 많습니다.
모든 변수를 힙에 저장하게 되면 메모리에 무리를 주기 때문에
변수를 크기에 알맞는 자료형에 저장하여 사용하는 경우가 많았던 것이었습니다.