일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 릿코드 풀기
- binary search
- 알고리즘풀이
- leetcode 풀기
- 파이썬알고리즘풀기
- 코틀린기초
- leetcode풀이
- python sorted
- 릿코드
- 릿코드 파이썬
- 릿코드풀기
- python priority queue
- 알고리즘풀기
- 릿코드풀이
- 상가수익률계산기
- python Leetcode
- python 알고리즘
- python zip_longest
- leetcode풀기
- python 릿코드
- 파이썬릿코드
- 파이썬알고리즘
- 파이썬릿코드풀기
- 파이썬 릿코드
- 파이썬 프로그래머스
- Today
- Total
목록시스템 설계 및 디자인 (20)
소프트웨어에 대한 모든 것
어댑터 패턴 정의 호환성이 없는 기존 클래스의 인터페이스를 변환하여 사용자가 기대하는 인터페이스 형태로 변환시키는 패턴 코드의 재활용성을 증가하고 기존의 코드를 수정하지 않는 장점이 있음 어댑터 패턴 언제 사용? 외부 구성 요소를 기존 시스템에 재사용하고 싶지만 호환되지 않는 경우 애플리케이션이 클라이언트가 기대하는 인터페이스와 호환되지 않는 경우 원본 코드를 수정하지 않고 애플리케이션에서 레거시 코드를 재사용하려는 경우 어댑터 패턴 클래스 다이어그램 어댑터 패턴 활용 기존 시스템에 Fighter 인터페이스가 있고 이를 상속 받은 Warrior 클래스가 있습니다. attack(), defend(), escape() 오퍼레이션을 지원합니다. 외부에서 Wizard(마법사) 클래스는 이미 만들어져 있었습니다...
플라이웨이트 패턴 정의 동일하거나 유사한 객체들 사이에 가능한 많은 데이터를 서로 공유하여 메모리 사용량을 최소화하는 패턴 공유되는 많은 객체의 수를 줄여서 메모리 사용량을 줄여주는 패턴 특정 클래스의 인스턴스 한 개만 가지고 여러 개의 가상 인스턴스를 제공 플라이웨이트 패턴은 객체를 공유하는 방식으로 객체를 구성해서 메모리 사용량을 줄이는 패턴입니다. 플라이웨이트 패턴은 현업에서 개발을 하면 자기도 모르게 쓰고 있을 패턴입니다. 중복적인 객체가 있고 메모리 사용량이 많으면 하나만 생성해서 공유해서 사용하도록 디자인 해소 부지불식간에 플라이웨이트 패턴을 적용 했을 것이지요. 플라이웨이트 패턴 클래스 다이어그램 플라이웨이트 패턴은 여러 다양한 방법으로 활용되어 구현될 수 있기 때문에 아래의 한 가지 클래스..
본 글은 Software architects: 12 hard and soft skills needed to become a leader를 기반으로 작성되었습니다. Software Architect는 무엇인가? 소프트웨어 아키텍처는 높은 수준의 설계를 디자인하고 기술 표준을 구성합니다. 여기에는 소프트웨어 tools, 소프트웨어 코딩 표준 또는 플랫폼이 포함될 수 있습니다. 효과적인 의사결정을 내리기 위해서는 소프트웨어 아키텍처 폭 넓고 깊이 있는 기술 지식이 필요합니다. 그들은 또한 프로젝트와 사람을 관리할 수 있는 소프트 스킬이 있어야 합니다. Software Archtect: 필요한 hard 스킬 프로젝트마다 다른 기술 지식이 필요하기 때문에 모든 상황에 적용 가능한 정의를 내릴 수 없습니다. 그렇지..
상태 패턴 정의 상태 패턴은 개체의 모든 가능한 상태에 대해 새 클래스를 만들고 모든 상태별 동작을 이러한 클래스로 추출하는 것 각 상태의 모든 행동을 한 클래스에 집어 넣어서 행동을 국지화 시킴 스테이트 패턴을 이용하면 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있습니다. 마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있습니다. - by Head First Design Patterns 상태 패턴 장점 각 상태의 행동을 별개의 클래스로 국지화해서 코드 수정이 용이 State에 따라서 분기하는 if 선언문 제거 각 상태 변경에 대해서 닫혀 있도록 하고 새로운 상태 클래스 추가하는 확장에 대해 열려 있음 상태 패턴 클래스 다이어그램 상태 패턴 활용 AudioPlayer를 예시로 사용합..
빌더 패턴 정의 복잡한 객체 생성을 표현으로부터 분리 매개 변수가 많거나 선택적 매개변수를 써야할 상황이 많을 경우 이를 해결할 방법으로 주로 쓰이는 생성 패턴 방식 빌더 패턴을 이용하면: 불필요한 생성자를 만들지 않고 객체를 생성합니다. 데이터의 순서에 상관없이 객체를 생성합니다. 사용자가 봤을 때 객체의 생성을 명시적으로 이해할 수 있습니다. 빌더 패턴 필요성 여기 링크에 빌더 패턴이 왜 필요한지 설명이 잘 되어 있습니다. Problem 발생 House 객체를 생성하는 방법에 대해서 고민해봅시다. 위의 그림 처럼 단순한 집도 있고, 차고지가 있는 집, 예쁜 조각상이 있는 집, 풀장이 있는 집, 수목이 화려한 집 등등등.. 아주 많은 조건을 가진 집들이 있을 것입니다. 이런 모든 조건들으 고려한 Hou..
브릿지 패턴 정의 기능 클래스 계층과 구현 클래스 계층을 연결해주는 패턴 기능 클래스, 구현 클래스는 서로 영향을 주지 않고 구조적으로 변경할 수 있음 브릿지 패턴은 상속보다는 구성을 선호 브릿지 패턴의 의도는 추상화를(기능) 구현에서 분리하여 두 가지가 독립적으로 변할 수 있도록 하는 것 브릿지 패턴 장점 예를 들어서, Shape(원, 사각)이 있고 색깔(Red, Blue)이 있는 경우 브릿지 패턴을 적용하지 않으면 각각 4개의 클래스가 존재합니다. 여기에서 새로운 shape이나 새로운 Color가 추가된다면 exponentially하게 클래스 수가 증가합니다. 너무 비효율적이고 관리도 어렵습니다. 브릿지 패턴을 적용해서 기능부, 구현부를 나눈다면 새로운 Shape나 Color가 추가되도 각 층에 클래..
템플릿 메소드 정의 알고리즘의 골격만 정의하고 각 단계에 대한 구체적인 처리는 서브클래스에게 위임하는 패턴 행동 패턴 중 하나로 굉장히 자주 사용하는 패턴 중 하나 템플릿 메소드 패턴은 슈퍼클래스에서 알고리즘 뼈대만 작성하고, 서브클래스에서 구체적인 구현을 재정의하는 패턴 템플릿 메소드 클래스 다이어그램 템플릿 메소드 활용 Pizza의 go() 함수가 템플릿 메소드(알고리즘 골격)에 해당하고, Pizza를 상속받은 NYPizza, KoreaPizza 클래스가 있습니다. NYPizza는 뉴욕 스타일로 피자를 만들어야 하기 때문에 prepare(), cook(), eat() 함수를 재정의 합니다. KoreaPizza 또한 한국식에 맞게 함수를 재정의 합니다. 결국 피자를 만들기 위한 뼈대만 Pizza 클래스..
추상 팩토리 패턴 정의 다양한 구성 요소 별로 '객체의 집합'을 생성해야 할 때 유용 관련성 있는 여러 종류의 객체를 일관된 방식으로 생성하는 패턴 추상 팩토리 패턴은 다양한 구성 요소 별로 객체의 집합(군)을 만들기 위한 패턴 추상 팩토리 패턴 클래스 다이어그램 ConcreteFactory1, ConcreateFactory2는 서로 다른 객체의 집합군을 생성한다. AbatractFactory를 상속 받아서 ConcreateFactoryN을 만들어서 다양한 객체의 집합군을 생성할 수 있다. 클라이언트는 복잡한 객체의 생성에 관여하지 않고 팩토리에게 객체의 생성을 맡겨서 객체 생성을 분리시킨다. 추상 팩토리 패턴 활용 Browser, Messenger 제품이 있고, 해당 제품에 일반 제품과 보안이 적용된 ..