Protocol

권현석·2022년 12월 27일
0

prototocol and delegate

목록 보기
1/3

  • myPenguin은 Bird class를 inherit해서 fly 메서드를 갖고 있지만 실제로 날 수 있는 펭귄은 없다. 이게 class를 사용했을 때 문제점이다.

  • inherit를 하지 않고 structure를 만들어도 superclass와 subclass 때문에 myPenguin은 날 수 있게 되는 문제가 생긴다.

  • museum.flyingDemo(flyingObject: )에는 Bird class를 inherit한 class가 들어와야 함으로 AirPlane을 class로 만들어 Bird Class를 inherit 해주었다.

  • fly 메서드를 AirPlane class에서 override하지 않으면 myPlane이 새처럼 날게 되는 오류가 있어서 fly 메서드를 override 해줌.

  • 하지만 이렇게 override해서 fly메서드를 수정한다 하더라도 myPlane이 layEggs가 되버리는 오류가 생긴다.

그러면 우리는 fly를 Bird class에서 어떻게 분리하고, structure와 class가 모두 fly를 할 수 있게 만들 수 있을까?

=> protocol을 사용하면 된다

  • protocol에 정의된 메서드는 body를 갖지 않는다. 그 body는 이 protocol을 adopt한 structure와 class에서 정의된다.


  • protocol CanFly를 certificate로 생각하고 CanFly가 필요한 Eagle Class와 Airplane structure에 이를 adopt한다.
  • FlyingMuseum structure에 flyingDemo 메서드에 CanFly를 data type처럼 할당 할 수 있다.
  • FlyingMuseum에는 날 수 있는 Eagle과 Airplane만 할당 되고 53번 라인처럼 여기에 myEagle과 myPlane을 할당 할 수 있다.

⭐️ super class가 inherit된 class에 protocol을 adopt할 경우
=> superClass, Protocol1, Protocol2 순으로 할당(콤마로 여러 프로토콜 adopt 가능)

profile
wanna be an iOS developer

0개의 댓글