강의 내용 중 강제 타입변환의 경우
포유류 고래 = new 고래객체();와 같은 식으로 선언하여 강제형변환을 하되, '고래'는 고래객체()에 선언된 '수영하다()'를 사용할 수 없다고 배웠다.
그럼 왜 강제형변환을 사용하지 말고 그냥 고래 고래이름 = new 고래객체();를 선언하여 부모클래스는 두고 자식 클래스로 선언을 하면 되는 것 아닌가?
public class Main { public static void main(String[] args) { // 고래는 포유류이기 때문에 포유류 타입으로 변환될 수 있습니다. Mammal mammal = new Whale(); // 하지만 포유류 전부가 바다에 살고 수영을 할 수 있는 것은 아니기 때문에 // 수영 하다 메서드는 실행 불가 // 즉, 부모 클래스에 swimming이 선언되어있지 않아서 사용 불가능합니다. // mammalia.swimming(); // 오류 발생 // 반대로 모든 포유류가 전부 고래 처럼 수영이 가능한 것이 아니기 때문에 타입변환이 불가능합니다. // 즉, 부모타입의 객체는 자식타입의 변수로 변환될 수 없습니다. // Whale whale = new Mammal(); // 오류 발생 mammal.feeding(); } }
// 자식타입객체가 자동 타입변환된 부모타입의 변수 Mammal mammalia = new Whale(); mammal.feeding(); // 자식객체 고래의 수영 기능을 사용하고 싶다면 // 다시 자식타입으로 강제 타입변환을 하면된다. Whale whale = (Whale) mammalia; whale.swimming();
강제 타입 변환은 상황에 따라 유용할 수 있다.
예를 들어, 어떤 인터페이스를 구현한 여러 클래스가 있을 때, 인터페이스에 선언된 메서드를 사용하기 위해 해당 인스턴스를 인터페이스 타입으로 형변환하여 사용할 수 있다.
그러나 강제 타입 변환을 남용하면 코드의 가독성을 해치고 실행 시에 ClassCastException과 같은 예외가 발생할 수 있다. 따라서 강제 타입 변환을 사용할 때는 주의해야 한다.
튜터 답변 : 타회사와 자회사간 코드를 합치게 된다면, 이름을 같게해도 컴퓨터가 다르게 인식하는 경우가 있다. 이를 합칠 때 사용한다