자바 Java

[자바의정석] 자료형

leexx 2023. 2. 10. 05:09

자료형 (data type)

자료형 이란

  • 값 (data) 의 종류 (type) 에 따라 저장될 공간의 크기와 저장 형식 을 정의한 것임
  • 자료형에는 문자형 (char), 정수형 (byte, short, int, long), 실수형 (float, double) 등이 있음

자료형의 종류

기본형 (Primitive type)

  • 실제 값 (data) 를 저장함, 따라서 기본형의 변수의 type 을 data type 이라고도 함 (물론 type 이 data type 을 포함하는 개념이라 type 이라고 해도 됨)
  • 기본형에는 논리 (boolean), 문자 (char), 정수 (byte, short, int, long), 실수 (float, double) 총 8개의 data type 이 있음
    • 논리형 boolean 은 다른 기본형과의 연산이 불가능하다
    • 정수형 주로 int 가 사용됨, byte 는 이진 데이터를 다룰 때 사용하며, short 는 C 언어와의 호환을 위해 추가되었음
    • 실수형 주로 double 이 사용됨
  1 byte 2 byte 4 byte 8 byte
논리형 boolean      
문자형   char    
정수형 byte short int (default) long
실수형     float double (default)

 

각 data type 의 literal (값)

  data type literal 접미사 비고
논리형 boolean true, false 없음  
문자형 char 'A', 'B', '\n', ' ' '' 는 컴파일 에러
' ' 는 OK
정수형 byte, short, int (default) 123 1. 2진수, 8진수, 16진수 로 표현된
리터럴 저장 가능

2. 구분자를 넣어, 큰 숫자를 편하게 읽을 수 있음
long 123 L, l
실수형 float 123.0F, 123.0f F, f  
double (defualt) 123.0 없음  

 

기본형 정수 타입의 변수에 2진수, 8진수, 16진수 리터럴 을 저장하는 방법

  리터럴 10진수로 나타낸 값
2진수 int binaryNum = 0b10 2
8진수 int octNum = 010 8
16진수 int hexNum = 0x10 16

 

각 자료형의 크기

자바의정석 29페이지

1byte = 8bit

 

크기가 다른 자료형에 값을 넣는다면?

class Hello {
	public static void main(String[] args) {
		short s1 = 32_768; // (X) short 는 -32,768 ~ 32,767 까지 가능
		short s2 = 123f; // (X) 123f 는 float 이며, float 가 short 보다 큼
		short s3 = 123; // O
		double d1 = 123f; // O		
	}
}
# 실행 결과
$  myjava javac Hello.java
Hello.java:3: error: incompatible types: possible lossy conversion from int to short
		short s1 = 32_768; // (X) short 는 -32,768 ~ 32,767 까지 가능
		           ^
Hello.java:4: error: incompatible types: possible lossy conversion from float to short
		short s2 = 123f; // (X) 123f 는 float 이며, float 가 short 보다 큼
		           ^
2 errors
  • 자료형이 집어넣는 값보다 크면 상관없지만, 반대로 자료형보다 넣는 값이 더 크면 안됨
  • 예시
    • short 변수에 long 타입의 literal 을 넣는다 (X), 왜냐하면 short 보다 long 의 범위가 더 크기 때문임
    • short 변수에 byte 타입의 literal 을 넣는다 (O)
    • double 변수에 float 타입의 literal 을 넣는다 (O)
    • float 변수에 double 타입의 literal 을 넣는다 (X), 왜냐하면 float 보다 double 의 범위가 더 크기 때문임

참조형 (Reference type)

  • 기본형과 달리 실제 값 (data) 이 아닌, 메모리 주소 (memory address) 를 값으로 가짐
    • 그래서 참조형 변수의 type 을 data type 이 아닌 type 이라 하는 듯 함
  • 참조형 변수 간에는 연산을 할 수 없음
  • 기본형 8개를 제외한 모든 타입

 

참고 자료

  • 자바의 정석