본문 바로가기

728x90

분류 전체보기

(56)
[Design Pattern] 경량 (Flyweight) 패턴 1. 개요경량 디자인 패턴 (Flyweight Design Pattern)은 내부 상태(Intrinsic)와 외부 상태(Extrinsic)를 구분하는 패턴이다.1.1. 설명내부 상태(Intrinsic): 객체가 독립적으로 가지고 있는 고유한 상태 - Flyweight외부 상태(Extrinsic): 여러 객체가 공유하는 상태2. 상황많은 수의 유사한 객체를 생성해야 할 때내부 상태와 외부 상태를 명확히 구분해야 할 때3. 다이어그램3.1. 설명FlyweightConcreteFlyweight 의 인터페이스 ConcreteFlyweight공유될 객체의 내부 상태를 저장하고, 외부 상태를 공유한다.operation(String context) 메소드를 구현하여 외부 상태에 따른 동작을 수행한다. Flyweigh..
[Design Pattern] 중재자 (Mediator) 패턴 1. 개요 중재자 디자인 패턴 (Mediator Design Pattern)은 객체 간 복잡한 상호작용 부분을 따로 함축한 객체를 만드는 패턴이다. 2. 조건 여러 객체 간의 상호작용이 매우 복잡할 때 3. 다이어그램 3.1. 설명 Mediator 객체들 사이의 상호작용을 중재, 조정하는 인터페이스를 정의한다. 다른 객체들과 통신하기 위한 인터페이스를 제공한다. 객체들 간의 결합도를 낮추고, 객체들이 직접적으로 통신하지 않도록 한다. ConcreteMediator Mediator 인터페이스를 구현하여 객체들의 상호작용을 조정한다. 객체들 간의 통신을 관리하고 중재한다. 다른 객체들과의 통신을 위해 객체들 간의 관계를 알고 있어야 한다. Colleague Mediator와 통신하는 객체를 나타낸다. 다른 ..
[Design Pattern] 인터프리터 (Interpreter) 패턴 1. 개요 인터프리터 디자인 패턴 (Interpreter Design Pattern)은 주어진 언어나 문법에 따라 표현식을 해석하고 처리하는 패턴이다. 2. 상황 언어 해석기, 컴파일러, 수식 계산기 등을 구현하고자 할 때 3. 다이어그램 3.1. 설명 Expression 표현식을 해석하기 위한 인터페이스를 정의한다. TerminalExpression Expression의 구현 클래스이다. 더 이상 분해되지 않는 단일 표현식을 나타낸다. 주로 터미널 기호, 변수, 상수 등으로 구성된다. NonterminalExpression Expression의 구현 클래스이다. 여러 개의 하위 표현식으로 구성된 표현식을 나타낸다. 주로 문법 규칙을 나타내고, 문장, 조건식 등을 해석하는 역할을 한다. Context 해..
[Design Pattern] 디자인 패턴 (Design Patterns) 1. GoF Design Patterns 생성 패턴구조 패턴행위 패턴클래스Factory MethodAdaptorInterpreter, Template객체Abstract Factory, Builder, Prototype, SingletonBridge, Composite, Decorator, Façade, Flyweight, ProxyChain of Responsibility, Command, Iterator, Mediator, Memento, Observer, State, Strategy, Visitor 클래스객체생성패턴Factory MethodAbstract Factory, Builder, Prototype, Singleton구조패턴AdaptorBridge, Composite, Decorator, Faç..
[Design Pattern] 어댑터 (Adaptor) 패턴 1. 개요어댑터 디자인 패턴 (Adaptor Design Pattern)은 서로 다른 인터페이스를 implements 하는 클래스를 함께 동작하도록 하는 패턴이다.2. 상황서로 다른 두 인터페이스가 유사한 method 를 가질 때기존 인터페이스를 변경할 수 없을 때3. 다이어그램3.1. 설명Target과 Adaptor가 유사한 method 를 가지고 있고,Adaptee를 수정하기 힘든 상황이라면Adaptor 디자인 패턴을 사용할 수 있다.4. 구현interface Target { void method(); }interface Adaptee { void similarMethod(); }class Adaptor implements Target { private final Adaptee adaptee; p..
[Flutter] 순환 캐러셀 (Circular Carousel) 위젯 만들기 1. 개요 1.1. 캐러셀 (Carousel) 캐러셀 (Carousel) 은 회전목마라는 뜻으로 일련의 위젯을 슬라이드 쇼 형태로 나열해놓은 위젯을 가리킨다. 1.1.1. 일반 캐러셀 일반 캐러셀은 위와 같이 단일 위젯이 직선 위에서 이동하는 특징이 있다. 1.1.2. 순환 캐러셀 순환 캐러셀은 일반 캐러셀과 달리 단일 위젯이 타원을 그리면서 회전한다. 1.2. 순환 캐러셀의 필요 Flutter 로 개발 중인 어플리케이션 (Fitween) 이 있는데, 디자이너로부터 다음과 같은 위젯의 구현을 요청받았다. 1.3. 구현 관련 패키지가 있는지 확인해보았지만, 굉장히 적고, 존재하는 것들도 마음에 들지 않았다. 적당한 꼼수를 발휘해서, 정적 이미지와 동적 이미지 (gif) 를 미리 준비하고, 좌우 드래그 제스..
[Problem] 배낭 문제의 그리디 알고리즘적 접근 (Knapsack, Greedy) 해당 포스팅은 [Problem] 배낭 문제 (Knapsack Problem) 의 하위 문서입니다. 그리디 배낭 (GreedyKnapsack) 클래스 구현 class GreedyKnapsack(Knapsack): def get_algorithm(self): return 'Greedy' def fractional_solve(self): # TODO: 분할 배낭 문제를 그리디로 구현 3.3.1. 0-1 배낭 문제 접근 0-1 배낭 문제를 그리디 알고리즘적으로 접근할 수 있을까? DP에서 사용한 단위 무게당 가치의 개념을 다시 사용해보자. 물체를 단위 무게당 가치 내림차순으로 정렬한 다음 배낭에 넣을 수 있는 만큼 차례로 넣는다면 반드시 최고 가치를 가질 수 있을까? 그렇지 않다. 안타깝게도 단위..
[Problem] 배낭 문제의 동적 계획법 알고리즘적 접근 (Knapsack, Dynamic Programming) 해당 포스팅은 [Problem] 배낭 문제 (Knapsack Problem) 의 하위 문서입니다.DP 배낭 (DPKnapsack) 클래스 구현from functools import cmp_to_keyfrom knapsack import Knapsackclass DPKnapsack(Knapsack): def get_algorithm(self): return 'Dynamic Programming' def zero_one_solve(self): # TODO: 0-1 배낭 문제를 DP로 구현 def fractional_solve(self): # TODO: 분할 배낭 문제를 DP로 구현3.2.1. 0-1 배낭 문제접근동적 계획법의 조건 최적 하위 구조 (Optimal Substructure)를 만..

728x90