본문 바로가기
~2024.10

[자바] 자바의 데이터 타입(자료형)과 타입 캐스팅(형변환)

by HJfan 2024. 2. 21.

01. 자바의 데이터 타입

분류 데이터 타입 크기(Byte) 범위
논리형 boolean 1bit / 1바이트 true/false
문자형 char 2바이트 0 ~ 65,535 (유니코드 문자)
정수형 byte 1바이트 -128 ~ 127
short 2바이트 -32,768 ~ 32,767
integer 4바이트 -2.1억 ~ 2.1억
long 8바이트 -9.2경 ~ 9.2경
실수형 float 4바이트 -3.4E38 ~ 3.4E38
double 8바이트 -1.7E308 ~ 1.7E308

 

자바의 자료형은 기본형과 참조형으로 분류되는데, 위 표는 기본형에 포함되는 데이터 타입을 정리한 것이다.


02. 잡담(C언어의 char와 자바의 char)

본인은 C언어로 프로그래밍 언어를 처음 배웠었기에 char형이 2바이트라는 것이 생소했다.

그 이유를 찾아보니 자바는 '유니코드' 문자 시스템을 지원하기 때문이라고 한다. 자바는 국제적으로 사용될 수

있도록 설계가 되었고, 이를 위해 문자를 표현하기 위해 '유니코드' 문자 집합을 사용하게 된 것이다.

유니코드는 초기에 16비트(2바이트)로 설계되었기에 65,536개의 고유한 문자를 표현할 수 있다.

 

반면, C언어는 초기에 국제성을 고려하지 않았고, 시스템의 문자 인코딩에 따라 다르긴 하지만 주로 영어

알파벳과 특수 문자를 포함하는 'ASCII' 문자 집합을 기본으로 사용하기 때문에 char형이 1바이트인 것이다.


03. 타입 캐스팅(형 변환)이란?

표현 그대로 데이터 타입을 바꾸는 것이다. 타입 캐스팅에는 "암시적 타입 캐스팅(자동 타입 변환)"과

"명시적 타입 캐스팅(강제 타입 변환)" 방식이 존재한다. 암시적 타입 캐스팅은 작은 크기의 데이터 타입에서

큰 크기의 데이터 타입으로 변환될 경우 자동으로 이루어진다. 반면, 명시적 타입 캐스팅은 큰 크기의 데이터

타입에서 작은 크기의 데이터 타입으로 변환할 때 사용된다. 이 경우 데이터 손실의 위험이 있기에 주의가 필요하다.

 

※ 예외

char형과 short형은 둘 다 2바이트인데, 과연 자동 타입 변환과 강제 타입 변환 중 어느 것이 적용되어야 할까?

char charVal = 'A';
short shortVal = charVal;

 

위 코드를 직접 실행시켜 보니 컴파일 에러가 발생했다. 그 이유가 무엇일까?

표현할 수 있는 값의 범위의 차이가 있기 때문이다. 같은 2바이트지만 char는 음수를 표현하지 않고, short는

음수까지 표현하기에 short가 표현할 수 있는 최대 범위를 charVal에서 초과하여 오버 플로우가 발생하거나

예상치 못한 값이 저장될 수 있다는 것이다. 그렇다면 char형을 short로 바꾸는 방법이 없는 걸까? 물론 아니다.

short shortVal = (short)charVal;

 

그런 경우 사용되는 것이 명시적 타입 캐스팅(강제 타입 변환)이다. 위 코드처럼 변환하려는 변수 앞에

변환하려는 타입을 괄호 안에 넣어 붙여주면 된다. 단, 데이터 손실이 발생할 수 있다는 점은 유의하도록 하자.

 

 

※ 본 게시물은 신입 개발자가 실시간으로 공부를 하며 정리한 글이기에 다소 부정확한 표현 혹은 틀린 정보가 존재할 수도 있습니다. 잘못된 부분에 대한 피드백은 언제나 환영합니다.