본문 바로가기
[Language] - Python

#5. 덕 타이핑 (Duck Typing)

by Bebsae 2020. 12. 29.

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

 

https://qastack.kr/programming/2124190/how-do-i-implement-interfaces-in-python

파이썬이 다중 상속이 가능한 것은 알고있었지만 덕 타이핑? 이라는 말은 처음 들어봤다. 그래서 바로 또 서칭서칭!

 

  • Duck Typing - 'If it walks like a duck and it quacks like a duck, then it must be a duck' 해석해보면 '오리처럼 걷고, 오리처럼 꽥꽥거리면, 그것은 틀림없이 오리다.' 라는 뜻입니다.

 

그렇다. 필자는 오리를 매우 좋아한다. 그게 중요한게 아니라 파이썬은 객체의 타입보다 행위를 더 중요하게 여긴다는 의미이다. 어떤 의미인지 예제 코드를 보겠다.

 

class Duck:
    def fly(self):
        print('Pddd...')
        
class Seagull:
    def fly(self):
        print('Wwww...')
        
class People:
    def walk(self):
        print('tok tok')
        
def do(o):
    o.fly()

do(Duck())
do(Seagull())
do(People())

 

Duck과 Seagull은 분명히 다른 타입의 객체임에 틀림없다. 하지만 그런건 신경쓰지 않고 같은 메소드명(fly)가 있으면 실행할 수 있다. 반대로 People은 fly() 메소드가 없기때문에 에러를 뿜는다. 다음은 컴파일 결과이다. 

 

People error

'[Language] - Python' 카테고리의 다른 글

#7. zip  (0) 2021.03.24
#6. property 데코레이터  (8) 2021.02.02
#4. 추상 클래스 (Abstract Class)  (0) 2020.12.28
#3. pickle 모듈  (0) 2020.12.18
#2. 접근제한자 (Access Modifier)  (0) 2020.12.14

댓글