본문 바로가기
JAVA

JAVA / 캐스팅(형변환)이란?

by LWM 2020. 3. 30.
반응형

프로그래밍을 하다보면 같은 타입뿐 아니라 서르 다른 타입간의 연산을 수행해야하는 경우도 발생한다. 이때 우리는 연산을 수행하기전 타입을 일치시켜야하는데 어떻게 해야할까? 함께 알아보자.

 

캐스팅(형변환)이란?


형변환 즉, 캐스팅이란 변수 또는 상수의 타입을 다른 타입으로 변환하는 것을 말한다. 우리는 코드를 작성하다보면 수많은 연산과 마주한다. 이때 서로 연산되는 데이터끼리 타입이 맞지않으면 연산이 불가능하다. 따라서 데이터를 연산할 때에 데이터끼리의 타입을 맞춰주어야하는데 이때 우리는 캐스팅이라는 작업을 통해 연산 데이터들간의 타입을 일치시켜준다.

 

캐스팅 방법


캐스팅의 방법에는 묵시적 캐스팅과 명시적 캐스팅 2가지가 있다. 각각의 방법을 리터럴과 변수에 적용하여 살펴보자. 예시는 다음과 같다.

// 변수를 캐스팅할 경우(a는 정수로 가정)
double a = (double)a;   // 명시적 캐스팅
double b = a;           // 묵시적 캐스팅

// 리터럴을 캐스팅할 경우
double c = (double)3;   // 명시적 캐스팅
double d = 3;           // 묵시적 캐스팅

위 코드를 보면 캐스팅할 때 차이가 있다. 그렇다. 우변의 괄호 유무이다. 우리는 캐스팅을 할 때 괄호와 캐스팅할 데이터타입을 작성하여 어떤 타입으로 캐스팅할 것인지 보여주는 명시적 캐스팅을 지향하는 것이 좋다. 묵시적 캐스팅을 사용하지 말라는 것이 아니다. 묵시적 캐스팅은 개발의 편의를 위해 존재하며, 상황에 따라 굳이 명시적으로 캐스팅을 사용하지않아도 될때에는 사용해도 무방하다. 필자가 말하는 상황은 아래 캐스팅 규칙을 보면 알 수 있다.

 

캐스팅 규칙


우리는 캐스팅할 때 알아야할 규칙이 몇가지 있다. 내용은 다음과 같다.

  1. boolean을 제외한 나머지 7개의 기본형은 서로 캐스팅이 가능하다.
  2. 기본형과 참조형은 서로 캐스팅을 할 수 없다.
  3. 서로 다른 타입의 변수간 연산은 명시적 캐스팅을 원칙으로 하지만, 값의 범위가 작은 타입에서 큰 타입으로 캐스팅할 때에는 묵시정 캐스팅을 사용할 수 있다.

캐스팅 시 위와 같은 규칙을 준수한다면 탈없이 캐스팅할 수 있다. 요즘에는 IDE가 워낙 잘되어있어 규칙에 어긋나는 캐스팅을 할 때 오류를 다 잡아주기 때문에 큰 걱정을 하지않아도 된다.

그리고 한가지 더 언급하고 글을 마무리하겠다. 우리는 작은 타입에서 큰타입으로 캐스팅할 때 업캐스팅, 그 반대는 다운캐스팅이라 하는데 업캐스팅은 문제가없지만 다운캐스팅은 고려해야할 점이 있다. 큰 타입에서 작은 타입으로의 캐스팅이기 때문에 타입의 크기가 작아진 변수에 데이터가 들어가기 때문에 데이터손실(loss of data)이 발생한다.

정수형 다운캐스팅

프로그래밍에서는 데이터는 가장 중요한 요소이다. 당연히 데이터에 대한 손실은 있어서도 안돼고 있을 수도 없다. 따라서 캐스팅 시 이점에 유의하고 꼼꼼히 체크하여 안전하게 캐스팅하길 바란다.


읽어주셔서 감사합니다. 😊

 

Reference

자바의 정석 - 남궁성

반응형

'JAVA' 카테고리의 다른 글

JAVA / 클래스와 객체  (0) 2020.04.03
JAVA / 배열  (0) 2020.03.31
JAVA / 상수와 리터럴  (0) 2020.03.27
JAVA / 데이터 타입  (0) 2020.03.24
JAVA / 변수란  (0) 2020.03.23