State Pattern OOP에서는 프로그램 대상을 클래스로 표현함 state는 '상태 = 사물의 모양이나 형편'을 의미 상태를 클래스로 표현하면 클래스를 교체해서 '상태의 변화'를 표현할 수 있음 Strategy Pattern과 조금 유사함 __ init __ property로 state (기본 state는 'green') setState 현재 state를 설정할 수 있는 함수 Speak State에 따라서 녹색이면 green light 빨강이면 red light 출력 Wait Wait 함수를 호출하면 state가 변함 하지만 state가 많아진다면 현재 코드 구조로는 복잡성을 대응하기 어려움 -> 이때 state pattern 사용가능 TrafficLight class __ init __ 기본 st..
Composite Pattern - 컴퓨터의 파일 시스템에는 디렉터리라는 것이 있고, 디렉터리 안에는 파일이 있거나 다른 하위 디렉터리가 있기도함 - 하위 디렉터리 안에는 또다른 하위 디렉터리가 있음 - 마치 상자안의 상자 같은 구조. 즉 재귀적 구조를 가짐 - 디렉터리 엔트리를 차례대로 조사할때, 그릇과 내용물을 같은 종류로 취급하면 편리할 수 있음 - 그릇을 내용물과 동일시하여 재귀적인 구조를 만들기 위한 디자인 패턴을 composite 패턴이라고 함. - 한 object의 그룹과 그 object의 싱글 instance가 같은 타입으로 취급되는 패턴 - composite pattern을 통해 object들을 트리 구조로 구성할 수 있음 - 하나의 object와 그 object가 들어있는 group을 ..
Flyweight Pattern 동일한 것을 공유해서 메모리 낭비 없애기 • Flyweight는 플라이급 이라는 의미로, 권투에서 가장 체중이 가벼운 체급을 의 미함 • 디자인패턴에서는 오브젝트를 가볍게 하기 위한 것의 의미에서 사용 • 오브젝트는 컴퓨터 내부에서 가상적으로 존재하는 것이기 때문에 무겁다 또는 가볍다라고 표현은 실제 무게가 아닌, “메모리의 사용량”을 의미하는 것 • 객체를 만들때 그 객체를 저장하기 위해서 메모리가 확보되는데, 객체를 많이 만 든다고 생각해보면 그 객체가 차지하고 있는 단위 메모리가 작을 수록 가벼워짐 • “인스턴스를 가능한대로 공유시켜서 쓸데없는 메모리를 할당하지 않도록 한다.” • 이미 만들어져 있는 인스턴스를 이용할 수 있으면 그것을 공유해서 사용 • Dog은 na..
Bridge Pattern • Abstraction과 implementor을 분리해서 independent하게 만든다. • Abstraction과 implementor 사이에 다리를 놓는 역할 • Animal을 Boat, Car, Airplane 중에 태워야 함 • Class 구조 고려하지 않고 코딩을 한다면 Animal 2종류 운송수단 3 종류 , 즉 6(2x3=6)가지 클래스를 따로 만들어줘야 함 • 만약 더 많은 종류가 생기면 복잡해짐 -> Bridge Pattern 생각해볼 수 있음 • Vehicle class를 만들어 Base class로 삼고 Boat, Car, Airplane class는 Vehicle class를 상속받는다. • Vehicle class는 Animal을 property로 갖..
Decorator Pattern 스펀지 케이크가 1개 있다고 가정! 크림만 바르면 아무 모양이 없는 크림케이크가 됨 여기에 딸기를 얹으면 딸기 케이크가 되고, 초콜릿을 장식하고 이름을 쓰고 초를 꽂으면 생일케이크가 됨 스펀지케이크도, 크림케이크도, 딸기케이크도 생일케이크도 처음에는 모두 다 같 은 스펀지 케이크지만 장식을 하면 목적에 맞는 케이크가 되는 것 객체도 이런 식으로 장식의 기능을 하나씩 추가하면 좀 더 목적에 맞는 객체가 됨 이러한 패턴을 데코레이터 디자인 패턴이라고 함 Component는 내용물 ConcreteComponent는 구체적인 내용물 Decorator 장식 Decorator pattern은 이름에서 알 수 있듯이 Object를 꾸며주는 역할 원하는 기능으로 감싸서 사용할 수 있게 ..
Facade Pattern 프로그램이라는 것은 점점 커지는 경향이 있음 많은 클래스가 만들어져 서로 관계를 맺으면서 복잡하게 됨 상호 관련된 많은 클래스를 적절하게 제어해야 함 그 처리를 실행하기 위한 창구 역할을 하는 별도의 인터페이스를 두는 것 Facade 는 건물의 앞면을 의미한다 -> Facade Pattern 이란 건물의 앞면처럼 그 뒤쪽의 복잡함은 내부에 숨기고 간단한 인터페이스만 제공 Client는 여러 라이브러리와 클래스를 필요로 하는 상태 이런 경우 여러 클래스나 라이브러리를 조합해서 더 간단한 인터페이스를 제공해주는 클래스를 생각해볼 수 있음. -> Client는 복잡한 클래스와 라이브러리 상대할 필요없이 간단한 인터페이스만 제공하는 Facade Pattern 사용해서 더 쉽게 개발 우..
structural design pattern : 클래스 간 구조/관계를 정의하는 패턴 Adapter Pattern 하나의 인터페이스를 다른 인터페이스로 전환하는 역할 -> 이러한 역할을 Adapter Pattern에도 적용 '이미 제공되어 있는 것'과 '필요한 것' 사이의 차이를 없애주는 디자인 패턴을 Adapter Pattern이라고 함. ex) 교류 110볼트 콘센트 ~ Adapter ~ 직류 12볼트의 노트북 Adapter Pattern 은 Wrapper Pattern 으로 불리기도함 Wrapper 는 '감싸는 것'이라는 의미가 있는데 무엇가를 포장해서 다른 용도로 사용할 수 있게 교환해주는 것이 wrapper이며, adapter 라고 함 두 가지의 종류 - 클래스에 의한 Adapter Patte..
Prototype Pattern 이란? - 종류가 너무 많아 클래스로 정리되지 않는 경우 - 클래스로부터 인스턴스 생성이 어려운 경우 - 프레임워크와 생성하는 인스턴스를 분리하고 싶은 경우 이런 경우 클래스로부터 인스턴스를 만드는 것이 아니라 인스턴스를 복사해서 새로운 인스턴스를 만드는 게 좋음. 프로토타입 패턴을 적용하기 위해서는 Clone()이라는걸 가지고 있어야한다. 자기 자신을 복사할 수 있도록! 그리고 구체적인 클래스 정의를 해서 원형의 프로토타입을 상속 받는다. class Cat: def __init__(self): self.color = None self.eye_color = None self.nose_color = None self.tail_color = None self.name = No..
Singleton Pattern 개요 글로벌하게 접근가능한 단 한개의 객체만을 허용하는 패턴 - 클래스에 대한 단일 객체 생성 - 전역 객체 제공 - 공유된 리소스에 대한 동시 접근 제어 - 글로벌 액세스 지점을 제공하는, 단점이 거의 없는 검증된 패턴 생성자를 private로 선언하고, 객체를 초기화하는 static 함수를 만들어 구현할 수 있음. 첫 호출에 객체가 생성되고, 그 후 클래스는 동일한 객체를 계속 반환함.] class Singleton(object): def __new__(cls): if not hasattr(cls, 'instance'): print('create') cls.instance = super(Singleton,cls).__new__(cls) else: print('recyc..
Builder Pattern - object의 생성과정이 복잡할 때 이를 간단하게 만들어 줌 ex) 하나의 오브젝트를 생성할 때 여러개의 argument가 필요할 때 Builer패턴이 쉽게 만들어줄 수 있음. Builder Pattern의 개념 Diagram 더 세부적인 객체를 생성할 수도 있을 것이다. 예시로 vector class를 만든다고 해보자 vector는 N차원 array 이며, 우리가 시각화 할 수 있는(Graph로 표현할 수 있는)건 2,3차원 이다. 2D/3D vector object를 생성할건데 builder pattern을 통해 만든다고 해보자 * 기능은 내가 추가 해보기! import math from multiprocessing import set_forkserver_preload..
Creation Design Pattern(생성 디자인 패턴) 오프젝트를 생성하는 방법을 다루는 패턴 - Factory Pattern - Abstract Factory + Factory Method Pattern - Builder Pattern - Singleton - Prototype Factory Pattern - 객체지향에서 팩토리란 다른 클래스의 객체를 생성하는 클래스를 말함 - 일반적으로 팩토리는 객체와 관련 메소드로 구성 - 클라이언트는 특정 인자와 함께 메소드를 호출하고 팩토리는 해당 객체를 생성하고 반환. 공장은 함수 또는 클래스로 나타낼 수도 있음 공장에 원하는 물건을 만들어 달라고 요청하면 그 제품을 만들 수 있음. Robot은 추상클래스 함수(인자) 간접적으로. 생성과정에 관여 X U..
What is UML? - 시스템을 시각화 하거나 시스템의 사양이나 설계를 문서화하기위한 표현방법 - 통합 모델링 언어는 객체 지향 프로그래밍 소프트웨어 집약 시스템을 개발할 때 산출물을 명세화, 시각화, 문서화할 때 사용. - 일반적으로 UML의 범위는 매우 넓지만, 여기선 클래스 다이어그램 및 시퀀스 다이어그램에 대해서만 커버함 - Code Pattern들을 표현할 때에도 유용함. 클래스 다이어그램 : 클래스와 계층관계 하위 클래스(자식 클래스)가 상위클래스(부모 클래스)를 참조하고 있다 -> 화살표로 표시! 클래스 다이어그램 : 구현관계 클래스 다이어그램 : 집약(aggregation) 클래스의 관계 시퀀스 다이어그램 UML의 시퀀스 다이어그램은 프로그램이 작동할 때 어떤 메소드, 추상클래스가 어떤..
SOLID principles Single Responsibility Open-Closed Liskov Substitution Interface Segregation Dependency Inversion Single Responsibility Principle(SRP)(단일 책임 원칙) : 단일 책임 원칙이란 모든 클래스는 하나의 책임만 가져야함. - 클래스 구현할 때 한가지 기능에만 중점을 두기. 두가지 이상의 기능이 필요할 때에는 클래스 나누기 - 장점 : 특정기능 수정할 때 관련 클래스 외에는 건드릴 필요 없음. - 한 개의 클래스에 여러 기능이 있었다면(SRP 지키지 않았다면)? 관련된 모든 클래스 수정해야하는 상황 발생 가능 - add 함수는 덧셈만 함 - numPrint 함수는 숫자 출력만 함..
객체지향(OOP)의 이해 객체지향(OOP)의 맥락에서 객체는 속성과 함수로 구성 ex) Car 라는 객체가 있을 때 속성 : fuel, speed, steering wheel, coordinate... 함수 : accelerate(), takeLeft()... 객체지향 프로그래밍 : 객체 객체의 특성 - 객체는 다른 객체와 상호작용함 - 프로그램으로 무언가를 구현할 때 그 세계관(scope) 내부의 의미있는 정보의 단위들 - 실제 눈에 보이는 물리적인 객체가 아닌 추상적인 객체로 생각해야 객체지향 프로그래밍 : 클래스 클래스 사용하여 특정 객체 표현 가능 - 클래스는 속성과 행동을 포함하는 객체를 정의 - 속성은 데이터의 요소이고 함수는 특정 작업 수행 - 클래스에는 객체의 초기 상태를 설정하는 생성자 ..