나누고 싶은 개발 이야기

Data Engineer로서 기록하고 공유하고 싶은 기술들. 책과 함께 이야기합니다.

Language/python

[python] 상속 기본 및 factory method 패턴 정리

devidea 2018. 3. 27. 18:24
회사에서 python으로 코드를 작성하는 중에 비슷한 비즈니스를 처리하지만 타입에 따라 다르게 동작하는 기능을 넣어야 하는 필요가 생겼다.
비슷한 비즈니스 처리 중에 공통으로 쓰는 것도 있고 타입에 따라 약간 차이나는 것도 있다.

객체지향에 익숙한 사용자라면 상속을 통해 해당 기능을 처리해야 겠다고 바로 생각할 것이다.
그래서 python 문법 정리도 할 겸 상속에 대해 기본적으로 기술하고, 객체를 생성하는 과정에서 factory 패턴을 적용했는데 그 부분도 정리하고자 한다.
  • 상속
    • 객체들 간의 관계를 구축하는 방법이다.
    • 상속의 핵심을 계층구조를 표현하는 것이다.

python 상속의 문법

class 클래스명(상속할 클래스명)
  • python에서는 class 정의 시에 괄호에 상속받을 부모클래스만 적으면 끝난다.
  • 자식 클래스는 부모의 모든 기능을 사용할 수 있다.
    • method overriding
      • 부모 클래스의 메서드와 동일한 이름으로 작성하면 기능이 overriding(덮어쓰기) 되어 기능이 대체된다.
class ChildClass(BaseClass):
    pass

    # method overriding
    def method_overriding(self):
        return “overriding"


factory 패턴

factory 패턴에 대해 설명하기 전에 요구사항을 정의해보자.
  • type
    • 특정 값(type)에 따라 BaseClass의 기능을 상속한 ChildClass1, ChildClass2를 생성한다.
    • 특정 값(type) 지정되지 않은 값이라면 Exception을 발생시킨다.
class BaseClass():
    @classmethod
    def factory(cls, type):
        if type not in [“type1”, “type2”]:
            raise Exception(“no type”)
       
        if type == “type1”:
            return ChildClass1
        elif type == “type2”:
            return ChildClass2

child = BaseClass.factory(“type1”)

BaseClass에 classmethod를 하나 만들고 type을 받을 수 있도록 파라미터를 추가했다.
type이 “type1”, “type2” 중에 하나인지 여부를 판단하고 아니라면 Exception을 raise한다.
type이 확인되었다면 ChildClass를 만들고 리턴만 해주면 된다. 

글을 적다보니 너무 기본적인 내용인 것 같다. 그래도 정리하는 차원에서 남긴다.


[참고]


반응형

'Language > python' 카테고리의 다른 글

[python] list  (0) 2018.03.28
Generators (제너레이터)  (0) 2017.04.12