반응형

디자인패턴 5

[디자인패턴] Template Method Pattern (템플릿 메소드 패턴)

Template Method Pattern 템플릿 메소드 패턴을 사용하면 프로세스를 표준화할 수 있다. 이 패턴은 프로세스는 고정되어 있는데 프로세스 내의 단계는 다를 때 적용하기 좋다. 예를 들어 온라인 쇼핑몰을 생각해보면, 사용자가 물건을 구매하는 큰 프로세스는 표준화되어있다. (항상 동일하다.) 그러나 상품의 종류에 따라 다른 물류 시스템을 통해 보내지는 등, 상황에 따라 프로세스 내의 단계는 달라질 수 있다. 템플릿 메소드 패턴을 사용하면 중간 단계를 너무 많은 boilerplate code*를 더하지 않고도 바꿀 수 있다. * boilerplate code : 거의 또는 전혀 변형 없이 여러 위치에서 반복되는 코드 Example 트레이딩 봇 코드를 예시로 살펴보자. 트레이딩 봇에서는 트레이딩 ..

프로그래밍/CS 2022.08.08

[디자인패턴] Observer Pattern (옵저버 패턴)

Observer Pattern Observer Pattern(옵저버 패턴)이란 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. 이 패턴의 핵심은 옵저버 또는 리스너라 불리는 하나 이상의 객체를 관찰 대상이 되는 객체에 등록시킨다. 그리고 각각의 옵저버들은 관찰 대상인 객체가 발생시키는 이벤트를 받아 처리한다. 옵저버 패턴에는 2가지 역할이 있다. 하나는 subject, 다른 하나는 observer이다. subject는 이벤트를 발생시키는 주체로, 일을 수행하고(ex. 회원 가입한 유저를 DB에 등록) 일어난 변화를 observer들에게 알린다. observer는 발생..

프로그래밍/CS 2022.08.05

[디자인패턴] Strategy Pattern (전략 패턴)

Strategy Pattern 전략(strategy)은 특정한 목표를 수행하기 위한 행동 계획이다. 전략 패턴(strategy pattern)은 디자인 패턴 중 하나로, 객체가 할 수 있는 행위들 각각을 전략으로 만들어 놓고 사용하며, 동적으로 전략 수정이 가능한 패턴을 일컫는다. 코드에서 뭔가를 하는 데 있어서 여러가지 방법이 존재할 때가 있다. 또한 상황에 따라 그 방법을 변경하고 싶을 수 있다. 예를 들어 고객 지원 소프트웨어를 사용할 때, 사용자가 얼마나 붐비는지 등에 따라 지원 고객 처리 순서를 다르게 처리하고 싶을 수 있다. 또는 VR 애플리케이션을 만들 때, VR 장비에 따라 다른 렌더링 알고리즘을 적용하도록 개발하고 싶을 수 있다. 이럴 때 이 '전략 패턴'을 사용할 수 있다. Exampl..

프로그래밍/CS 2022.07.29

[디자인패턴] Dependency Inversion (의존성 역전)

Dependency Inversion 객체지향 설계 5원칙 중 하나인 SOLID 원칙의 D가 Dependency Inversion을 일컫는다. Dependency Inversion을 포함해 모든 디자인 패턴의 핵심은 abstraction(추상화)이다. 이상적으로는 프로그래밍 언어가 추상화 메커니즘과 type을 모두 제공해야 한다. 파이썬에는 이 두 가지 모두 없다..! 그러나 여전히 Dependency Inversion을 구현할 수 있다. Abstract base class(ABC)라는 모듈을 사용할 수 있고, type hint도 제공한다. (⚠️ type hint는 언어 레벨에서 실질적으로 어떠한 제약 사항도 강요하지 않는다. 즉, type hint에 맞게 코드를 쓰지 않아도 에러를 발생시키지 않는다...

프로그래밍/CS 2022.07.27

[디자인패턴] Cohesion (응집도), Coupling (결합도)

최근 비전공자로서 부족한 부분을 채우고자 CS 공부의 일환으로 네트워크를 공부했다. (대학교 한 학기 수업 분량 수강 완료!) 그러다 프론트엔드 개발자라면 네트워크/운영체제는 알면 좋은 것, 개발 방법론은 알면 안 답답한 것, 디자인 패턴 등은 모르면 답답한 것이라는 (개발 잘하는) 친구의 조언을 듣고 소프트웨어 디자인 패턴 공부를 우선순위에 두고 시작하게 되었다. 특히 ArjanCodes라는 유튜버의 영상이 디자인 패턴 공부하기 좋다고 추천받아 하루에 하나씩 보며 공부할 예정이다. Cohesion and Coupling Cohesion(응집도) : the degree to which elements of a certain class or function belong together 직역하면 cohesi..

프로그래밍/CS 2022.07.26
반응형