프로그래밍 29

디자인 패턴 - Flyweight (Structural Pattern)

Structural Pattern인 Flyweight Pattern에 대해 정리합니다. Flyweight는 Diet를 위해 군살을 빼듯이, 불필요한 객체 생성을 반복하지 않고, 최대한 쥐어짜서 있는 것을 사용하도록 합니다. Definition Flyweight 는 instance를 항상 만드는 것이 아니라, 이미 만들어진 인스턴스를 이용하는 패턴입니다. Flyweight Pattern은 Structural Pattern에 해당합니다. Class Diagram Sample Case 다음은 Flyweight 패턴을 적용한 시나리오입니다. Scenario 요즘 들어 예전 팝송이 생각이 나서 음악을 들어보던 중, 멜로디가 너무나 좋아 가사를 찾아보고 싶습니다. 우리가 만든 장치(MusicFactory)에 음악(..

디자인 패턴 - Facade (Structural Pattern)

Structural Pattern인 Facade Pattern에 대해 정리합니다. ※ facade는 프랑스어인 Façade를 어원으로 하는 '건물의 정면'이라는 의미입니다. Definition Facade 는 시스템 외부에 대해서는 단순한 인터페이스를 보여주는 패턴 Facade Pattern은 Structural Pattern에 해당합니다. Class Diagram Facade의 역할은 시스템을 구성하는 많은 역할에 대해 '창구' 역할을 합니다. ClassA, ClassB, ClassC 는 각기 저마다의 역할을 수행하지만 Facade의 역할은 신경쓰지 않습니다. Sample Case 다음은 Facade 패턴을 적용한 시나리오입니다. Scenario 우리는 이사를 하기로 하여 집(House)을 보러 갑니다..

디자인 패턴 - Decorator (Structural Pattern)

Structural Pattern인 Decorator Pattern에 대해 정리합니다. 이 패턴은 기존의 Object를 동적으로 Responsibility를 추가하거나 수정하여 무한히 장식할 수 있는 패턴입니다. :) Definition Object에 '장식'을 해 나가는 패턴 - alt. Object에 동적으로 responsibility를 추가하기 위해 inheritance 대신 사용할 수 있는 패턴 목적 - 현재 Object의 responsibility 또는 behavior를 수정하기 위해 동적으로 responsibility를 추가하기 위함. 사용 시점 - Object의 responsibility 및 behavior가 동적으로 수정되어야 할 때 - Object를 생성할 때 responsibility와..

디자인 패턴 - Composite (Structural Pattern)

Structural Pattern인 Composite Pattern에 대해 정리합니다. Definition '그릇'과 '내용물'을 동일시해서 '그릇'이 '내용물' 또는 '그릇'을 포함할 수 있는 재귀적인 구조를 만들기 위한 패턴 Composite Pattern은 Structural Pattern에 해당합니다. Class Diagram Leaf는 '내용물'의 역할을 합니다. Composite는 '그릇' 및 '내용물'의 역할을 합니다. Leaf와 Composite는 Component를 상속받아, Composite class가 Composite 및 Leaf class를 재귀적으로 담을 수 있습니다. Sample Case 다음은 Composite 패턴을 적용한 시나리오입니다. 최대한 필요한 내용만 class와 ..

디자인 패턴 - Bridge (Structural Pattern)

Structural Pattern인 Bridge Pattern에 대해 정리합니다. Definition '기능'과 '구현'의 클래스 계층을 분리하고, 다리를 놓는 패턴 Bridge Pattern은 Structural Pattern에 해당합니다. Class Diagram 기능 계층의 class는 'Abstraction' class(추상:abstraction class가 아닌 이름이 'Abstraction')입니다. 'Abstraction Class'에 기능을 추가한 것이 'RefinedAbstraction'입니다. 구현 계층의 class는 Implementor class와, 이를 상속하여 구현한 ConcreteImiplementor입니다. Abstraction calss에서 구현 계층의 calss의 inst..

