오늘은 캐스팅의 관해서 포스팅 한다. (형변환이라 부르기도 한다.)


캐스팅은 OOP(객체지향프로그래밍) 에서 매우 중요하다.


왜냐하면 캐스팅은 OOP의 다형성과 관련이 있기 때문이다.


자바를 통해서 설명하겠다. (어떤 언어든 상관없다.)


자바에서의 데이터형은 아래와 같이 크게 2가지로 나눌 수 있다. 


데이터형 : 기본형 , 참조형.


자바에서 기본형은 8가지다. ( boolean, int, short, byte,double, long, float, char ) 이다.


자바에서 참조형은 만들기 나름이지만, 예시를 들자면, 많이쓰는 String 정도가 되겠다.


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


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


기본 데이터형에서의 캐스팅은 원칙적으로 데이터손실을 막고자 한다.


아래의 예시를 보자.


int a = 1.0; 


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


변수는 분명 int 정보만 원하고 있다. 1.0이라는 실제데이터는 int 정보를 이미 가지고 있고, 소수점을 표현하는


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


하지만 위의 예시는 왜 컴파일 에러가 뜰까?


답은 실제 데이터 1.0이라는 것이 a 변수에 들어 가면 1로 바뀌기 때문에 실제 데이터가 손실되는것을 막고자 하는 것이다.


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


아래와 같이 캐스팅을 하는 것이다. 


int a = (int)1.0;


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


반대의 상황은 어떨까? 아래의 상황을 보자.


double b = 1;


위의 상황은 컴파일 에러가 뜨지 않는다. 하지만 의문을 가져야 한다.


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


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


하지만 컴파일 에러가 뜨지 않는 이유가 무엇일까?


그 이유는 기본형 끼리의 캐스팅이기 때문이다. 분명 실제 데이터는 1밖에 넣질 않았지만,


기본 자료형은 이미 컴파일러가 알고 있는 자료형이다. 따라서, 더블형 데이터의 형태를 추측으로 알 수 있는 것이다.


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







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


따라서, 윗 개념과 일맥상통하게 기본적으로 다운캐스팅은 성립되지 않는 개념이다. 


다음 포스팅때 업캐스팅과 다운캐스팅에 대해 그 의문을 풀어볼 것이다.



http://mommoo.tistory.com/41 - 업캐스팅

http://mommoo.tistory.com/51 - 다운캐스팅 



포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

+ Recent posts