덕 타이핑 (Duck Typing)

2020. 12. 29. 12:14·[Language] - Python

개요


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

 

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' 해석해보면 '오리처럼 걷고, 오리처럼 꽥꽥거리면, 그것은 틀림없이 오리다.' 라는 뜻입니다.

 

그렇다. 필자는 오리를 매우 좋아한다. 그게 중요한게 아니라 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 error

  • 반대로 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
'[Language] - Python' 카테고리의 다른 글
  • zip
  • property 데코레이터
  • 추상 베이스 클래스 (Abstract Base Class)
  • pickle 모듈
Bebsae
Bebsae
  • Bebsae
    뱁새zip
    Bebsae
  • 전체
    오늘
    어제
    • 분류 전체보기 (108)
      • [DevOps] - Kubernetes (5)
      • [DevOps] - AWS (1)
      • [AI] - Machine Learning (19)
      • [AI] - Neural Network (7)
      • [CS] - Network (2)
      • [CS] - Data Structure (3)
      • [CS] - Design Pattern (6)
      • [Language] - Python (15)
      • [Library] - Numpy (7)
        • Quick Start (5)
        • API (2)
      • [Framework] - Django (3)
      • [Framework] - QGIS (6)
      • [Framework] - PyQT (4)
      • [Mathematics] - Linear Alge.. (14)
      • [Mathematics] - Statistical (2)
      • [ETC] - Python (3)
      • [ETC] - C++ (1)
      • [ETC] - Linux (1)
      • 논문 (5)
      • 회고록 (3)
      • 생산성 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    QGIS
    선형대수
    교차검증
    신경망
    Machine
    Linear
    algebra
    MachineLearning
    numpy
    디자인패턴
    Learning
    Python
    분해
    머신러닝
    DEEPLEARNING
    decomposition
    Convolution
    파이썬
    linearalgebra
    RNN
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Bebsae
덕 타이핑 (Duck Typing)
상단으로

티스토리툴바