본문 바로가기
파이썬/파이썬의 디자인 패턴 공부

01_02 디자인 패턴의 개념

by David.Ho 2023. 12. 15.
728x90
반응형

디자인 패턴의 JAVA를 기반으로 제시된 소프트웨어 설계 단계에서 흔히 발생하는 여러 문제의 해결책이며, 디자인 패턴이라는 개념은 발명보다 발견에 가깝습니다.

 

[디자인 패턴의 주요 기능]

- 언어에 독립적이며 모든 프로그래밍 언어에 적용할 수 있다.(python에도???)
- 새로운 패턴이 아직도 연구되고 있다.
- 목적에 맞게 변경될 수 있기 때문에 개발자에게 유용하다.

[디자인 패턴에 대한 개발자의 인식]

- 디자인 패턴은 모든 디자인 문제에 만병통치약이다.(???! 그런가?)
- 문제를 해결하는 훌륭한 해결책이다.
- 대부분의 개발자가 인정하는 해결책이다.
- 패턴이라는 단어는 디자인에 반복적인 요소가 있다는 것을 나타낸다.

 

책의 주장: 설계 단계에서 뿐만 아니라 개발 단계에서도 디자인 패턴에 대한 고민을 해야 한다.
디자인 패턴을 언제 사용해야 하는지도 흥미로운 논제거리다. 소프트웨어 개발 사이클의 분석과 설계 단계 중 언제 사용하는 것이 맞는지에 대한 논쟁이 있다. 디자인 패턴은 이미 알려진 문제의 해결책이다. 그러므로 분석과 설계 단계는 물론 애플리케이션 코드와의 직접적인 관계 때문에 개발 단계에서도 생각해야 한다.

 

[디자인 패턴의 장점]

- 여러 프로젝트에서 재사용될 수 있다.
- 설계 문제를 해결할 수 있다.
- 오랜 시간에 걸쳐 유효성이 입증됐다.
- 신뢰할 수 있는 솔루션이다.

[디자인 패턴 용어]

아무 코드나 디자인을 디자인 패턴으로 분류할 수 없다. 예를 들어 어떤 문제를 해결하는 구조체나 자료 구조를 패턴이라고 부르지 않는다. 디자인 패턴과 관련된 몇 가지 용어를 정리해보자.

 

- 스니펫(Snippet): 데이터베이스에 연결되는 파이썬 코드 등의 특수한 목적을 위한 코드
- 디자인(Design): 특정 문제를 해결하기 위한 해결책
- 스탠다드(Standard): 문제를 해결하는 대표적인 방식. 포괄적이며 현재 상황에 적합한 방식
- 패턴(Pattern): 유사한 문제들을 모두 해결할 수 있는 유효성이 검증된 효율적인 해결책

[디자인 패턴 맥락]

효율적인 디자인 패턴 사용을 위해 개발자는 애플리케이션의 전체 맥락을 정확히 이해해야 한다.

  • 참가자: 디자인 패턴에서 사용되는 클래스를 일컫는다. 클래스는 여러 가지 목적을 달성하기 위해 서로 다른 역할을 수행한다.
  • 비기능적 요구사항: 메모리 최적화와 사용성, 성능 등이 여기에 속한다. 솔루션 전체에 영향을 미치는 핵심적인 요소다.
  • 절충: 디자인 패턴이 모든 상황에 항상 딱 들어맞지 않으므로 절충이 필요하다. 디자인 패턴을 사용하기 위해 결정해야 하는 부분이다.
  • 결과: 적합하지 않는 상황에 디자인 패턴이 사용될 경우, 부정적인 영향을 미칠 수 있다. 개발자는 디자인 패턴으로 인한 결과 및 사용법을 정확히 파악해야 한다.

[동적 언어 패턴]

파이썬은 리스프(Lisp)와 같은 동적 언어이며, 다음과 같은 특성을 같는다.

  • 자료형과 클래스는 런타임 객체이다.
  • 변수의 자료형은 런타임에 변경될 수 있다.
    ex) a=5, a='John'처럼 변수 a의 값은 런타임에 지정되고 변수형도 변경된다.
  • 동적 언어는 클래스 구현이 더 자유롭다.
    ex) 파이썬은 다형성이 언어에 구현돼 있다. private이나 protected같은 키워드가 없고 모든 변수는 기본적으로 public이다.
  • 동적 언어를 사용해 쉽게 디자인 패턴을 구할 수 있다.

 


디자인 패턴의 분류

[생성 패턴]

- 객체가 생성되는 방식을 기반으로 작동한다.
- 객체 생성 관련 상세 로직을 숨긴다.
- 코드와 생성되는 객체의 클래스는 서로 독립적이다.
싱글콘 패턴(The Singleton Pattern)은 생성 패턴의 한 종류다.

 

[구조 패턴]

- 클래스와 객체를 더 큰 결과물로 합칠 수 있는 구조로 설계한다.
- 구조가 단순해지고, 클래스와 객체 간의 상호관계를 파악할 수 있다.
- 클래스 상속과 컴포지션에 의존한다.

어댑터 패턴(The Adapter Pattern)은 구조 패턴의 한 종류다.

 

[행위 패턴]

- 객체 간의 상호작용과 책임을 기반으로 작동한다.

- 객체는 상호작용하지만 느슨하게 결합돼야 한다.
옵서버 패턴(The Observer Pattern)은 행위 패턴의 한 종류다.

728x90
반응형

댓글