일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- AWS
- spring boot
- Project
- SpringBoot
- 코딩테스트
- 자취
- MVC
- 자바
- 프로젝트
- 입출력
- gradle
- 코테
- IntelliJ
- MariaDB
- Java
- spring
- 백준
- 스프링
- ps
- 취준생
- JPA
- Controller
- javascript
- 공유DB
- coding test
- React
- 팀프로젝트
- 디자인패턴
- jdk11
- JDK
- Today
- Total
목록Concept (17)
Tech Collection
어댑터 패턴 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환 가능 인터페이스의 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 사용 가능 Enumeration Vector, Stack, Hashtable hasMoreElements(), nextElements() Iterator 이후 버전에서 생긴 새로운 Collections 클래스 hasNext(), next(), remove()
스테이트 패턴 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있다. 마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있다. 각각의 state들을 class로 구현한다. 공통된 행위의 종류를 interface로 빼고, concrete 클래스들이 이를 구현하도록 한다. strategy 패턴과의 차이점 서브클래스를 만드는 방법을 대신하여 유연성을 극대화하기 위한 용도로 쓰임 행동의 변화를 context가 제어 state는 내부적으로 정의된 state transition에 따라 변경된다. 장점 여러 개의 if문을 사용하여 현재 state에 따른 행동을 결정하는 것 각각의 state를 class로 만들고, 현재 state를 composition하는 방식으로 구현하여 로직에서 달라지는 부분인 각 ..
데코레이터 패턴 객체에 추가 요소를 동적으로 더할 수 있다. 서브 클래스를 만드는 경우에 비해 훨씬 유연하게 기능을 확장할 수 있다. 기존 코드를 수정하지 않고도 행동을 확장하는 방법이 필요할 때 사용 구성과 위임을 통해서 실행 중에 새로운 행동을 추가할 수 있다. 데코레이터의 개수에는 제한이 없다. 데코레이터를 너무 많이 사용하면 코드가 필요 이상으로 복잡해질 수도 있다.
팩토리 패턴 객체 생성을 캡슐화 할 수 있다. 클라이언트와 구상 클래스를 분리시키기 위한 간단한 기법으로 활용할 수 있다. 객체 생성은 서브 클래스에게 위임되고 서브 클래스에서는 팩토리 메소드를 구현한다. 애플리케이션의 구상 클래스에 대한 의존성을 줄여줌으로써 느슨한 결합을 도와준다. Factory Method Pattern 객체를 생성하기 위한 인터페이스를 만든다. 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하도록 한다. 인스턴스를 만드는 일을 서브클래스로 미룰 수 있다. inheritance를 통해 object 생성, 하나의 object 생성만 담당 Abstract Factory Pattern 서로 연관된, 또는 의존적인 객체들로 이루어진 제품군을 생성하기 위한 인터페이스를 제공한다. 구상클..
옵저버 패턴 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식 일대다(1:n) 의존성을 정의한다. Observable (1) : Observer (n) 순서 상관 없이 연락 한다. (느슨한 결합) import java.util.Observable; public class Seeker extends Observable { public Seeker() { } public void alarm() { setChanged(); notifyObservers(); } } import java.util.Observable; import java.util.Observer; public class Target extends Observer { Observable obs..
싱글톤 패턴 해당 클래스의 인스턴스가 최대 한 개까지만 만들어진다. 유일한 인스턴스를 어디서든지 접근할 수 있도록 할 수 있다. Java에서는 private 생성자와 정적메소드, 정적 변수를 사용 Singleton Pattern 형식 public class Test { // 정적 변수 private static Test t; // private 생성자 private Test() { } // 정적 메소드 public static Test getInstance() { if(t == null) { t = new Test(); } return t; } } 다중 스레드를 사용하는 어플리케이션에서는 속도와 자원 문제를 파악해보고 적절한 구현법을 사용해야 한다. → DCL (Double-Checking Locking..
스트래티지 패턴 알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다. 스트래티지를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다. public interface FlyBehavior { public void fly(); } public class FlyWithWings implements FlyBehavior { public void fly() { System.out.println("날고 있어요!"); } } public interface QuackBehavior { public void quack(); } public class Quack implements QuackBehavior { public void quack() { System.out.p..
재사용성, 확장성, 관리의 용이성을 갖추어야 한다. 대부분의 패턴은 시스템의 일부분을 나머지 부분과 무관하게 변경하는 방법을 제공한다. 패턴은 다른 개발자들과의 의사소통의 가치를 극대화 시킬 수 있는 전문 용어 역할을 한다. 디자인 원칙 상속보다는 구성을 활용한다. 바뀌는 부분은 캡슐화 한다. 구현이 아닌 인터페이스에 맞춰서 프로그래밍 한다. 서로 상호작용을 하는 객체 사이에는 가능하면 느슨하게 결합하는 디자인을 사용해야 한다. 느슨한 결합을 이용하는 디자인이 훨씬 더 유연하고 변화에 강하다. 클래스는 확장에 대해서는 열려있지만 변경에 대해서는 닫혀 있어야 한다. (OCP) 시스템을 디자인할 때는 닫혀있는 부분이 새로 확장되는 부분하고 확실하게 구분되도록 노력합시다. 추상화된 것에 의존하라, 구상 클래스..