인터페이스

Python 중급 객체 지향 프로그래밍

Jake Roach

Data Engineer

인터페이스

오직 추상 메서드만으로 구성된 특별한 클래스. 이를 구현하는 클래스와 계약을 맺습니다.

  • 추상 메서드 정의 필수
  • 메서드 정의의 골격 제공
  • 매개변수는 일치할 필요 없음
  • 형식적 또는 비형식적

$$

$$

우선 비형식적 인터페이스부터 시작합니다!

세 개의 추상 메서드를 가진 파이썬 인터페이스 다이어그램.

Python 중급 객체 지향 프로그래밍

덕 타이핑을 통한 비형식적 인터페이스

class Course:
    def assign_homework(self, assignment_number, due_date):
        # Typically, the pass keyword will be used when creating an interface
        pass  

    def grade_assignment(self, assignment_number):
        pass
  • 덕 타이핑
  • assign_homework()grade_assignment() 추상 메서드
Python 중급 객체 지향 프로그래밍

덕 타이핑을 통한 비형식적 인터페이스

class ProgrammingCourse:
    def __init__(self, course_name):
        self.course_name = course_name

    def assign_homework(self, due_date):
        # Some implementation of assign_homework here...

    def grade_assignment(self, assignment_number):
        # Some implementation of grade_assignment here...
Python 중급 객체 지향 프로그래밍

ABC와 @abstractmethod로 만드는 형식적 인터페이스

from abc import ABC, abstractmethod

class Course(ABC):    
    @abstractmethod
    def assign_homework(self, assignment_number, due_date):
        pass

    @abstractmethod
    def grade_assignment(self, assignment_number):
        pass

형식적 인터페이스는 추상 기본 클래스와 어떻게 다를까요?

Python 중급 객체 지향 프로그래밍

인터페이스 vs. 추상 기본 클래스

인터페이스

  • 이를 구현하는 클래스와의 “계약” 정의
  • “반드시 수행”
  • 형식적 또는 비형식적
  • 추상 메서드만 포함(구현 메서드 없음)
  • 거의 동일한 클래스들

추상 기본 클래스

  • 공통 특성을 가진 클래스의 “청사진” 생성
  • “~이다(is-a)”
  • 보통 형식적만 해당
  • 추상 메서드와 구현 메서드 혼합
  • 비슷해 보이고 동작하는 클래스들
Python 중급 객체 지향 프로그래밍

형식적 인터페이스 구현하기

class ProgrammingCourse(Course):
    def __init__(self, course_name):
        self.course_name = course_name

    def assign_homework(self, due_date):
        # Some implementation of assign_homework here...

    def grade_assignment(self, assignment_number):
        # Some implementation of grade_assignment here...

intermediate_oop = ProgrammingCourse("Intermediate Object-Oriented Programming")
Python 중급 객체 지향 프로그래밍

형식적 인터페이스 미구현 시 실패

class ProgrammingCourse(Course):
    def __init__(self, course_name):
        self.course_name = course_name

    def assign_homework(self, due_date):
        # Some implementation of assign_homework here...

intermediate_oop = ProgrammingCourse("Intermediate Object-Oriented Programming")
 ...
    intermediate_oop = ProgrammingCourse("Intermediate Object-Oriented Programming")
TypeError: Can't instantiate abstract class ProgrammingCourse with abstract method
    grade_assignment
Python 중급 객체 지향 프로그래밍

Ayo berlatih!

Python 중급 객체 지향 프로그래밍

Preparing Video For Download...