실질적인 구현은 상속받은 클래스에 있다.
airforce.py
bomber.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 를 이용하여 매개변수로 넘어온 인스턴스가 부모인지 체크하면 된다.
'ⓟrogramming > Python' 카테고리의 다른 글
[Python] 인스턴스 메서드, 클래스 메서드 그리고 정적 메서드 (0) | 2016.10.13 |
---|---|
[Python] 인스턴스 속성과 클래스 속성 (0) | 2016.10.13 |
[Python] 다중 상속 (0) | 2016.10.13 |
[Python] 오버로딩 - overoading (0) | 2016.10.13 |
[Python] 상속 - Inheritance (0) | 2016.10.13 |