디자인 패턴 - Adapter (Structural Pattern)

Structural Pattern인 Adapter Pattern에 대해 정리합니다. Definition '이미 제공되어 있는 것'과 '필요한 것'사이의 '차이'를 없애주는 패턴 Adapter라는 naming과 같이 실생활에서의 예를 들자면 기존 사용하던 220V 플러그를 110V 콘센트에 꽂아서 사용하려면, 110V Adapter가 있어야 합니다. 이 때 110V Adapter의 역할을 만들어서 사용할 수 있도록 하는 Pattern을 Adapter Pattern이라 합니다. Adapter Pattern은 Structural Pattern 에 해당합니다. Scope 분류로 보면, Class 에 해당하는 Adapter 패턴은 상속을 이용, Object에 해당하는 Adapter 패턴은 위임을 이용합니다. Cl..

디자인패턴 어렵지 않아요

디자인 패턴이란? Design Pattern 이란 Object Oriented Design Programming을 위한 재사용 가능한 클래스 및 객체 설계 패턴입니다. 논문 Using Pattern Languages for Object-Oriented Programs을 통해 1987년에 최초 제안되었고, GOF(Gang of Four)라는 에리히 감마(Erich Gamma), 리처드 헬름(Richard Helm), 랄프 존슨(Ralph Johnson), 존 블리시데스(John Vlissides)에 의해 1995년에 제안된 23개 패턴이 가장 일반적이며, 근간이 되는 대중적인 패턴이며, 보통 OOP 기반의 SW개발에서 디자인 패턴이라고 하면 GOF의 디자인 패턴을 말합니다. GOF 패턴 이외에도 더 많은 ..

python - Equality, Identity

python에서 햇갈리기 쉬운 equality와 identity에 대해 정리합니다. Summary 1. True / False를 비교할 때는 if문에 변수만 사용한다. - boolean에 대한 값은 True인지 False인지 명확하기 때문에 그냥 사용 2. Equality를 검증할 때는 == 또는 != 연산자를 사용 - 값이 맞는지만 비교 3. Identiy를 검증할 때는 is 또는 is not을 사용 - 객체 자체가 완전히 일치하는지를 비교 None의 비교 None은 python에서 정의된 NoneType 클래스임 None은 값이 아니라 Identity를 비교하기 때문에 ==이 아니라 is를 사용 ※ Equality를 비교해도 상관은 없지만 Identity를 비교해야 성능상의 이점이 있음 다음은 sma..

python - Comprehension, Generator expression

코드를 간결하게 작성하기 위한 python의 comprehension 문법에 대해 정리합니다. comprehension은 iterable한 개체를 확장하거나 변경하는데 용이합니다. Comprehension, Expression 기본 comprehension은 문법이기 때문에 실제 code를 보면서 이해하면 됩니다. list를 대상으로 comprehension 문법을 적용할 때는 대괄호[]를 이용합니다. dictionary를 대상으로 comprehension 문법을 적용할 때는 중괄호{}를 이용합니다. generator도 comprehension을 적용하여 만들 수 있는데, 명칭을 generator expression이라고 하며 Expression이라고 하기도 합니다. list를 대상으로 expressio..

python - Yield, Generator

generator에 대해서 정리를 합니다. generator의 정의는 generator iterator를 반환하는 함수입니다. generator iterator의 특징은 - generator iterator는 일반 iterator와 유사하지만 generator에서 yield 구문을 통하여 동작 - generator iterator는 iterator를 사용하는 모든 환경을 대체 가능 generator의 장점은 - iterator에 비해 메모리를 적게 사용 - lazy evaluation 으로 동작 generator에 사용되는 yield에 대한 정리입니다. Yield generator가 yield를 만나면 그 상태를 보존하고 있다가, 다시 generator가 호출되면 이어서 수행 yield는 generato..

반응형