ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 서브 타입 슈퍼 타입
    카테고리 없음 2023. 12. 20. 16:15

     

     

    A와 B 가 있고 B 가 A의 서브타입이면 A가 필요한 곳에 어디든 B를 안전하게 사용가능하고

     

    A와 B가 있고 B가 A의 슈퍼타입이면 B가 필요한 곳에는 어디든 A를 안전하게 사용할 수 있다.

     


     

    슈퍼 타입에서 서브로 가는걸 DOWNCASTING

     

    서브에서 슈퍼로 가는걸 UPCASTING

     



     

    UPCASTING 

     

    서브타입->슈퍼타입으로 변화

     

    let dog: Dog = new Dog('또순이');
    let animal: Animal = dog; // upcasting 발동! 
    animal.eat(); // 에러. 슈퍼타입(Animal)으로 변환이 되어 eat 메서드를 호출할 수 없어요! ---EAT는 서브타입에서만 사용가능

     

    도그가 서브 타입 애니멀이 슈퍼타입이면

    슈퍼타입에 도그를 넣으면 슈퍼타입이 된다.

     

     

    • upcasting이 필요한 이유는 서브타입 객체를 슈퍼타입 객체로 다루면 유연하게 활용할 수 있기 때문이에요!
      • 예를 들어, Dog, Cat, Lion 그리고 기타 등등 다양한 동물을 인자로 받을 수 있는 함수를 만들고 싶다면?
        • 올바른 선택: 아! Animal 타입의 객체를 받으면 모두 다 받을 수 있겠구나!
        • 잘못된 선택: 아! union으로 새로운 타입을 만들어서 해당 타입의 객체를 받게해야겠구나!

     

    DOWNCASTING

     

    슈퍼를 서브로 변환한 것

     

    let animal: Animal;
    animal = new Dog('또순이');

    let realDog: Dog = animal as Dog;
    realDog.eat(); // 서브타입(Dog)로 변환이 되었기 때문에 eat 메서드를 호출할 수 있죠!

     

    필요한 경우는 도그 같은 서브타입 속성을 써야할 때 사용한다.

Designed by Tistory.