9. Java Casting(형변환)


javalogo

Overview

Casting(형변환)은 OOP(객체지향프로그래밍)에서 중요한 개념이다. 이 포스트에서는 Java를 통해 설명한다.


Casting

캐스팅은 데이터를 바꾸는 것이 주목적이 아닌,

코드를 적는 프로그래머가 이미 데이터 정보를 이해한다는 가정하에 OOP의 다형성 측면에서 사용한다.

기본 데이터형(int, float 등)에서의 케스팅은 원칙적으로 데이터 손실을 막고자 한다.

아래의 예시를 보자.

int a = 1.0;

위의 예시는 컴파일 에러가 뜬다.

변수는 분명 int 정보만 원하고 있다.

이 때 1.0이라는 실제 데이터는 int 정보를 이미 가지고 있고, 소수점을 표현하는 double형 데이터이다.

변수라는 것은 원하는 정보가 실제 데이터에 있을때, 문제 없이 받아올 수 있다.

위의 예시가 컴파일 에러가 뜨는 이유는 실제 데이터 1.0이라는 것이 a변수에 들어가면 1로 바뀌기 때문에 실제 데이터가 손실되는 것을 막고자 하는 것이다.

하지만 코드를 작성하는 프로그래머가 데이터가 손실된다는 것을 이미 알고 있고 OOP의 다형성을 이용하고 싶을때는 아래와 같이 캐스팅을 하는 것이다.

int a = (int)1.0;

실제 데이터 앞에 (data type)을 붙여주면 캐스팅이 된다. 따라서 a에는 1.0 대신 캐스팅된 1이 들어간다.

반대의 상황은 어떨지 아래 코드를 보자.

double b = 1;

위의 상황은 컴파일 에러가 뜨지 않는다.

하지만 분명 변수가 원하는 정보는 더블형 데이터 자료형이지만, 실제 데이터는 1이라는 int 자료형만 넣었다.

원칙적으로는 변수가 원하는 정보를 충족하지 않을 시, 컴파일 에러가 떠야 한다.

컴파일 에러가 뜨지 않는 이유는 기본형끼리의 캐스팅이기 때문이다.

분명 실제데이터는 1밖에 넣지 않았지만 기본 자료형은 이미 컴파일러가 알고 있는 자료형이다.

따라서, 더블형 데이터의 형태를 추측으로 알 수 있는 것이다.

즉, 컴파일러가 자동으로 더블형으로 바꿔주는 것이지, 원칙적으로는 안된다는 것을 알아야 한다.

실제로 다운캐스팅 같은 경우는 참조형끼리의 형변환 이므로, 컴파일러는 참조형 데이터를 추리하지 못한다.

따라서, 위 개념과 같이 기본적으로 다운캐스팅은 성립되지 않는 개념이다.

다음 포스팅에서 업캐스팅다운캐스팅에 대해 알아본다.


참고 문서






© 2019. by RaP0d

Powered by aiden