Primitive type & Reference type

자바에는 기본형과 참조형이 있다. 일반적인 분류는 다음과 같다.

Java Data Type
ㄴ Primitive Type
    ㄴ Boolean Type(boolean)
    ㄴ Numeric Type
        ㄴ Integral Type
            ㄴ Integer Type(short, int, long)
            ㄴ Floating Point Type(float, double)
        ㄴ Character Type(char)
ㄴ Reference Type
    ㄴ Class Type
    ㄴ Interface Type
    ㄴ Array Type
    ㄴ Enum Type
    ㄴ etc.

Primitive type(기본형 타입)

  • 자바에서는 총 8가지의 Primitive type을 미리 정의하고 제공한다.
  • 자바에서 기본 자료형은 반드시 사용하기 전에 선언 되어야 한다.
  • os에 따라 자료형의 길이가 변하지 않는다.
  • 비객체 타입이다. 따라서 null값을 가질 수 없다. 만약 Primitive type에 Null을 넣고 싶다면 Wrapper Class를 활용할 수 있다.
  • Stack 메모리에 저장된다.

https://gyoogle.dev/blog/computer-language/Java/Primitive%20type%20&%20Reference%20type.html

  • boolean
    • 논리형인 boolean 기본값은 false이며 참, 거짓을 저장하는 타입이다.
    • 실제로 1bit면 충분하지만, 데이터를 다루는 최소 단위가 1byte이므로 메모리 크기가 1byte이다.
  • byte
    • byte는 주로 이진데이터를 다루는데 사용되는 타입이다.
  • short
    • C언어와의 호환을 위해 사용되는 타입으로 잘 사용되지 않는다.
  • int
    • int형은 자바에서 정수 연산을 하기 위한 기본 타입이다. 즉 byte 혹은 short의 변수가 연산을 하면 연산의 결과는 int형이 된다.
  • long
    • 수치가 큰 데이터를 다루는 프로그램에서 주로 사용한다.
    • long 타입의 변수를 초기화 할 때는 정수값 뒤에 알파벳 L을 붙여서 long타입의 정수 데이터임을 알려주어야 한다. 만일 정수값이 int의 값의 저장 범위를 넘는 정수에서 L을 붙이지 않는다면 컴파일 에러가 발생한다.
  • float, double
    • 실수를 가수와 지수 형식으로 저장하는 부동소수점 방식으로 저장된다.
    • 가수를 표현하는데 있어 double형이 float형보다 표현 가능 범위가 더 크므로 double형이 보다 정밀하게 표현할 수 있다.
    • 자바에서 실수의 기본 타입은 double형이므로 float형에는 알파벳 F를 붙여서 float 형임을 명시해주어야 한다.

Reference type(참조형 타입)

  • 자바에서 Primitive 타입을 제외한 모든 타입은 Reference 타입이다.
  • Reference 타입은 JAVA에서 최상인 java.lang.Object클래스를 상속하는 모든 클래스들을 말한다. 물론 new로 인하여 생성하는 것들은 메모리 영역인 Heap 영역에 생성하게되고, GC가 돌면서 메모리를 해제한다.
  • 클래스 타입, 인터페이스 타입, 배열 타입, 열거 타입이 있다.
  • 빈 객체를 의미하는 NULL이 존재한다.

  • 문법상으로는 에러가 없지만 실행시켰을 때 생기는 런타입 에러가 발생한다. 예를 들어 객체나 배열을 NULL 값으로 받으면 NullPointException이 발생하므로 변수값을 넣어야 한다.

  • Heap 메모리에 생성된 인스턴스는 메서드나 각종 인터페이스에 접근하기 위해 JVM의 Stack 영역에 존재하는 Fram에 일종의 포인터인 참조값을 가지고 있어 이를 통해 인스턴스를 핸들링한다.

String Class

  • 클래스 형에서도 String클래스는 조금 특별하다. 이 클래스는 참조형에 속하지만 기본형 처럼 사용한다.

  • 불변하는 객체이다.

  • String 클래스에는 값을 변경해주는 메서드들이 존재하지만 해당 메서드를 통해 데이터를 바꾼다 해도 새로운 String 클래스 객체를 만들어내는 것이다. 일반적으로 기본형 비교는 == 연산자를 사용하지만 String 객체간의 비교는 .equals() 메서드를 사용해야 한다.

'Computer science > JAVA' 카테고리의 다른 글

String Class  (0) 2023.01.01
Serialization(직렬화)  (0) 2022.12.25
오토 박싱 & 오토 언박싱  (0) 2022.12.25
Call by value와 Call by reference  (0) 2022.12.24
JAVA의 컴파일과정(JVM 메모리 구조, JVM GC)  (0) 2022.12.24

+ Recent posts