타입
- 어떤 값의 유형 및 종류
- 타입에 따라 값이 차지하는 메모리 공간의 크기와 값이 저장되는 방식이 결정됨
기본 타입과 참조 타입
- 기본 타입(primitive type) : 값을 저장할 때, 데이터의 실제 값이 저장됨
같은 형태라도 타입에 따라 차지하는 메모리 크기가 다르며, 나타낼 수 있는 값의 범위도 다름
- 참조 타입(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의 크기를 가짐
- 리터럴 작성시 작은따옴표(' ') 사용. 큰 따옴표(" ")는 문자열 리터럴로 인식됨
- 문자 타입 리터럴은 유니코드 숫자값으로 저장됨
- 숫자를 문자형 변수에 할당하면, 변수가 저장하고 있는 숫자값을 유니코드로 인식하여 해당 숫자와 일치하는 코드로 변환해서 출력함
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 (오버플로우 발생)
'백엔드 개발자 공부 > 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 |