일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프리코스
- api 비동기처리
- bucket4j
- this
- compateto
- AWS
- 딥다이브
- 우아한 테크코스
- 타입스크립트
- 검색
- 유효시간 설정 url
- 음악 url 파일 다운로드
- 코멘토 #코멘토실무PT #실무PT후기 #실무강의 #리액트강의 #웹프로그래밍 #react #웹개발실무
- NestJS
- oauth
- Dev-Matching
- 파일 url
- TypeORM
- api 요청 수 제한
- 자바스크립트
- 프론트엔드 과제
- 프로그래머스
- 프론트엔드
- 모던 자바스크립트
- 우아한테크코스
- 스프링부트
- redis
- concurrency limit
- Deep Dive
- invalid_grant
- Today
- Total
목록디자인패턴 (15)
개발 알다가도 모르겠네요
클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해줍니다. Example public interface Adder { public int plus(int x, int y); } public class MyAdder implements Adder { @Override public int plus(int x, int y) { return x + y; } } public class UseAdder { public int add(Adder adder, int x, int y) { int r = 0; r = adder.plus(x, y); return r; } } public class Main { public..
그룹 객체와 단일 객체 사이의 차이를 느끼지 못하도록 객체를 구성하는 패턴 전체-부분의 관계를 가지는 객체들 간의 관계를 정의 할 때 유용합니다. 클라이언트는 전체와 부분을 구분하지 않고 동일한 인터페이스를 사용할 수가 있습니다. Example - 택배 비용 계산하기 택배로 보낼 수 있는 항목을 포함하는 개념(ParcelItem) 생성 “한 Box는 택배로 보낼 수 있는 항목(ParcelItem)을 여러 개 가질 수 있다”는 사실을 표현
추상부와 구현부를 분리하여 각각 독립적으로 변경할 수 있도록 하는 패턴. 전체적인 알고리즘의 코드를 재사용하는데 유용하게 쓰입니다. 전체적으로 동일하면서 부분적으로 상이한 문장을 가지는 메소드의 코드 중복을 최소화할 때 유용합니다. - 추상부(abstraction): high-level function 제공. - 구현부(implementation): low-level function 제공 - 추상부에서 제공하는 기능을 실현하기 위해 구현부로 위임(delegation) Example Remote -> high-level operation | | delegation | TV -> low-level operation
관련성이 있는 여러 종류의 객체를 일관된 방식으로 생성할 때 유용 Example - 엘리베이터 만들기 Template Method 패턴을 적용 class Motor { public void move(Direction direction) { // 1) 이미 이동 중이면 무시한다. // 2) 만약 문이 열려 있으면 문을 닫는다. // 3) 모터를 구동해서 이동시킨다. 이 부분만 LG, 현대에서 달라짐 // 4) 모터의 상태를 이동중으로 설정한다. } } class Door { public void open() { // 1) 이미 문이 열려있으면 무시한다. // 2) 문을 연다.이 부분만 LG, 현대에서 달라짐 // 3) 문의 상태를 열림으로 설정한다. } } class DirectionLamp { ..
객체 생성 처리를 서브 클래스로 분리, 캡슐화해 주는 패턴 객체 생성 처리를 서브 클래스로 분리 해 처리하도록 캡슐화 전체적인 알고리즘의 코드를 재사용하는데 유용하게 쓰입니다. 전체적으로 동일하면서 부분적으로 상이한 문장을 가지는 메소드의 코드 중복을 최소화할 때 유용합니다. Example - 사과를 디저트로 제공하는 식당 클래스 만들기 public class Restaurant { public Apple servingApple() { Apple apple = new Busa(); apple.wash(); apple.peel(); apple.slice(); return apple; } } public abstract class Apple { public abstract void wash(); public..
전체적인 알고리즘을 구현하면서 상이한 부분은 하위 클래스에서 구현할 수 있도록 해 주는 패턴 전체적인 알고리즘의 코드를 재사용하는데 유용하게 쓰입니다. 전체적으로 동일하면서 부분적으로 상이한 문장을 가지는 메소드의 코드 중복을 최소화할 때 유용합니다. Example - 여러 회사의 모터를 지원하자 엘리베이터 제어 시스템에서 모터를 구동시키는 기능 -HyundaiMotor 클래스: 모터를 제어하여 엘리베이터를 이동시키는 클래스 -Door 클래스: 문을 열거나 닫는 기능을 제공하는 클래스 HyundaiMotor 클래스는 현대모터를 구동시킴. 만약 다른 회사의 모터를 제어해야 한다면? 예를 들어 LG모터를 구동시키려면? move 메서드에서 공통적인 부분을 상위 클래스 Motor로 이동. public abst..
기본 기능에 추가될 수 있는 많은 수의 부가 기능에 대해서 다양한 조합을 동적으로 구현 할 수 있는 패턴 기본 기능에 추가할 수 있는 기능의 종류가 많은 경우에 쓰입니다. Example - 도로 표시 방법 조합하기 -RoadDisplay 클래스: 기본 도로 표시 기능을 제공하는 클래스 -RoadDisplayWithLane 클래스: 기본 도로 표시에 추가적으로 차선을 표시하는 클래스 또다른 추가적인 도로 표시 기능을 구현하고 싶다면? 기본 도로 표시에 교통량을 표시하고 싶다면? 여러가지 추가 기능의 조합하여 제공하고 싶다면? 기본 도로 표시에 차선 표시 기능과 교통 량 표시 기능을 함께 제공하고 싶다면?
변화를 식별 -> 클래스를 캡슐화 -> 추상 or 인터페이스로 아우를 수 있는 개념. 데이터의 변경이 발생하였을 때 상대 클래스 및 객체에 의존하지 않으면서 데이터 변경을 통보하고자 할 때 쓰입니다. 데이터가 변경시 통지되는 클래스에 의존하면 안되며, 새로운 통보대상이 추가돼도 데이터 관리클래스는 수정되면 안됩니다. 옵서버 패턴은 통보 대상 객체의 관리를 Subject 클래스와 Observer 인터페이스로 일반화합니다. 그러면 데이터 변경을 통보하는 클래스(ConcreteSubject)는 통보 대상 클래스/객체ConcreteObserver)에 대한 의존성을 제거할 수 있습니다. 결과적으로 통보 대상 클래스나 대상 객체의 변경에도 ConcreteSubject 클래스를 수정 없이 그대로 사용할 수 있도록 합..
공통점 변화되는 것이 무엇인지 식별. 식별 후, 클래스로 생성, 사용하는 측에서 아우를 수 있는 개념을 사용하도록 디자인. 차이점 실행하는 주체가 다름. Strategy는 주체가 같음. Command는 요청마다 달라질 수 있음. ex)Power 실행 요청: TV, Sing 요청: Bird 변화되는 것의 목적이 다름. Strategy는 변화되는 것이 동일한 목적을 수행. Command는 변화되는 것은 request. 즉 목적이 다를 수 있음.
이벤트가 발생했을 때 실행될 기능이 다양하면서 변경이 필요한 경우 이벤트를 발생시키는 클래스의 변경없이 재사용 커맨드 패턴은 실행될 기능을 캡슐화함으로써 기능의 실행을 요구하는 호출자 클래스 (Invoker)와 실제 기능을 실행하는 수신자 클래스 (Receiver) 사이의 의존성을 제거합니다. 따라서 실행될 기능의 변경에도 호출자 클래스를 수정없이 그대로 사용할 수 있도록 해줍니다. Example - 만능 버튼 만들기 램프를 켜는 버튼 -Button 클래스: 버튼이 눌렸음을 인식하는 클래스 -Lamp 클래스: 불을 켜는 기능을 제공 버튼이 눌렸을 때 램프를 켜는 대신에 다른 기능을 수행하려면? 버튼이 눌리면 알람을 시작시키려면? 버튼이 눌렸을 때 수행되는 기능을 프로그램이 동작할 때 결정하려면? 버튼이 ..