개요
필자는 스트래티지 패턴을 공부하던 도중 인터페이스를 사용하는 예제를 보았다. 그러자 갑자기 의구심이 들었다. Python에는 인터페이스가 없나?? 그래서 바로 구글링을 했다. 그리고 다음과 같은 답변을 보았다.

파이썬이 다중 상속이 가능한 것은 알고있었지만 덕 타이핑? 이라는 말은 처음 들어봤다. 그래서 바로 또 서칭서칭!
Duck Typing - 'If it walks like a duck and it quacks like a duck, then it must be a duck' 해석해보면 '오리처럼 걷고, 오리처럼 꽥꽥거리면, 그것은 틀림없이 오리다.' 라는 뜻입니다.
그렇다. 필자는 오리를 매우 좋아한다. 그게 중요한게 아니라 Python은 객체의 타입보다 행위를 더 중요하게 여긴다는 의미이다. 이처럼 Python이 런타임 도중에 유연한 동작이 가능한 이유는 컴파일 언어가 아닌 인터프리터 언어이기 때문이 아닌가 싶다.
사용 예시
class Duck:
def fly(self):
print('Pddd...')
class Seagull:
def fly(self):
print('Wwww...')
def do(o):
o.fly()
do(Duck())
do(Seagull())
- Duck과 Seagull은 분명히 다른 타입의 객체임에 틀림없다. 하지만 그런건 신경쓰지 않고 같은 메소드명(fly)가 있으면 실행할 수 있다. 즉, 런타임 도중에 객체의 타입과 상관없이 fly() 메소드를 실행시키겠다는 의미이다.
class People:
def walk(self):
print('tok tok')
do(People())

- 반대로 People은 fly() 메소드가 없기때문에 에러를 뿜는다. 다음은 컴파일 결과이다.
'[Language] - Python' 카테고리의 다른 글
| zip (0) | 2021.03.24 |
|---|---|
| property 데코레이터 (8) | 2021.02.02 |
| 추상 베이스 클래스 (Abstract Base Class) (0) | 2020.12.28 |
| pickle 모듈 (0) | 2020.12.18 |
| 접근제한자 (Access Modifier) (0) | 2020.12.14 |