JAVA

[JAVA] Primitive Type vs Reference Type

EJUN 2023. 3. 21. 21:36

자바에는 변수라는 것이 존재하고 타입이라는 형태가 존재한다.

Primitive Type

Primitive Type은 기본형 타입이라고도 부르고, 실제 데이터 값을 저장하는 타입이다.

 

논리형 boolean
Class Main{
	public static void main(String[] args){
    boolean vis=true;
    }

boolean형은 반환형이 true/false형이 존재하고 타입변환이 자유롭지 않고, 크기는 1byte이다.

문자형 char
Class Main{
	public static void main(String[] args){
    char c='Ch';
    }

char형은 반환형은 문자 단위로 반환을 해주고 크기는 2byte이다.

정수형 

정수형은 byte, short, int, long형이 존재한다.

Class Main{
	public static void main(String[] args){
    byte b=100; //byte형
    short s=320; //short형
    int i=120; //int형
    long li=200; //long형
    }

우선 정수형은 숫자를 표현하는 타입이고, 위의 코드와 같이 변수를 초기화 할 수 있고, 반환형은 정수값이다.

byte의 크기는 1byte

short의 크기는 2byte

int의 크기는 4byte

long의 크기는 8byte 이다.

 

정수형에만 이렇게 타입이 많은 이유는 무엇일까?

왜냐하면 각각의 정수형 타입에는 값을 표현할 수 있는 범위가 정해져 있는데  그 범위가 넘어가면 오류를 발생시키기

때문에 여러개의 타입으로 나누어져 있고, 각각의 타입마다 표현범위가 다르다.

표현범위를 벗어난 경우

위의 코드와 같이 byte형의 표현범위를 벗어나면 같은 정수형 이라도 컴파일러에서 오류를 처리한다.

 

실수형

실수형은 float, double형이 존재한다.

Class Main{
	public static void main(String[] args){
    float f= 10.0; //float형
    double b=3.14; //double형
    }

실수형은 실수타입을 표현하는 자료형이고, 반환형은 실수값이다.

float형의 크기는 4byte

double형의 크기는 8byte이다.

실수형

하지만 위의 코드처럼 float형이 실수형 타입이라 실수값을 입력하고, 표현범위를 벗어나지 않았는데도 불구하고

컴파일러는 오류를 발생시키는 걸 알 수 있다. 

그리고 컴파일러는 float형을 double형으로 바꾸라고 알려준다. 

왜 그럴까? 그 이유는 바로 실수형은 double형을 기본타입으로 사용하기 때문이다.

 

그럼 float형을 사용하고 싶다면 어떻게 하면 될까?

float형 사용

이렇게 리터럴값뒤에 F를 붙여주면 float형 사용이 가능해진다.

원시타입 종류, 크기, 표현범위

 

Reference Type

Reference Type은 기본형 타입을 제외한 나머지 타입들을 의미하고

객체의 번지를 참조하는 타입으로 메모리 번지 값을 통해 객체를 참조하는 타입

문자열, 배열, 열거, 클래스, 인터페이스 등이 있다.

또한 원시타입과 다르게 null값이 존재한다.

Reference타입 선언

위의 코드처럼 원시타입에서는 int형으로 선언을 했었다면, 래퍼런스 타입은 Integer형으로 변수를 선언한다.

원시타입과 래퍼런스 타입의 차이

원시타입은 값을 바로 저장하지만 , 래퍼런스는 해당 변수의 주소값을 저장한다.

Primitive Type int i=10; 10이라는 값을 저장
Reference Type Integer num=20; 20이라는 값이 저장되어있는 주소 저장

 

'JAVA' 카테고리의 다른 글

[JAVA] 타입변환&타입추론 var  (0) 2023.03.22
[JAVA] 리터럴변수&변수의스코프와 라이프타임  (0) 2023.03.21
Java의 역사  (0) 2023.03.12
Spring framework 핵심기술 - IoC 컨테이너  (0) 2023.01.05
자바 I/O 와 NIO 차이  (0) 2022.06.14