[JAVA] 원시 타입(Primitive Type) & 참조 타입(Reference Type)

지누초이·2024년 3월 5일
0

JAVA

목록 보기
1/7
post-thumbnail

원시 타입(Primitive Type)

타입키워드크기(bit)범위
논리형boolean8true/false
문자형char16\u0000 ~ \uFFFF
정수형byte8-128 ~ 127
정수형short16-32768 ~ 32767
정수형int32-2147483648 ~ 2147483647
정수형long64-9223372036854775808 ~ 9223372036854775807
실수형float321.4E-45 ~ 3.4028235E38
실수형double644.9E-324 ~ 1.7976931348623157E308
  • 원시 타입 은 우리가 흔히 아는 기본 타입으로 논리, 문자, 정수, 실수 리터럴의 실제 값을 저장하는 타입 이다.

  • boolean

    • JAVA에서는 최소 1Byte를 사용해 데이터를 다룬다.
  • char

    • JAVA는 Unicode를 사용하기 때문에 동양 글자의 경우 2Btye가 필요하다.
    • JAVA에서 제공하는 유일한 unsigned 형이다.
  • 정수형 공통

    • 2의 보수법을 이용한 범위를 표현할 수 있다.
      • kk비트로 나타낼 수 있는 범위 : 2k1-2^{k-1} ~ 2k112^{k-1} - 1
  • long

    • int형 범위를 넘어가는 숫자의 경우, 'l'이나 'L'을 접미사로 붙혀줘야 한다.
    long l1 = 10000000000L;
    • Suffix를 붙히지 않을 경우 Integer number too large 라는 경고 문구가 뜬다. (IntelliJ)
  • float

    • 'f'나 'F'를 접미사로 붙혀줘야 한다.
    float fl1 = 3.14f;
    • Suffix를 붙히지 않을 경우 'f'를 붙혀 리터럴을 float으로 바꿀지, 변수의 타입을 double로 바꿀지 정해야한다.
  • double

    • 실수형 데이터 타입에서의 기본 데이터 타입이다.
    • float에 비해 더 정밀한 데이터의 표현이 가능하다.

참조 타입(Reference Type)

  • 참조 타입 은 원시 타입 이외의 클래스, 인터페이스, 배열, 문자열 등의 타입들이다.
  • 실제 객체들은 힙 영역에 저장되고 이들의 주소가 스택 영역에 저장된다.
  • 위와 같은 원리로 값을 접근하기 때문에 원시 타입에 비해 데이터 접근 속도가 느리다.
Car myCar = new Car();
  • 예를 들어 위와 같은 코드를 작성했다고 하자. 이 경우 myCar 라는 메모리 공간이 스택 영역에 생성되고, 스택에 있는 myCar 라는 참조 변수는 힙 영역에 생성된 해당 객체의 주소 값을 갖고 있다.

이외 차이점

  • 원시 타입은 제네릭 타입에서 사용할 수 없지만,
    참조 타입은 제네릭 타입에서 사용할 수 있다.
ArrayList<Integer> al1 = new ArrayList<>();
/* 
// Type argument cannot be of primitive type
ArrayList<int> al1 = new ArrayList<>();	
*/
  • 원시 타입에는 디폴트 값이 있기 때문에 null을 담을 수 없지만,
    참조 타입에는 null을 담을 수 있다.
Integer a1 = 100;
Integer a2 = null;
int a3 = 100;
/*
// int a4 = Integer.parseInt(null);
int a4 = null;
*/
  • 원시 타입에 비해 참조 타입이 사용하는 메모리 양이 압도적으로 높다.

0개의 댓글