- Today
- Total
목록스터디/디자인 패턴 (23)
작심삼일
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다. 틀린 부분은 알려주시면 감사하겠습니다. 어떤 패턴인가 부분과 전체의 계층을 표현하기 위해 객체들을 모아 트리 구조로 구성합니다. 사용자로 하여금 개별 객체와 복합 객체를 모두 동일하게 다룰 수 있도록 하는 패턴입니다. 새로운 클래스가 추가돼도 일괄적인 접근 방법을 제공하기 때문에 연산, 관리가 쉽다. 하지만 단일 객체와 복합 객체의 설계를 일반화시키기 때문에 각각의 객체에 다른 연산을 적용하기 어렵다. 어떻게 쓰는가 Component(Graphic): 집합 관계에 정의될 모든 객체에 대한 인터페이스를 정의합니다. 모든 클래스에 해당하는 인터페이스에 대해서는 공통의 행동을 구현합니다. 전체 클래스에 속한 요소들을 관리하..
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다. 틀린 부분은 알려주시면 감사하겠습니다. 어떤 패턴인가 내부 표현부를 노출하지 않고 어떤 집합 객체에 속한 원소들을 순차적으로 접근할 수 있는 방법을 제공합니다. 어떻게 쓰는가 Iterator: 원소를 접근하고 순회하는 데 필요한 인터페이스를 제공합니다. ConcreteIterator: Iterator에 정의된 인터페이스를 구현하는 클래스로, 순회 과정 중 집합 객체 내에서 현재 위치를 기억하빈다. Aggregate: Iterator 객체를 생성하는 인터페이스를 정의합니다. ConcreteAggregate: 해당하는 ConcreteIterator의 인스턴스를 반환하는 Iterator 생성 인터페이스를 구현합니다. cla..
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다. 틀린 부분은 알려주시면 감사하겠습니다. 어떤 패턴인가 메시지를 보내는 객체와 이를 받아 처리하는 객체들 간의 결합도를 없애기 위한 패턴입니다. 하나의 요청에 대한 처리가 반드시 한 객체에서만 되지 않고, 여러 객체에게 그 처리 기회를 주려는 것입니다. 그렇기 때문에 클라이언트에서 내부 구조를 알 필요가 없습니다. 하지만 구현해야 하는 클래스가 많아지기 때문에 디버깅이 어려워질 수 있습니다. 어떻게 쓰는가 class Handler: def __init__(self): self.nextHandler = None def handle(self): pass class Handler4number(self): def __init_..
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다. 틀린 부분은 알려주시면 감사하겠습니다. 어떤 패턴인가 객체 구조를 이루는 원소에 대해 수행할 연산을 표현한다. 연산을 적용할 원소의 클래스를 변경하지 않고도 새로운 연산을 정의할 수 있게 한다. 작업 대상과 작업 내용을 분리할 때 주로 사용한다. 어떻게 쓰는가 자료 구조(데이터)와 자료 구조를 처리하는 로직(알고리즘)을 분리해야할 때 사용하기 때문에 Deep learning쪽에 종사하는 내 입장에서 생각해보면 데이터를 preprocessing할 때 주로 사용한다. class Visitor: def preprocess(self, data): data.token_ids = self.deq2tok(data.seq) def ..
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다. 틀린 부분은 알려주시면 감사하겠습니다. 어떤 패턴인가 공유를 통해 많은 수의 소립(fine-grained) 객체들을 효과적으로 지원합니다. 여러 번 이용할 수 있도록 객체를 공유할 때 사용한다. 그렇기 때문에 메모리 낭비를 줄일 수 있다. 어떻게 쓰는가 그림판을 예시로 들어보면, 원을 그린다고 했을 때 원은 중심과 반지름 길이만 있으면 된다. 1번 원은 중심이 $(2, 3)$이고 반지름이 5라면 이 객체는 원[(2, 3), 5]만 가지고 있으면 된다. class circle: def __init__(self, center, radius): self.center = center self.radius = radius de..
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다. 틀린 부분은 알려주시면 감사하겠습니다. 어떤 패턴인가 동일 계열의 알고리즘군을 정의하고, 각 알고리즘을 캡슐화하며, 이들을 상호교환이 가능하도록 만듭니다. 알고리즘을 사용하는 클라이언트와 상관없이 독립적으로 알고리즘을 다양하게 변경할 수 있게 합니다. 동일한 문제를 다른 알고리즘으로 해결할 수 있게 하는 패턴이라고 생각하는 것이 편하다. 예를 들면, 보통 다른 알고리즘을 추가할 때 if-else 문으로 추가하지만, 이 패턴을 사용하면 새 클래스 추가하는 형태가 되겠다. 어떻게 쓰는가 출근할 때 여러 가지 방법으로 할 수 있다. 이를 Strategy 패턴을 사용해서 간단하게 짜봤다. class GoToWork(): de..
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다. 틀린 부분은 알려주시면 감사하겠습니다. 어떤 패턴인가 클래스의 인터페이스를 사용자가 기대하는 인터페이스 형대로 적응(변환) 시킵니다. 서로 일치하지 않는 인터페이스를 갖는 클래스들을 함께 동작시킵니다. 말 그대로 어댑터, 우리가 흔히 말하는 돼지코 콘센트와 같은 역할을 한다. Decorator 패턴과 헷갈릴 수 있지만, decorator 패턴은 확장을 하는 것이고, adapter 패턴은 호환성을 위한 것이라 생각하면 편하다. 어떻게 쓰는가 딱히 어렵지 않게 사용할 수 있다. class Data1(): def __init__(self, path): self.path = path self.data = f.readlines..
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다. 틀린 부분은 알려주시면 감사하겠습니다. 어떤 패턴인가 전자과에서는 디지털논리회로인가하는 과목에서 이 state를 이용해서 회로를 설계한다.그래서그런지 이 패턴이 반갑게 느껴졌다.그때 배웠던 것처럼 state에 따라 행동을 다르게 하는데, 그것을 그대로 함수로 구현하는 것이 State Pattern이다. 객체 내부 상태에 따라 스스로 행동을 변경할 수 있게 허가하는 패턴으로, 이렇게 하면 객체는 마치 자신의 클래스를 바꾸는 것처럼 보인다. 어떻게 쓰는가 각 상태에 따라 다르게 행동해야할 때 사용한다. 예를 들면, 횡단보도의 신호등이 빨간불일 때 브레이크를 밟고 초록불일 때 악셀 밟는 식으로 생각할 수 있다. 신호등이라는..