다운 캐스팅 질문입니다!!

1 답변 글타래를 보이고 있습니다
  • 글쓴이
    • ljwon1995
      참가자
      • 글작성 : 1
      • 답글작성 : 1
      1,070 포인트

      class Coffee{ let name: String let shot: Int var description: String{ "(shot) shot(s) (name)" } init(shot: Int){ self.shot = shot self.name = "coffee" } } class Latte: Coffee{ var flavor: String override var description: String{ "(shot) shot(s) (flavor) latte" } init(flavor: String, shot: Int){ self.flavor = flavor super.init(shot: shot) } } let yourCoffee: Latte = Latte(flavor: "vanilla", shot: 3) let casted: Coffee = yourCoffee as Coffee print(casted.description) /* 3 shot(s) vanilla latte */

      print(casted.description) 에서 casted가 Coffee 타입이니 Coffee 클래스에 정의된 메서드가 호출될 것으로 기대했었는데 (3 shot(s) coffee)
      실제로는 casted에 담긴 인스턴스의 원 타입의 메서드가 호출되는 듯 하네요 (Latte 클래스)

      혹시 제가 생각했던대로, Coffee 클래스에 정의된 메서드를 호출하고 싶으면 어떤 과정을 거쳐야할까요?

      • 이 게시글은 ljwon1995에 의해 1 month 전에 수정됐습니다.
      • 이 게시글은 ljwon1995에 의해 1 month 전에 수정됐습니다.
      • 이 게시글은 ljwon1995에 의해 1 month 전에 수정됐습니다.
      • 이 게시글은 ljwon1995에 의해 1 month 전에 수정됐습니다.
      0
    • 야곰
      키 마스터
      • 글작성 : 37
      • 답글작성 : 485
      15,050 포인트

      스위프트 언어에선 불가합니다.
      다만 Objective-C의 힘을 빌리면 가능할 수도 있어요.
      [이 글]을 참고해보세요 🙂

      참, 그리고 여러줄 코드는 백틱 한개가 아니고 세 개를 사용해야합니다.
      [참고 글]

      • 이 답변은 야곰에 의해 1 month 전에 수정됐습니다.
      +1
      avatar
      • ljwon1995
        참가자
        • 글작성 : 1
        • 답글작성 : 1
        1,070 포인트

        답변 너무 감사드립니다 🙂

        마크 다운 문법에 맞게 수정도 하였습니다 ㅎㅎ

        두가지 더 여쭤보면,,

         

         


        class Coffee{     let name: String     let shot: Int       var description: String{         "(shot) shot(s) (name)"     }       init(shot: Int){         self.shot = shot         self.name = "coffee"     }   }   class Latte: Coffee{     var flavor: String       override var description: String{         "(shot) shot(s) (flavor) latte"     }       init(flavor: String, shot: Int){         self.flavor = flavor         super.init(shot: shot)     }   }   let aCoffee: Coffee = Latte(flavor: "Vanilla", shot: 1) let anotherCoffee: Latte = Latte(flavor: "Chocolate", shot: 2)   if let castedCoffee: Coffee = anotherCoffee as? Coffee{     print("CAST SUCCEEDED") }   if let castedLatte: Latte = aCoffee as? Latte{     print("CAST SUCCEEDED") }

         

        1.

        자식클래스를 부모 클래스로 형변환 하는 것이나, 

        부모 클래스를 자식 클래스로 형변환 하는 것 모두 “다운”캐스팅이라고 부르나요?

         

        2.

        위에 원래 제가 했던 질문이 스위프트에서는 불가능하다면, 그럼 자식 클래스를 부모 클래스로 형 변환하여 활용될 일이 없다고 느껴지는데,

        그럼에도 활용하는 케이스가 있을까요?

         

        • 이 답변은 ljwon1995에 의해 1 month 전에 수정됐습니다.
        • 이 답변은 ljwon1995에 의해 1 month 전에 수정됐습니다.
        +1
        avatar
        • 야곰
          키 마스터
          • 글작성 : 37
          • 답글작성 : 485
          15,050 포인트
          1. 아니오 통상 부모 클래스의 타입으로 캐스팅 하는 것을 업캐스팅이라 하기도 합니다. 다운캐스팅은 자식 클래스의 타입으로 캐스팅 하는 것을 뜻해요.
          2. 특별히 그럴일은 많이 없습니다. 어차피 업캐스팅은 크게 의미가 없어요.
          +1
          avatar
1 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.

logo landscape small

사업자번호 : 260-27-00477
통신판매업 신고번호 : 제 2020-충북청주-0663 호
고객센터 : 카카오톡채널 @yagom