파이썬(Python) - Factory Method Pattern
오늘은 디자인 패턴 중에서 특정 언어에 국한되지 않고 많이 사용되는 팩토리 메소드(Factory Method)
패턴에 대해서 알아보겠습니다.
팩토리는 뜻 그대로 '공장' 즉, 특정 역할을 가진 객체를 생산하는 기능을 수행한다고 볼 수 있으며, 다시 말해서 객체를 만들어 내는 부분을 서브 클래스에 위임하는 패턴이라고 생각해 볼 수 있습니다.
Java(자바)언어에서도 많이 활용되지만, 파이썬에서도 얼마든지 패턴을 구현 할 수 있습니다.
그러면 문서 하단에서 간단하게 예제를 작성해보겠습니다.
파이썬(Python) - Factory Method Pattern 예제 소스 코드
아래 예제에서 간단하게 다양한 제품군의 DB Connection 역할을 수행하는 메소드를 팩토리 메소드
패턴 및 클래스 다형성을 추가해서 적용해 보았습니다.
factory_p.py
12345678910111213141516171819202122232425262728293031323334 from abc import ABC, abstractmethod class DBManager(ABC): @abstractmethod def connection(self): pass class SqlServer(DBManager): def connection(self): return ('MicroSoft Database Connected.') class Oracle(DBManager): def connection(self): return ('Oracle Database Connected.') class MariaDB(DBManager): def connection(self): return ('Maria Database Connected.') class DbConnFactory: def get_db_connection(self, db): return db.connection() db_fact = DbConnFactory() print(db_fact.get_db_connection(SqlServer()))print(db_fact.get_db_connection(Oracle()))print(db_fact.get_db_connection(MariaDB())) cs
- 5번 라인 : 파이썬 abstractmethod 데코레이터를 활용해서 추상 메소드 선언
- 25 라인 : DbConnFactory 클래스 인스턴스 생성
- 31~34라인 : 각 Database Class 별 가상 연결 테스트 출력
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | from abc import ABC, abstractmethod class DBManager(ABC): @abstractmethod def connection(self): pass class SqlServer(DBManager): def connection(self): return ('MicroSoft Database Connected.') class Oracle(DBManager): def connection(self): return ('Oracle Database Connected.') class MariaDB(DBManager): def connection(self): return ('Maria Database Connected.') class DbConnFactory: def get_db_connection(self, db): return db.connection() db_fact = DbConnFactory() print(db_fact.get_db_connection(SqlServer())) print(db_fact.get_db_connection(Oracle())) print(db_fact.get_db_connection(MariaDB())) | cs |
- 5번 라인 : 파이썬 abstractmethod 데코레이터를 활용해서 추상 메소드 선언
- 25 라인 : DbConnFactory 클래스 인스턴스 생성
- 31~34라인 : 각 Database Class 별 가상 연결 테스트 출력
파이썬(Python) - Factory Method Pattern 실행 화면
아래 이미지로 실제 실행 화면을 확인하실 수 있습니다.
실제 실행 화면
마무리
이번 예제에서는 파이썬 디자인 패턴 중 팩토리 메소드 패턴 및 다형성 사용에 대해서 간단한 예제 소스를
통해 설명드렸습니다.
물론, 본 예제보다 더욱 복잡한 필드 코딩에서는 클래스간의 결합도를 현저하게 낮출 수 있는 디자인 패턴
본연의 장점을 체감할 수 있으리라 생각이 됩니다.
즉, 클래스의 변경이 발생할 경우 결합도의 강약에 따라 영향을 받는 타 클래스의 수정 사항 발생
여부를 판가름 할 수 있다고 볼 수 있습니다.
결과적으로 직접 인스턴스 생성 방지를 통해서 효율적인 코드 제어 및 생산성 있는 어플리케이션을 개발
할 수 있다고 생각합니다.
Java 뿐만 아니라 파이썬에서도 유용한 디자인 패턴 코딩을 직접 해보시는건 어떨까요?
다음 시간에도 파이썬 관련 유용한 주제에 대해서 포스팅 하도록 하겠습니다.
소스코드 다운로드 : factory_p.zip
'언어 > Python' 카테고리의 다른 글
파이썬(Python) - 매직(Special) 메소드 및 연산자 오버라이딩 설명 및 실습 (2) | 2019.07.23 |
---|---|
파이썬(Python) - 템플릿 메소드(Template Method) 패턴(디자인패턴) (0) | 2019.03.06 |
파이썬 아나콘다(Anaconda) - 심화 사용법 정리(2) - env 명령어 (2) | 2019.01.26 |
파이썬 아나콘다(Anaconda) - 심화 사용법 정리(1) - list, search 명령어 (0) | 2019.01.23 |
파이썬(Python) - 데코레이터 (Decorator) 패턴 사용 예제 및 소스코드 (0) | 2018.12.10 |