본문 바로가기

컴퓨터과학/디자인패턴14

[디자인패턴] 옵저버 패턴 (Observer Pattern) 목적 객체간 1:N 의존 관계를 정의함 한 개 객체 상태가 변경될 때, 그 객체와 의존 관계에 있는 모든 객체들이 자동으로 알림을 받고 상태를 갱신 대표적으로 채팅방, 구독 서비스가 옵저버 패턴을 이용함 방주인, 발행자는 Subject (또는 Observerable, Publisher) - subject에게 정보를 push함 참여자, 구독자는 Observer (또는 Subscriber) 패턴 요소 문제: 1:N 관계에서 정보 갱신 - 구독자가 계속 loop를 돌며 업데이트가 있는지 확인할 수 없음 해결: 사용자를 등록하고, 정보가 변동하는 경우 알려주고 값을 자동으로 갱신 결과: loose coupling (구독자가 모든 정보를 아는게 아님), 확장성 (observer를 쉽게 추가/제거 가능) 구성 su.. 2021. 10. 13.
[디자인패턴] 스트래티지 패턴 (Strategy Pattern) 목적 같은 종류의 작업을 하는 알고리즘을 정의, 각 알고리즘을 캡슐화 알고리즘들을 서로 바꿔 사용할 수 있도록 함 스트래티지 패턴은 알고리즘을 사용하는 클라이언트로 부터 독립적으로 알고리즘을 바꿔서 적용시킬 수 있도록 함 요약 문제: 알고리즘의 다른 버전이 존재해서, 중복으로 존재하거나 if문을 이용해서 선택해야 함 -> OCP 위반 해결: 중복을 공통화시키고, 실행 시점에 맞는 알고리즘을 호출하도록 함 (상속 또는 인터페이스 활용) 결과: 수정할 경우 strategy를 추가하고, 나머지는 변경하지 않아도 됨. 구성 Context 클래스 캡슐화된 알고리즘을 멤버 변수로 포함 캡슐화된 알고리즘을 교환할 수 있음 Strategy 클래스 (인터페이스) 컴파일 시점에서 사용하는 캡슐화된 알고리즘을 나타냄 실제 .. 2021. 10. 13.