1 minute read

기본 자료형 (Primitive Data Type)

특징

  • 단순한 형태의 단일한 실제 값을 보관한다.
    • 비유: 숫자 404(실제 값)가 쓰여진 종이를 보관함
  • 크기가 고정적이다. (예시: int는 항상 32바이트임)
  • 소문자로 시작한다.
  • 기본 값이 자료형마다 다르다. (예시: double의 기본 값은 0.0, boolean의 기본값은 false)

종류

  • byte, short, int, long: 정수 자료형
  • float, double: 실수 자료형
  • char: 단일한 유니코드 문자 자료형
  • boolean: true 또는 false 값 전용 자료형

JVM에서 할당되는 위치

  • Stack 영역에 자료형의 공간을 확보한 후 실제 값이 바로 저장된다.

코드 예시

int age = 30;
double salary = 75000.50;
char grade = 'A';
boolean isActive = true;

참조 자료형 (Reference Data Type)

특징

  • 실제 값이 아닌 실제 값(객체)을 참조하는 값을 보관한다.
    • 비유: 어떤 사람(객체)이 사는 집 주소(참조값)가 쓰여진 종이를 보관함
  • 크기가 객체에 따라 달라진다.
  • 대문자로 시작한다.
  • 기본 값이 null이다.

종류

  • 클래스 (예시: String, Scanner, 커스텀 클래스)
  • 인터페이스
  • 배열 (예시: int[], String[])
  • Enum

JVM에서 할당되는 위치

  • Stack 영역에 자료형의 공간을 확보한 후, Heap 영역에 공간을 확보해 실제 값(객체)을 저장한다. Heap 영역의 주소 값을 가져와 Stack 영역의 자료형의 값으로 저장한다.

코드 예시

// "Alice"가 아닌 "Alice"의 참조값 보관
String name = "Alice";
int[] numbers = {1, 2, 3};
Person person = new Person("Bob");
  • ➕ 기본 자료형이 “자바 그 자체에 속한 자료형” 이라면, 참조 자료형은 “자바에 속하지 않은 자료형” 인가?
    • 결론적으로 말하자면 아니다.
    • 참조 자료형의 정의는 자신이 무엇이 아닌지에 따라 결정되지 않는다.
    • 참조 자료형의 정의는 자신이 보관하는 값에 따라 결정된다.
    • ❌ Java에 기본 자료형과 기본 자료형이 아닌 것들이 있다.
    • ✅ Java에 두 종류의 자료형들이 있다.
  • ➕ 참조 자료형이 객체의 메모리 주소를 저장한다면, 객체 그 자체의 값에는 어떻게 접근해?
    • 생각해보니 실수로 객체의 참조값은 많이 출력해봤어도 객체의 값 자체는 실수로라도 본 적이 없더라.
    • 결론: 못한다(!). Java가 의도적으로 접근할 수 없게 막는다. JVM이 메모리 공간을 관리해야 하는데 개발자가 끼어들면 작동 방식이 꼬이는 등 문제가 발생한다.
    • 개발자가 메모리를 직접적으로 수정할 수 없게 방지한다.
    • 구현체(객체 그 자체)가 아닌 추상화(객체의 인터페이스, 즉 참조값)로 작업하게 한다.
    • 객체가 메모리에 할당되는 작업을 개발자가 신경 쓸 필요가 없다.

Categories:

Updated: