[CS] [Java] Primitive type & Reference type

윤경·2021년 12월 28일
0

노트에 정리한 내용을 보다 깔끔하게 정리하기 🙃


Java Data Type

우선 자바 타입에는 기본형 타입(Primitive type)과 참조형 타입(Reference type)이 있다.

기본형 타입에는 Boolean, Numeric(Integral(Integer/Floating Point) / Character)이 있고,
참조형 타입에는 class, Interface, Array, Enum 등이 있다.

사실 참조형 타입기본형 타입을 제외한 모든 타입을 이른다.


Primitive type 기본형 타입

기본형 타입은 총 8가지를 미리 정의하고 제공한다.

기본 타입은 반드시 사용 전 선언(declared)이 필요하다.

특징

  • OS에 따라 자료형의 길이가 변하지 않음
  • 비객체 타입
    (따라서 null값이 불가능하다. 만약 null이 필요하다면 (📌)Wrapper Class를 활용)
  • 스택(stack)에 저장

📌 Wrapper Class

: Primitive type을 객체로 다루기 위해 사용하는 클래스들

Ex. int → Integer / long → Long

종류

  • boolean
    : 실제론 1bit로도 충분하지만 데이터를 다루는 최소 단위가 1byte이기 때문에 메모리 크기도 1byte이다.
  • byte
    : 주로 이진 데이터를 다룸
  • short
    : C언어와 호환을 위해 사용하지만 잘 쓰이진 않음
  • int
    : byte 또는 short의 변수가 연산을 하면 결과는 int형임
  • long
    : 수치가 클 경우 사용
    long 타입의 변수를 초기화할 때는 정수값 뒤 L을 붙여야 한다.
    ➡️ 이는 정수 데이터임을 알리기 위해서이다. (Ex. long l = 9812736453L;)
    int 초과 범위인데 L이 없다? ➡️ 컴파일 에러 초래
  • float, double
    : double이 더 정밀함
    double이 실수 기본 타입이기 때문에 float일 때는 long처럼 F를 뒤에 붙여 float 형임을 알려야 한다.

Reference type 참조형 타입

참조형 타입은 기본형 타입을 제외한 모든 타입이다.
즉, java.lang.Object(자바 최상 클래스) 클래스를 상속하는 모든 클래스이다.

  • new로 인해 생성되는 것들은 Heap 영역에 생성된다. 그리고 Garbage Collector가 돌며 메모리를 해제한다.
  • 클래스 타입(class type), 인터페이스 타입(interface type), 배열 타입(array type), 열거 타입(enum type)이 존재한다.
  • 빈 객체를 의미하는 null이 존재한다.
  • Heap 메모리에 생성된 인스턴스는 메소드나 각종 인터페이스에서 접근하기 위해 JVM의 stack 영역에 존재하는 Frame에 일종의 포인터(C의 포인터와는 다른)인 참조값을 가져 이를 통해 인스턴스를 핸들링한다.

- String class

String class는 조금 특별하다.

참조형에 속하지만 기본적인 사용은 기본형처럼 사용한다.

불변(immutable) 객체이다.

String class에 값 변경 메소드들이 존재하지만, 해당 메소드를 통해 데이터를 바꾼다 해도, 새로운 String class 객체를 만들어내는 것이다.

비교시 == 연산자 대신 .equals() 메소드를 사용해야 한다.


  • 기본타입:
    int, long, float, double, boolean...
  • Wrapper 클래스:
    Integer, Long, Float, Double, Boolean...
  • 박싱:
    기본 타입 데이터에 대응하는 Wrapper 클래스로 만드는 동작
  • 언박싱:
    Wrapper class → Primitive type

profile
개발 바보 이사 중

2개의 댓글

comment-user-thumbnail
2021년 12월 29일

오오옹 굿 ~~👍👍

1개의 답글