336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
다형성이란 각 객체가 동일한 인터페이스에 대해 서로 다른 동작을 수행하도록 하는 것을 말한다.
 - 객체가 다형성을 띄면 객체 사용에 있어 편리성이 증대된다.

객체지향에서 말하는 인터페이스는 구현부가 없는 메서드이다.

실질적인 구현은 상속받은 클래스에 있다.

airforce.py



bomber.py



fighter.py

war_game.py

결과값 : 


그러나 위 예제에서는 문제가 있다.

1. war_game 내에서 넘어온 인스턴스가 정말 airforce인지 체크를 해야한다.

2. take_off, fly, attack, land 를 구현해야 한다는 강제성이 없다.

   - 인터페이스를 상속 받은 클래스는 반드시 인터페이스의 메소드를 구현해야 하는데 파이썬에서는 이를 강제할 수 있는 방법이 없다. (굉장히 느슨함 - 개발자가 알아서 선택적으로 구현해야 한다)


그러면 war_game에서 airforce 객체만 처리할 수 있도록 수정해보자


머저 기본 object를 상속받는 Car 클래스를 선언하고


기존의 war_game에서 Car 클래스의 인스턴스를 넘겨보도록 한다



다연히 Car 클래스에는 take_off 와 같은 메소드가 없기 때문에 에러가 발생하다.


결국 war_game 메소드안에서 매개변수로 넘어온 인스턴스가 정말 airforce 를 상속받은 클래스인지 체크를 해야 한다

위와 같이 typeid 를 이용하여 체크하면 된다.


그러나 과연 좋은 방법 일까?

war_game 메소드에서 직접 자신 클래스에 대한 type check를 하게 되면 강한 결합이 생기게 된다.


기본적으로 객체지향에서의 설계에서는 느슨한 결합이 되도록 인터페이스를 구현하고 이를 구현하는 함수는 인터페이스를 통해서 각 자식의 기능을 실행해야 한다.

해결 방법은 isinstance 를 이용하여 매개변수로 넘어온 인스턴스가 부모인지 체크하면 된다.


블로그 이미지

뚱땡이 우주인

,