• 기본(원시-primitive)자료형과 참조형자료형
    • 원시(기본) 자료형
      • Java에서 제공하는 기본 데이터 타입
      • int, long, double, float, boolean, char 등
    • Java에서 기본(원시) 자료형을 제외한 자료형은 "참조 자료형”
      • 참조형 타입은 모두 클래스 기반의 객체
      • 여기서 클래스란 다양한 기능들이 사전 구현돼 있는 소스코드 집합 정도로 이해
    • 원시 자료형 변수는 new 키워드없이 리터럴(literal)로만 값을 세팅
      • 참조형 변수는 new 키워드를 사용하여 값 세팅
      • String은 리터럴 표현식을 사용할 수 있도록 자바에서 특별 대우 해주는 참조자료형
        • 그외에도 배열, wrapper클래스도 리터럴 세팅 가능
    • 원시 자료형 변수는 자동으로 타입별 기본값으로 초기화
      • 참조형 변수는 null로 초기화
    • 원시 자료형은 스택메모리에 직접 값을 저장
      • 참조형 변수는 객체의 주소(reference)를 저장. 실제 객체는 힙(heap) 메모리에 할당
    • 원시 자료형의 비교시에는 값 자체를 비교
      • 참조형 변수는 객체주소를 비교함으로서 동일한 객체인지를 비교
  • 자바에서의 사용되는 주요 메모리와 특성
    • java의 메모리 구조

      Untitled

    • 메소드 영역

      • 빌드되어 만들어진 소스코드(클래스 등), 정적변수(static)등이 저장되어 코드 전역에서 사용가능한 공간
    • 스택 영역

      • 지역변수, 매개변수, 기본형 자료, 객체의 주소값 등을 저장
    • 힙 영역

      • Heap 메모리는 프로그램 실행 동안 생성되는 모든 객체와 배열의 값을 저장하는 곳
    • *왜 배열을 출력할때 Arrays.toString()을 써야하는가?

      • 기본형 변수는 스택 영역에 저장하지만, 참조형 변수인 객체 변수 등은 스택메모리에는 힙메모리의 주소만 저장해두고 실질적인 값은 힙메모리에 저장
      • toString()등 내장된 메소드를 통해 heap메모리에 저장된 값을 찾아 출력
  • Wrapper클래스
    • Wrapper 클래스는 기본 자료형(primitive types)의 참조형변수 즉, 객체로 만들어진 기본자료형을 의미

    • 원시자료형의 Wrapper클래스

      • 클래스에서 정의한 다양한 기능들을 추가적으로 사용하기 위해 원시자료형을 Wrapping한 클래스 등장
      • 사용예시
        • Integer.toString(), Integer.parseInt()등
    • 앞으로 공부할 ArrayList, HashMap, HashSet 등은 데이터 저장시 원시 자료형 대신 그에 대응하는 Wrapper 클래스들을 사용

      image.png

    • 박싱, 언박싱

      • 박싱
        • 기본 자료형을 래퍼 클래스로 변환하는 과정
        • int num = 10; Integer wrappedNum = Integer.valueOf(num);
      • 언박싱
        • 래퍼 클래스를 기본 자료형으로 변환하는 과정
        • Integer wrappedNum = Integer.valueOf(20); int num = wrappedNum.intValue();
      • 오토 박싱/언박싱
        • 자바5부터 자동으로 형변환 지원
        • Integer wrappedNum = 20; // Auto-Boxing int num = wrappedNum; // Auto-Unboxing