일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 파이썬릿코드풀기
- leetcode풀이
- python xor
- 릿코드풀기
- leetcode풀기
- LeetCode
- 코틀린기초
- 상가수익률계산기
- 릿코드 풀기
- 파이썬알고리즘
- python 알고리즘
- 알고리즘풀기
- 릿코드 파이썬
- 파이썬 릿코드
- python priority queue
- python zip_longest
- 파이썬 알고리즘 풀기
- 파이썬알고리즘풀기
- 잇츠디모
- 릿코드
- python 릿코드
- python sorted
- 릿코드풀이
- 파이썬 알고리즘
- python Leetcode
- 파이썬릿코드
- leetcode 풀기
- 파이썬 프로그래머스
- 알고리즘풀이
- binary search
- Today
- Total
목록시스템 설계 및 디자인 (20)
소프트웨어에 대한 모든 것
중재자 패턴 정의 클래스 간의 복잡한 관계들을 캡슐화하여 하나의 클래스에서 관리하도록 처리하는 패턴 M개의 객체들 사이에 중재자를 추가하여 중재자가 모든 객체들의 통신을 담당 각 객체들은 서로 알 필요가 없고 중재자 클래스가 관리하므로 loose coupling을 유지 옵저버 패턴은 1개의 publisher(subject)가 N개의 subscriber(observer)에 대해서 push하는 방식을 통해 관리하지만 중재자 패턴은 M개의 publisher와 N개의 subscriber 사이에서 1개의 중재자(mediator)를 통해서 통신하는 방식 중재자 패턴은 복잡한 M개의 객체 사이에 N개의 관계가 형성되어 있을 때 M개의 객체 사이에 중재자를 하나 넣어서 이를 M:1 관계로 바꿔준다. 중재자 패턴 언제 ..
옵저버 패턴 정의 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용 발행/구독 모델로 알려져 있음 객체의 상태 변화를 관찰하는 관찰자들(옵저버)의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하는 디자인 패턴 어떤 객체의 상태가 변할 때 그와 연관된 객체들에게 알림을 보냄 옵저버 패턴 클래스 다이어그램 옵저버 패턴 활용 날씨(온도, 습도, 압력) 데이터가 있고 날씨 데이터가 변경되면 등록한 영상 출력 기기에 정보를 업데이트 하는 시스템을 디자인 해봅시다. 날씨 데이터는 Subject에 해당하고 영상 출력기기는 옵저버(구독자)에 합니다. WehaterData는 온도, 습도, 압력 데이터를 가지고 있고, observer 리스트에 옵저버들을 관리합니..
프로식 패턴 정의 프로토타입 패턴은 cloing을 통해서 존재하는 오브젝트 기반으로 오브젝트를 생성합니다. 프로토타입 패턴은 객체 생성에 비용, 시간, 리소스가 많이 필요하고 이미 유사한 객체가 있는 경우에 사용됩니다. 따라서 이 패턴은 원본 객채를 새 객체에 복사한 다음 필요에 따라 수정하는 메커니즘을 제공합니다. 프로토타입 패턴 장점 sub-classing을 줄임 객체 생성의 복잡성을 숨김 클라이언트는 어떤 유형의 객체가 될지 알지 못해도 새 객체를 얻을 수 있음 런타임에 객체를 추가하거나 제거할 수 있음 비용이 많이 드는 데이터베이스 작업 후에 특정 객체가 생성된다고 칩시다. 이 작업이 반복 요청이 발생하고 중복적인 객체 생성에 많은 비용이 들어갑니다. 그렇다면 생성된 객체를 캐시하고 다음 요청이 ..
컴포지트 패턴 정의 컴포지트 패턴(합성 패턴)은 하나의 클래스와 복합 클래스를 동일한 구성을 하여 사용하는 방법입니다. 컴포지트 패턴은 디렉토리, 파일과 같은 트리 구조의 재귀적 데이터 구조를 표현하는데 적합한 패턴입니다. 컴포지트 의도는 트리 구조로 작성하여, 전체-부분(whole-part) 관계를 표현하는 것입니다. 컴포지트 패턴 언제 사용 전체-부분 관계를 트리 구조로 표현하고 싶을 경우 전체-부분 관계를 클라이언트에서 부분, 관계 객체를 동일하게 처리하고 싶은 경우 컴포지트 패턴 클래스 다이어그램 Client는 Lean와 Composite를 직접 참조 하지 않고 공통 인터페이스 Componet를 참조 Leaf는 Component 인터페이스를 구현 Composite 클래스는 Component 객체 ..
프록시 패턴 정의 프록시에게 어떤 일을 대신 시키는 것 어떤 객체를 사용할 때 객체를 직접적으로 참조하는 것이 아닌 해당 객체를 대리하는 객체를 통해서 대상 객체에 접근하는 방식. 이는 해당 객체가 메모리에 존재하지 않아도 기본적인 정보를 참조하거나 설정할 수 있고, 실제 객체의 기능이 필요한 시점까지 객체의 생성을 미룰 수 있음 프록시 패턴 장점, 단점 장점 메모리 사용량이 큰 객체가 로딩 전에 프록시를 통해서 참조 가능 로컬에 있지 않고 떨어져 있는 객체 사용 가능 원래 객체의 접근에 대해서 사전처리 작업 가능 단점 객체 생성에 한 단계를 거치므로 빈번한 객체 생성이 필요한 경우 성능 저하 발생 가능 코드 가독성 저하 프록시 패턴 특징 대리자는 실제 서비스와 같은 이름의 메소드를 구현 대리자는 실제 ..
팩토리 메소드 패턴 정의 팩토리 메소드는 가장 널리 사용되는 생성 패턴 중 하나입니다. '공장' 즉 객체를 생산하는 패턴인데 객체를 만들어 내는 부분을 서브 클래스에 위임하는 패턴이라고 할 수 있습니다. 팩토리 메소드는 객체 생성을 처리하며, 팩토리 메소드를 이용하면 객체를 생성하는 작업을 서브클래스에 캡슐화시킬 수 있습니다. 이렇게 하면 슈퍼클래스에 있는 클라이언트 코드와 서브클래스에 있는 객체 생성 코드를 분리시킬 수 있습니다.(by 헤드퍼스트 디자인패턴) 구상(Concrete) 형식의 인스턴스를 만드는 작업을 캡슐화 팩토리 메소드 패턴 클래스 다이어그램 팩토리 메소드 패턴 활용 빌딩 클래스가 있고, 빌딩은 유럽 스타일, 한국 스타일로 지어질 수 있습니다. 빌딩 클래스를 상속 받아서 병원 건물과 대학..
의존성 역전 법칙 (Dependency Inversion Principle) 고차원 모듈은 저차원 모듈에 의존하지 말아야한다. --> 상위클래스는 하위 클래스에 의존해서는 안된다는 원칙 변경이 잦은 Concrete 클래스에 의존하지 말고 인터페이스나 추상 클래스에 의존 관계를 맺도록 설계 의존성 역전 법칙은 클래스들 사이에 abstraction layer를 생성해서 클래스 사이의 커플링을 줄이는 것을 목표로 한다. 의존성 역전 법칙 예시 외환 거래 예시를 통해서 의존성 역전 법칙에 대해서 알아 봅니다. class FXConverter: def convert(self, from_currency, to_currency, amount): print(f'{amount} {from_currency} = {amou..
인터페이스 분리 원칙 (Interface Segregation Principle) OOP에서 인터페이스는 object가 반드시 가져하는 methods의 집합입니다. 파이썬은 abstract classes를 인터페이스로 사용합니다. 인터페이스 분리 원칙에 따르면 인터페이스는 가능한 작게 만들며 한 가지만 수행해야 합니다. 인터페이스 분리 원칙을 통해 시스템의 내부 의존성을 약화시켜서 리팩토링, 수정, 재배포를 쉽게 할 수 있습니다. 인터페이스 분리 원칙 예제 운송수단 aircraft, car 클래스가 있다고 합시다. 이 둘의 추상 클래스 vehicle를 만듭니다. from abc import ABC, abstractmethod class Vehicle(ABC): @abstractmethod def go(s..