0Pricing
Python Academy · 강의

다형성과 덕 타이핑

호환되는 모든 객체에서 작동하는 다형성 코드를 작성합니다.

다형성과 덕 타이핑은(는) CoddyKit의 무료 Python Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Python Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

소개

다형성을 사용하면 서로 다른 객체가 동일한 인터페이스에 응답할 수 있습니다. 덕 타이핑이란 객체가 오리처럼 행동하면 오리로 간주한다는 의미입니다.

다형성이란 무엇입니까?

다형성은 ‘여러 형태’를 의미합니다. 동일한 메서드 이름이 객체에 따라 다르게 동작합니다. 파이썬은 이러한 방식을 적극적으로 활용합니다.
class Cat:
    def speak(self): return 'Meow'
class Dog:
    def speak(self): return 'Woof'
for animal in [Cat(), Dog()]:
    print(animal.speak())

덕 타이핑

파이썬에서는 다형성을 위해 클래스 계층 구조가 필요하지 않습니다. 객체에 필요한 메서드가 있으면 작동합니다. 인터페이스도 필요하지 않습니다.
class Duck:
    def quack(self): return 'Quack'
class Person:
    def quack(self): return 'I am quacking like a duck'
def make_it_quack(duck):
    print(duck.quack())
make_it_quack(Duck())
make_it_quack(Person())

다형적 함수

문자열, 리스트, 딕셔너리, 튜플에서 모두 len()을 사용할 수 있는 이유는 이들이 __len__을 구현하기 때문입니다. 이것이 내장된 다형성입니다.
for obj in ['hello', [1,2,3], {'a':1}]:
    print(type(obj).__name__, len(obj))

연산자 오버로딩

+가 정수, 실수, 문자열, 리스트에서 작동하는 이유는 각 자료형이 __add__를 서로 다르게 구현하기 때문입니다.
print(1 + 2)        # int addition
print('a' + 'b')    # string concat
print([1] + [2])    # list concat

프로토콜 기반 덕 타이핑

반복 프로토콜에서는 __iter__와 __next__가 있는 모든 객체를 for 반복문에서 사용할 수 있습니다. 기본 클래스는 필요하지 않습니다.
class Squares:
    def __init__(self, n): self.n,self.i=n,0
    def __iter__(self): return self
    def __next__(self):
        if self.i>=self.n: raise StopIteration
        x=self.i**2; self.i+=1; return x
print(list(Squares(5)))

EAFP와 LBYL

EAFP(허가를 구하기보다 용서를 구하는 편이 쉽다는 방식)는 try/except를 사용합니다. LBYL(뛰어들기 전에 살펴보는 방식)은 if/hasattr를 사용합니다. 파이썬은 EAFP를 선호합니다.
# LBYL:
if hasattr(obj, 'quack'):
    obj.quack()
# EAFP (Pythonic):
try:
    'hello'.quack()
except AttributeError:
    print('no quack')

안전한 디스패치를 위한 isinstance()

자료형별 동작이 필요할 때는 AttributeError를 처리하는 것보다 isinstance()를 사용하는 편이 더 깔끔합니다.
def process(data):
    if isinstance(data, str):
        return data.upper()
    elif isinstance(data, list):
        return [x*2 for x in data]
print(process('hi'))
print(process([1,2,3]))

프로토콜로서의 추상 기본 클래스

from abc import ABC, abstractmethod는 형식적인 프로토콜을 정의합니다. 하위 클래스는 추상 메서드를 구현해야 합니다.
from abc import ABC, abstractmethod
class Drawable(ABC):
    @abstractmethod
    def draw(self): pass
class Circle(Drawable):
    def draw(self): print('O')
Circle().draw()

typing.Protocol (3.8 이상)

class MyProtocol(Protocol):은 ABC 없이 구조적 서브타이핑을 정의합니다. 정적 검사를 위해 mypy와 함께 사용할 수 있습니다.
from typing import Protocol
class Quackable(Protocol):
    def quack(self) -> str: ...
def make_quack(x: Quackable) -> str:
    return x.quack()
print('protocol demo')

실제 다형성 활용

올바른 인터페이스를 가진 모든 객체를 받을 수 있도록 API를 설계하십시오. 그러면 코드를 수정하지 않고도 기능을 확장할 수 있습니다.
class JSONSerializer:
    def serialize(self, obj): import json; return json.dumps(obj)
class XMLSerializer:
    def serialize(self, obj): return f'<data>{obj}</data>'
def export(data, serializer):
    return serializer.serialize(data)
print(export({'x': 1}, JSONSerializer()))

빠른 확인

파이썬에서 덕 타이핑은 무엇을 의미합니까?

복습

다형성: 동일한 인터페이스와 서로 다른 동작입니다. 덕 타이핑: 자료형이 아니라 동작이 중요합니다. 프로토콜은 인터페이스를 비공식적으로 정의합니다. EAFP(try/except)는 파이썬다운 방식입니다.

계속하기

훌륭하게 진행하고 계십니다! 다음 개념을 완전히 익힐 때까지 계속 학습하십시오.

자주 묻는 질문

“다형성과 덕 타이핑” 강의는 무료인가요?

네 — “다형성과 덕 타이핑” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Python Academy 강의 전체를 잠금 해제할 수 있습니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“다형성과 덕 타이핑”에서 뭘 배우나요?

호환되는 모든 객체에서 작동하는 다형성 코드를 작성합니다. 브라우저에서 직접 실행하는 실습 코드로 Python Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Python Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Python Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“다형성과 덕 타이핑” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Python Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Python Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 단일 상속
  2. 메서드 오버라이딩과 super()
  3. 다중 상속과 MRO
  4. 다형성과 덕 타이핑
← Python Academy(으)로 돌아가기