5. Classes and Interfaces

Python에서 클래스와 인터페이스를 다루는 법을 알아보자.

37. Compose classes instead of nesting many levels of built-in types.

  • 딕셔너리의 딕셔너리, 긴 튜플 등 여러 중첩된 내장 타입을 지양하라.
  • 가볍고 수정 불가능한 데이터 컨테이너에 대해서는 전체 클래스를 필요로 하는 대신 namedtuple을 사용하라.
  • 부기 클래스에서 내부 상태 딕셔너리가 복잡해지면 복수의 클래스로 이를 옮겨라.

38. Accept functions instead of classes for simple interfaces.

  • 클래스를 정의하고 인스턴스화하는 대신, 컴포넌트간 간단한 인터페이스에 대해서는 함수를 사용할 수 있다.
  • Python에서 함수나 메소드에 대한 참조는 일급이다. 즉, 표현식 내에 사용될 수 있다.
  • __call__ 메소드는 클래스의 인스턴스가 Python 함수처럼 호출될 수 있게 한다.
  • 함수가 상태를 저장해야 한다면, 상태가 있는 클로져 대신 __call__ 메소드를 구현하는 클래스를 고려하라.

39. Use @classmethod polymorphism to construct objects generically.

  • Python에서 클래스는 __init__ 생성자 하나밖에 없다.
  • 복수의 생성자를 제공하려면 @classmethod를 사용하라.
  • 클래스 메소드 다형성을 사용해서 구체 부분클래스를 제네릭하게 만들고 연결하라.

40. Initialize parent class with super.

  • Python의 표준 메소드 확인 순서(MRO)는 부모 클래스 초기화 순서나 다이아몬드 상속의 문제를 해결한다.
  • super()를 이용해 부모 클래스를 초기화하라.

41. Consider composing functionality with mix-in classes.

  • 믹스인 클래스가 결과물을 대신할 수 있다면 인스턴스 특성 및 __init__과 결합된 다중 상속은 지양하라.
  • 믹스인 클래스가 필요로 한다면 인스턴스 레벨에서 장착 가능한 동작을 통해 클래스별 커스텀화를 구현하라.
  • 믹스인 클래스는 필요에 따라 인스턴스 메소드나 클래스 메소드를 포함할 수 있다.
  • 간단한 동작으로부터 복잡한 기능을 구현하고 싶다면 믹스인 클래스를 구성하라.

42. Prefer public attributes over private ones.

  • private 속성은 Python 컴파일러로부터 엄밀하게 강제되지 않는다.
  • 설계 초기부터, 부분 클래스들의 내부 API와 속성에 대한 접근을 제한하는 대신, 부분 클래스들이 이들을 잘 활용할 수 있도록 하라.
  • private 속성을 통해 접근을 강제하는 대신, 부분 클래스에 의한 접근에 대해 보호되어야 하는 속성들을 문서화하라.
  • 부분 클래스를 제어할 수 없을 경우 이름 충돌을 막아야 할 떄만 private 속성을 쓰라.

43. Inherit from collections.abc for custom container types.

  • 간단한 용례에 대해서는 Python의 컨테이너 타입(list, dict 등)으로부터 직접 상속을 받으라.
  • 커스텀 컨테이너 타입을 올바르게 구현하려면 많은 메소드를 직접 구현해야 한다.
  • 커스텀 컨테이너는 collections.abc로부터 상속을 받아서 요구 인터페이스나 동작을 만족하는지를 보장하라.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중