230526(금)-TIL

조우진·2023년 5월 30일
0

TIL

목록 보기
8/28

마주친 문제

의문점 : 강제 타입변환 왜하는건지?

강의 내용 중 강제 타입변환의 경우
포유류 고래 = 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과 같은 예외가 발생할 수 있다. 따라서 강제 타입 변환을 사용할 때는 주의해야 한다.

튜터 답변 : 타회사와 자회사간 코드를 합치게 된다면, 이름을 같게해도 컴퓨터가 다르게 인식하는 경우가 있다. 이를 합칠 때 사용한다

profile
공부노트

0개의 댓글