Memento PatternMemento 패턴은 객체의 상태를 저장하고 복원할 수 있게 하는 디자인 패턴입니다.이 패턴은 객체의 내부 상태를 캡슐화하여 외부에 노출시키지 않고도 객체의 상태를 저장하고 복원할 수 있게 해줍니다.일반적으로 어떤 Object의 히스토리를 관리하고 싶을 때 유용한 패턴입니다. → 게임에서 Save하는 것을 떠올리면 됩니다.가령 텍스트 에디터 사용할 때 undo와 같은 기능을 사용하여 삭제 하기 전 상태로 텍스트 복원이 가능하고, 그 기능을 몇 단계로 실행해서 편집작업을 점점 과거로 돌리는 것도 가능함객체지향프로그램에서 undo기능을 실행하려면 인스턴스를 가지고 있는 정보를 저장해 둘 필요가 있습니다.단, 저장만 해서는 안되고, 저장한 정보로부터 인스턴스를 원대래로 되돌릴 수 있..
Read moreChain of Responsibility PatternChain of Responsibility Pattern은 요청을 처리할 수 있는 기회를 여러 객체들에게 부여함으로써 그들 간의 결합도를 없애주는 패턴입니다.복수의 Object를 사슬처럼 연결해주면, 그 오브젝트의 사슬을 차레대로 돌아다니면서 목적한 Object를 결정하는 방법입니다.responsibility 개념을 갖는 모듈들에 체인을 만드는 Pattern 입니다.chain of responsibility pattern이 아닌 결제 예제클라이언트 코드에서 결제 요청을 발행 합니다.결제 요청 안에는 결제방법과 금액이 존재합니다.결제 방법에는 cash, credit card, debit card 등이 있습니다.결제 요청을 처리하는 함수나 클래스가 있어..
Read moreCommand Pattern커맨드 패턴은 요청을 독립된 객체로 변환하여 요청에 대한 모든 정보를 포함하게 만드는 행동 패턴입니다.다양한 요청을 메서드로 매개변수화하고, 요청의 실행을 지연하거나 큐에 넣을 수 있으며, 실행 취소 기능을 지원할 수 있습니다.여러 명령들을 추상화해서 class로 정의하고 Object로 만들어서 사용하는 Pattern입니다.또한 행위(Behavior) 패턴에 속합니다.클래스가 일을 실행할떄, 자신의 클래스 or 다른 클래스의 Method를 호출합니다.그러나 Method를 호출한 결과는 Object에 반영되지만, 일의 이력은 어디에도 남지 않습니다.이때, ‘이 일을 실행하시오’ 라는 ‘명령’을 표현하는 클래스가 있으면 편합니다.명령을 나타내는 클래스의 인스턴스로 하나의 ‘물건’처..
Read moreStrategy Pattern스트래티지 패턴(Strategy Pattern)은 행위 패턴(Behavioral Pattern)의 일종으로, 알고리즘 군을 정의하고, 각 알고리즘을 캡슐화하며, 이들을 상호 교환 가능하게 만드는 패턴입니다.즉, 알고리즘을 클라이언트에서 분리하여 독립적으로 변경할 수 있게 합니다.이를 통해 클라이언트 코드의 변경 없이 알고리즘을 쉽게 교체할 수 있습니다.Runtime 중에 알고리즘을 선택하게 합니다.하나의 알고리즘을 직접 Implementing 하는 대신 어떠한 알고리즘을 사용할지 Runtime Instruction을 받습니다.Animal을 받아서 Speaking을 시키는 함수동물은 고양이 혹은 사자고양이가 들어오면 “meow”사자가 들어오면 “roar”함수는 이 상태로 고정이..
Read moreComposite Pattern컴포지트 패턴(Composite Pattern)은 객체를 트리 구조로 구성하여 부분-전체 계층을 구현하는 패턴입니다.이를 통해 클라이언트가 단일 객체와 복합 객체를 동일하게 처리할 수 있습니다.컴포지트 패턴은 구조 패턴(Structural Pattern)의 일종으로, 객체를 그룹으로 묶어 하나의 객체처럼 다룰 수 있게 합니다.컴퓨터의 파일 시스템에서는 Directory 라는 것이 있고, Directory안에는 파일이나 다른 하위 Directory가 있기도 합니다.마치 “상자 안의 상자” 같은 구조, 즉 재귀적 구조를 가집니다.Directory 엔트리를 차례대로 조사할 때, 그릇과 내용물을 같은 종류로 취급하면 편리할 수 있습니다.이 그릇을 내용물과 동일시 하여 재귀적인 구조..
Read moreFlyweight Pattern플라이웨이트 패턴(Flyweight Pattern)은 메모리 사용을 줄이기 위해 많은 수의 작은 객체를 공유하는 디자인 패턴입니다. 이 패턴은 객체의 상태를 내적 상태와 외적 상태로 나누어, 내적 상태를 공유하여 메모리 사용을 최적화합니다.Flyweight Pattern → 동일한 것을 공유해서 낭비를 없앤다는 특징이 있습니다.Flyweight는 플라이급 이라는 의미로, 권투에서 가장 체중이 가버운 체급을 의미합니다.Design Pattern에서는 Object를 가볍게 하기 위한 것의 의미에서 사용됩니다.Object는 컴퓨터 내부에서 가상적으로 존재하는 것이기 때문에 무겁다 또는 가볍다고 표현은 실제 무게가 아닌, “메모리의 사용량”을 의미하는 것입니다.객체를 만들 때 그 ..
Read moreBridge Pattern브리지 패턴(Bridge Pattern)은 소프트웨어 디자인 패턴 중 하나로, 구현부와 추상화된 인터페이스(기능) 를 분리하여 서로 독립적으로 변경할 수 있도록 하는 패턴입니다.이 패턴은 구조 패턴(Structural Pattern) 중 하나로, 시스템을 더 모듈화하고 유지보수성을 높이기 위해 사용됩니다.AbstractionHigh Level Layer어플리케이션의 Interface 혹은 UIImplementor어플리케이션에서 돌아가는 실제 구현 코드Abstraction만 볼 수 있고 실제 Implementor은 숨길 수 있는 구조입니다.외부에서 보여지는 것과 내부 Implementor를 분리하고자 할 떄 사용하기 좋습니다.Bridege Pattern: Example 1Class..
Read moreFacade Pattern퍼사드 패턴(Facade Pattern)은 복잡한 시스템이나 서브시스템의 인터페이스를 단순화하는 디자인 패턴입니다.이 패턴은 클라이언트가 시스템을 더 쉽게 사용할 수 있도록 시스템의 복잡성을 감추고, 단순한 인터페이스를 제공합니다.퍼사드 패턴은 객체지향 설계 원칙 중 하나인 "단일 책임 원칙"(Single Responsibility Principle)을 따르며, 시스템의 각 구성 요소를 보다 명확하게 분리합니다.Facade Pattern이란 건물의 앞면처럼 그 뒤쪽의 복잡함은 내부에 숨기고 단단한 인터페이스만 제공합니다.여러개의 서브시스템을 통합하여 고수준의 API를 제공한다는 특징이 있습니다.Client는 여러 라이브러리와 클래스를 필요로 하는 상태입니다.이런 경우, 여러 클래..
Read moreDecorator Pattern데코레이터 패턴(Decorator Pattern)은 객체의 기능을 동적으로 추가하고 확장할 수 있는 패턴입니다.이 패턴은 상속을 사용하지 않고도 객체에 새로운 행동을 추가할 수 있게 해줍니다.데코레이터 패턴은 여러 개의 데코레이터 객체를 조합하여 다양한 기능을 동적으로 조합할 수 있는 유연성을 제공합니다.Decorator Pattern은 Object(객체)를 꾸며주는 역할을 합니다.원하는 기능으로 감싸서 사용할 수 있게 만들어주는 패턴 입니다.class Animal: def speak(self): passclass Cat(Animal): def speak(self): print("Meow", end='')class Dog(Animal): ..
Read moreOpenCV DNN 패키지를 이용하여 SSD기반 Object Detection 수행 Tensorflow 에서 Pretrained 된 모델 파일을 OpenCV에서 로드하여 이미지와 영상에 대한 Object Detection을 수행해보겠습니다.입력 이미지로 사용될 이미지 보기import cv2import matplotlib.pyplot as plt%matplotlib inlineimg = cv2.imread('../../data/image/beatles01.jpg')img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)print('image shape:', img.shape)plt.figure(figsize=(12, 12))plt.imshow(img_rgb)Tensorflow에서..
Read more