이번에 정리할 내용은 캐스팅입니다. 계속해서 공부를 하고 있는데 기본적인 캐스팅에대한 내용이 계속해서 헷갈려서 정리해 볼려합니다.
캐스팅이란 무엇일까? 캐스팅이란 형변환을 말하는 것입니다. 여기서 형변환을 무엇인가? 모든 연산을 진행할때에는 같은 타입의 피연산자끼리만 수행이 가능하다. 같은 타입끼리 연산을 하는건 상관없지만 다른 타입의 피연산자끼리 연산을 수행이 필요하기위해 같은 타입으로 변경해주는 것을 캐스팅이라고 한다.
구체적인 참조형에 대한 캐스팅은 무엇일까?
참조형 캐스팅이란 무엇일까? 어떤 객체를 다른 타입으로 변환하는 것이라고 설명할 수 있다.
참조형 캐스팅을 사용하는 이유는 OOP(객체지향프로그래밍)에서 매우 중요하기 때문이다. 또한 OOP와 다형성과 관련이 있기 떄문이다.
슈퍼클래스 타입 레퍼런스로 서브클래스의 인스턴스를 참조하는 것
=> 서브클래스의 인스턴스를 슈퍼클래스 타입으로 변환하는 것
컴파일러에 의해 자동 형변환 일어남(= 묵시적 형변환)
참조 가능한 영역이 축소됨
서브클래스의 인스턴스의 멤버 중 공통 항목을 제외한 나머지에 대한 포기 선언을 하는 것
=> 대신, 하나의 슈퍼클래스 타입으로 여러 서브클래스 인스턴스를 참조할 수 있다!
서브클래스 타입 레퍼런스로 슈퍼클래스의 인스턴스를 참조하는 것
=> 슈퍼클래스의 인스턴스를 서브클래스 타입으로 변환하는 것
컴파일러에 의해 자동 형변환이 일어나지 않음
=> 강제 형변환(명시적 형변환) 필수
참조 가능한 영역이 확대됨
=> 존재하지 않는 영역에 대한 참조 위험성 때문에
명시적 형변환 후에도 오류가 발생할 수 있다!
=> 대부분의 다운캐스팅은 허용되지 않는다!
이전에 이미 업캐스팅 된 레퍼런스를 다시 다운 캐스팅 하는 경우에만 안전하므로
객체간의 상속관계를 고려하여 캐스팅해야한다!