백엔드 개발자 공부/Java

[Java] 타입

gotoguy 2022. 8. 30. 21:50
728x90

타입

    - 어떤 값의 유형 및 종류

    - 타입에 따라 값이 차지하는 메모리 공간의 크기값이 저장되는 방식이 결정됨

 

기본 타입과 참조 타입

    - 기본 타입(primitive type) : 값을 저장할 때, 데이터의 실제 값이 저장됨

        같은 형태라도 타입에 따라 차지하는 메모리 크기가 다르며, 나타낼 수 있는 값의 범위도 다름

https://dudri63.github.io/2019/02/13/java3/

    - 참조 타입(reference type) : 값을 저장할 때, 데이터가 저장된 곳을 나타내는 주소값이 저장됨

        위 8개의 기본 타입을 제외한 나머지 타입

 

리터럴(Literal)

    - 문자가 가리키는 값 그 자체. 값이라는 단어 대신 사용

    - 변수 또는 상수에 할당


정수 타입

    - byte, short, int, long 4개의 타입으로 분류

    - 각각 차지하는 메모리의 크기가 다르며, 나타낼 수 있는 숫자의 범위도 다름

    - long 타입의 변수에 리터럴을 할당할 때는 리터럴 뒤에 접미사 L를 붙여야 함

final long LIGHT_YEAR = 9460730472580L;

    - 데이터 타입의 범위를 넘어가면 오버플로우(최대값 이상 표현)와 언더플로우(최소값 이하 표현) 발생

        오버플로우 발생시 해당 데이터 타입의 최소값으로 값이 순환함 (e.g. byte형의 최대값인 127에 1을 더하면 타입의 최소값인 -128이 됨)

        언더플로우 발생시 해당 데이터 타입의 최대값으로 값이 순환함 (e.g. byte형의 최소값인 -128에 1을 빼면 타입의 최대값인 127이 됨)


실수 타입

    - float, double 2개의 타입으로 분류

    - double형이 float형보다 더 큰 실수를 저장할 수 있고, 더 정확하게 저장할 수 있다. (=정밀도가 더 높다.)

    - float 타입의 변수에 리터럴을 할당할 때는 리터럴 뒤에 접미사 f를 붙여야 함

float weight = 74.5f;

    - 정수 타입과 같이 오버플로우언더플로우가 발생하지만, 결과가 다름

        오버플로우(음의 최소 범위 또는 양의 최대 범위를 넘어갔을 때) 발생시 값은 무한대가 됨

        언더플로우(음의 최대 범위 또는 양의 최소 범위를 넘어갔을 때) 발생시 값은 0이 됨


논리 타입

    - boolean : 참(true) 또는 거짓(false)을 저장할 수 있는 데이터 타입

    - JVM이 다룰 수 있는 데이터의 최소 단위인 1byte(8bit)의 크기를 가짐

    - 조건문과 함께 사용되는 경우가 많음


문자 타입

    - char : 한 글자의 문자형 리터럴 저장

    - 2byte의 크기를 가짐

    - 리터럴 작성시 작은따옴표(' ') 사용. 큰 따옴표(" ")는 문자열 리터럴로 인식됨

    - 문자 타입 리터럴은 유니코드 숫자값으로 저장됨

        cf. 아스키코드 표, 유니코드 ↔ 문자 변환

    - 숫자를 문자형 변수에 할당하면, 변수가 저장하고 있는 숫자값을 유니코드로 인식하여 해당 숫자와 일치하는 코드로 변환해서 출력함

char letter = 65;

System.out.print(letter);	// A

타입 변환

    - boolean을 제외한 기본 타입 7개는 서로 타입 변환 가능

    - 예전에는 중요한 개념이었지만, 메모리 용량이 넉넉해진 지금은 수동 타입 변환을 많이 사용하지 않음

    - 일반적으로 정수는 int 또는 long, 실수는 double로 사용

 

자동 타입 변환

    1. 바이트 크기가 작은 타입에서 큰 타입으로 변환할 때 가능 (e.g. byte → int)

    2. 덜 정밀한 타입에서 더 정밀한 타입으로 변환할 때 가능 (e.g. 정수 → 실수)

        ← 정밀하지 않음               (괄호 안은 바이트 크기)                정밀함 →

        byte(1) → short(2), char(2) → int(4) → long(8) → float(4) → double(8)

 

수동 타입 변환

    - 캐스팅(메모리 용량이 더 큰 타입에서 작은 타입으로 변환)할 때 사용

    - 캐스팅 연산자() 사용. 괄호 안에 변환하고자 하는 타입을 적음

// int 타입의 변수를 byte로 변환
int intValue = 128;
byte byteValue = (byte)intValue;

System.out.println(byteValue);	// -128 (오버플로우 발생)
728x90

'백엔드 개발자 공부 > Java' 카테고리의 다른 글

[Java] 제어문 (1) - 조건문  (0) 2022.08.31
[Java] 연산자 & 콘솔입출력  (0) 2022.08.30
[Java] 문자열  (0) 2022.08.30
[Java] 변수  (0) 2022.08.30
[Java] Intro  (0) 2022.08.30