[Java] Primitive type와 Reference type

Juhye Pyoun·2023년 9월 8일

Java

목록 보기
3/9

변수(variable)
데이터(data)를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간

타입(data type)
해당 데이터가 메모리에 어떻게 저장되고, 프로그램에서 어떻게 처리되어야 하는지를 명시적으로 알려주는 역할

 

자바의 자료형으로는 기본형(Primitive type)참조형(Reference type) 이 있다

Primitive type (기본형)

  • JAVA에서는 총 8종류의 기본 타입을 미리 정의하고 제공한다
  • 자바에서 기본 자료형은 반드시 사용하기 전에 선언(Declared)되어야 한다
  • OS에 따라 자료형의 길이가 변하지 않는다
  • 비객체 타입이므로 null 값을 가질 수 없다. (기본값이 정해져 있다). 만약 Null을 넣고 싶다면 Wrapper Class를 활용한다.
  • 스택(Stack) 메모리에 저장됩니다.
  • 저장공간에 실제 자료 값을 가진다.

boolean
참과 거짓을 저장하는 타입
기본값은 false
기본 타입 중 가장 작은 크기인 1byte의 크기

char
C언어와 C++ : 아스키코드(ASCII) 사용하여 문자 표현
아스키코드는 문자 하나를 7비트로 표현 (총 128개 문자 표현)
Java : 유니코드(unicode) 사용하여 문자 표현
유니코드는 문자 하나를 16비트로 표현 (총 65,536개 문자 표현)

byte
주로 이진데이터를 다루는데 사용

short
C언어와의 호환을 위해 사용되는 타입 (잘 사용되지 않음)

int
정수 연산을 하기 위한 기본 타입
byte 혹은 short 의 변수가 연산을 하면 연산의 결과는 int형이 됨

long
수치가 큰 데이터를 다루는 프로그램에서 주로 사용

초기화 시 정수값 뒤에 알파벳 L을 붙여서 long 타입의 정수 데이터임을 알려주어야함 (만일 정수값이 int의 값의 저장 범위를 넘는 정수에서 L을 붙이지 않는다면 컴파일 에러가 발생)

float, double
실수를 가수와 지수 형식으로 저장하는 부동소수점 방식
가수 표현에 있어 double형이 float형보다 표현 가능 범위가 더 큼
자바에서 실수의 기본 타입 double형이므로 float형에는 알파벳 F를 붙여서 float 형임을 명시해주어야함

 

Reference type (참조형)

참조형 타입은 간단히 말하면 위의 8가지 기본형(primitive type)을 제외한 나머지 타입이다.

  • java.lang.Object 클래스를 상속하는 모든 클래스를 말한다

  • new로 인해 생성하는 것들은 메모리 영역인 Heap 영역에 생성되고, Garbage Collector가 돌면서 메모리를 해제한다

  • 클래스 타입(class type), 인터페이스 타입(interface type), 배열 타입(array type), 열거 타입(enum type)이 있다

  • 빈 객체를 의미하는 Null이 존재한다 (Null로 변수 초기화가 가능하다)

  • 문법상으로는 에러가 없지만 실행시켰을 때 에러가 나는 런타임 에러가 발생한다
    (Ex. 객체나 배열을 Null 값으로 받으면 NullPointException이 발생하므로 변수 값을 넣어야 한다)

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

    👉 쉽게 말하면
    기본형과는 달리 실제값은 힙(heap)에 저장하고, 그 참조값(주소값)을 갖는 변수는 스택에 저장하고 나중에 그 주소를 참조해서 값을 가져온다.


String Class

  • String 클래스는 참조형에 속하지만 기본적인 사용은 기본형처럼 사용한다
  • 불변(immutable)하는 객체이다
    -> 값을 변경하는 메소드를 통해 데이터를 바꾼다 해도 새로운 String 클래스 객체를 만들어내는 것이다
  • 일반적으로 기본형 비교는 == 연산자를 사용하지만, String 객체간 비교는 .equals() 메소드를 사용한다

 

[참고자료]

링크1🔗
링크2🔗
링크3🔗
링크4🔗

0개의 댓글