일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프론트엔드 과제
- 모던 자바스크립트
- oauth
- compateto
- redis
- 검색
- 프리코스
- 타입스크립트
- 프로그래머스
- NestJS
- 음악 url 파일 다운로드
- AWS
- api 요청 수 제한
- Dev-Matching
- TypeORM
- this
- 딥다이브
- invalid_grant
- 코멘토 #코멘토실무PT #실무PT후기 #실무강의 #리액트강의 #웹프로그래밍 #react #웹개발실무
- 우아한 테크코스
- 자바스크립트
- 파일 url
- 프론트엔드
- 우아한테크코스
- 스프링부트
- api 비동기처리
- concurrency limit
- 유효시간 설정 url
- bucket4j
- Deep Dive
- Today
- Total
목록분류 전체보기 (174)
개발 알다가도 모르겠네요
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/s41Dw/btrnyoMwLJg/r6lTAdckyQpOZhLRluiDG0/img.png)
객체 생성 처리를 서브 클래스로 분리, 캡슐화해 주는 패턴 객체 생성 처리를 서브 클래스로 분리 해 처리하도록 캡슐화 전체적인 알고리즘의 코드를 재사용하는데 유용하게 쓰입니다. 전체적으로 동일하면서 부분적으로 상이한 문장을 가지는 메소드의 코드 중복을 최소화할 때 유용합니다. 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..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lMz2t/btrnAjxvAQ8/XWOc55Wr31ORl89dPELE20/img.png)
전체적인 알고리즘을 구현하면서 상이한 부분은 하위 클래스에서 구현할 수 있도록 해 주는 패턴 전체적인 알고리즘의 코드를 재사용하는데 유용하게 쓰입니다. 전체적으로 동일하면서 부분적으로 상이한 문장을 가지는 메소드의 코드 중복을 최소화할 때 유용합니다. Example - 여러 회사의 모터를 지원하자 엘리베이터 제어 시스템에서 모터를 구동시키는 기능 -HyundaiMotor 클래스: 모터를 제어하여 엘리베이터를 이동시키는 클래스 -Door 클래스: 문을 열거나 닫는 기능을 제공하는 클래스 HyundaiMotor 클래스는 현대모터를 구동시킴. 만약 다른 회사의 모터를 제어해야 한다면? 예를 들어 LG모터를 구동시키려면? move 메서드에서 공통적인 부분을 상위 클래스 Motor로 이동. public abst..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bpgTDC/btrnAjEbuuD/L3kXTwTsavV9muCtjOYRv1/img.png)
기본 기능에 추가될 수 있는 많은 수의 부가 기능에 대해서 다양한 조합을 동적으로 구현 할 수 있는 패턴 기본 기능에 추가할 수 있는 기능의 종류가 많은 경우에 쓰입니다. Example - 도로 표시 방법 조합하기 -RoadDisplay 클래스: 기본 도로 표시 기능을 제공하는 클래스 -RoadDisplayWithLane 클래스: 기본 도로 표시에 추가적으로 차선을 표시하는 클래스 또다른 추가적인 도로 표시 기능을 구현하고 싶다면? 기본 도로 표시에 교통량을 표시하고 싶다면? 여러가지 추가 기능의 조합하여 제공하고 싶다면? 기본 도로 표시에 차선 표시 기능과 교통 량 표시 기능을 함께 제공하고 싶다면?
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/FPWeY/btrnBMSJlsg/vwCW4GOo72YLKSEYx3kBhk/img.png)
변화를 식별 -> 클래스를 캡슐화 -> 추상 or 인터페이스로 아우를 수 있는 개념. 데이터의 변경이 발생하였을 때 상대 클래스 및 객체에 의존하지 않으면서 데이터 변경을 통보하고자 할 때 쓰입니다. 데이터가 변경시 통지되는 클래스에 의존하면 안되며, 새로운 통보대상이 추가돼도 데이터 관리클래스는 수정되면 안됩니다. 옵서버 패턴은 통보 대상 객체의 관리를 Subject 클래스와 Observer 인터페이스로 일반화합니다. 그러면 데이터 변경을 통보하는 클래스(ConcreteSubject)는 통보 대상 클래스/객체ConcreteObserver)에 대한 의존성을 제거할 수 있습니다. 결과적으로 통보 대상 클래스나 대상 객체의 변경에도 ConcreteSubject 클래스를 수정 없이 그대로 사용할 수 있도록 합..
공통점 변화되는 것이 무엇인지 식별. 식별 후, 클래스로 생성, 사용하는 측에서 아우를 수 있는 개념을 사용하도록 디자인. 차이점 실행하는 주체가 다름. Strategy는 주체가 같음. Command는 요청마다 달라질 수 있음. ex)Power 실행 요청: TV, Sing 요청: Bird 변화되는 것의 목적이 다름. Strategy는 변화되는 것이 동일한 목적을 수행. Command는 변화되는 것은 request. 즉 목적이 다를 수 있음.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/yIDvr/btrnBaz12qR/4sJs3rW6pdoaLMTkwD1xeK/img.png)
이벤트가 발생했을 때 실행될 기능이 다양하면서 변경이 필요한 경우 이벤트를 발생시키는 클래스의 변경없이 재사용 커맨드 패턴은 실행될 기능을 캡슐화함으로써 기능의 실행을 요구하는 호출자 클래스 (Invoker)와 실제 기능을 실행하는 수신자 클래스 (Receiver) 사이의 의존성을 제거합니다. 따라서 실행될 기능의 변경에도 호출자 클래스를 수정없이 그대로 사용할 수 있도록 해줍니다. Example - 만능 버튼 만들기 램프를 켜는 버튼 -Button 클래스: 버튼이 눌렸음을 인식하는 클래스 -Lamp 클래스: 불을 켜는 기능을 제공 버튼이 눌렸을 때 램프를 켜는 대신에 다른 기능을 수행하려면? 버튼이 눌리면 알람을 시작시키려면? 버튼이 눌렸을 때 수행되는 기능을 프로그램이 동작할 때 결정하려면? 버튼이 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/nw8hN/btrnCPapUc5/VdvZxOCoXVAx3amcP13AxK/img.png)
스트래티지 패턴은 전략을 쉽게 바꿀 수 있도록 해주는 디자인 패턴 전략이란 어떤 목적을 달성하기 위해 일을 수행하는 방식, 비즈니스 규칙, 문제를 해결하는 알고리즘. 프로그램에서 전략을 실행할 때는 쉽게 전략을 바꿔야 할 필요가 있는 경우가 많이 발생합니다. 특히 게임 프로그래밍에서 게임 캐릭터가 자신이 처한 상황에 따라 공격이나 행동하는 방식을 바꾸고 싶을 때 스트래티지 패턴은 매우 유용하게 쓰입니다. Example - 로봇만들기 기존 로봇의 공격 또는 이동 방법을 수정하려면? 아톰이 날 수는 없고 오직 걷게만 만들고 싶다면? 또는 태권V를 날게 하려면? 새로운 로봇을 만들어 기존의 공격 또는 이동 방법을 추가하거나 수정하려면?
빌더패턴은 아래와 같은 경우에 쓰입니다. 객체 생성 패턴 생성자의 인자가 많은 경우 생성자의 인자들 중에 필수적 인자와 선택적 인자가 혼합되어 있는 경우 Immutable 객체(변경할 수 없는 객체)를 생성하고 싶은 경우 Telescoping Constructor패턴 (점층적 생성자 패턴) 필수 인자를 받는 생성자를 정의한 후에 선택적 인자를 추가로 받는 생성자를 계속해서 정의 public class Book { private Long id; //필수 private String isbn; //필수 private String title; private String author; private int pages; private String category; } //필수적 인자 생성자 public Book(L..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/rUff9/btrn83eQ4LB/dqu59rdNtYH8SkwkOp5Ht1/img.png)
객체의 인스턴스가 오직 1개만 생성되는 패턴 애플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에 인스턴스를 만들어 사용. 싱글턴은 하나의 원소만을 갖는 집합을 말합니다. 인스턴스: 클래스 특성O 객체: 클래스 특정X Example - Logger 만들기 public class Logger { private final String LOGFILE = "log.txt"; private PrintWriter writer; public Logger() { try { FileWriter fw = new FileWriter(LOGFILE); writer = new PrintWriter(fw, true); } catch (IOException e) {} } public vo..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/claQoe/btrnBbL11EG/Hp1ogZDWLvft9Eprk8CuEK/img.png)
SOLID란? 로버트 마틴이 주장한 다섯 가지 설계원칙을 말함. SRP(단일 책임 원칙, Single Responsibility Principle) OCP(개방 폐쇄 원칙, Open Closed Principle) LSP(리스코프의 대입 원칙, Liskov Substitution Principle) ISP(인터페이스 분리 원칙, Interface Segregation Principle) DIP(의존성 역전 원칙, Dependency Inversion Principle) SRP (Single Responsibility Principle) 단일 책임 원칙 (클래스는 단 하나의 책임만을 가지도록 설계해야 한다는 의미) 책임은 보통 「해야 하는 것」으로 간주. 클래스에 책임을 할당할 때 당연히 그 책임을 수행해..