일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래머스 네트워크 java
- 백준 16935
- Algorithm
- Math.ceil()
- time complexity
- java
- 프로그래머스 도둑질 java
- 프로그래머스 숫자의 표현 java
- 백준 11723
- 백준 16927
- 백준 4375
- 알고리즘
- java 올림
- sort
- 코딩테스트
- 프로그래머스 옹알이 java
- 백준 17425
- 백준 14391
- Math.floor()
- 프로그래머스 연속된 수의 합 java
- mysql
- 백준 15661
- java 반올림
- java 내림
- 백준 18290
- Arrays
- 네트워크
- Codility
- 0으로 채우기
- 자바
- Today
- Total
목록Design Pattern (14)
취미처럼
어댑터 패턴(Adapter pattern) 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해준다. 어댑터 패턴을 예로 들자면 자바에서 데이터베이스를 접속할 때 사용하는 JDBC를 예를 들 수 있다. JDBC를 통해 다양한 데이터베이스를 접근할 수 있다. /** * Java code sample */ /* the client class should instantiate adapter objects */ /* by using a reference of this type */ interface Stack { void push (T o); T pop (); T top (); } /* DoubleLink..
데코레이터 패턴(decorator pattern) 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴으로, 기능 확장이 필요할 때 서브클래싱 대신 쓸 수 있는 유연한 대안이 될 수 있다. 데코레이터 패턴은 프록시 패턴과 구현 방법이 같다. 차이점은 프록시 패턴은 클라이언트가최종적으로 돌려 받는 반환값을 조작하지 않고 그대로 전달하는 반면, 데코레이터 패턴은 클라이언트가 받는 반환값에 장식을 덧입힌다. // the Window interface interface Window { public void draw(); // draws the Window public String getDescription(); // returns a description of the Window } // impleme..
빌더 패턴(builder pattern) 빌더 패턴이란 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴이다 (생성자 오버로딩) /** "Product" */ class Pizza { private String dough = ""; private String sauce = ""; private String topping = ""; public void setDough(String dough) { this.dough = dough; } public void setSauce(String sauce) { this.sauce = sauce; } public void setTopping(String topping) { this.topping = t..
프록시 패턴(proxy pattern) 대상 객체에 접근하기 전 그 접근에 대한 흐름을 가로채 대상 객체 앞단의 인터페이스 역할을 하는 디자인 패턴 이를 통해 객체의 속성, 변환 등을 보완하며 보안, 데이터 검증, 캐싱, 로깅에 사용한다. 프록시 패턴을 간단하게 정리하자면 제어 흐름을 조정하기 위한 목적으로 중간에 대리자를 두는 패턴 import java.util.*; interface Image { public void displayImage(); } //on System A class RealImage implements Image { private String filename; public RealImage(String filename) { this.filename = filename; loadIm..
옵저버 패턴(observer pattern) 주체가 어떤 객체의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 메서드 등을 통해 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 디자인 패턴 주체란 객체의 상태 변화를 보고 있는 관찰자이며, 옵저버들이란 이 객체의 상태 변화에 따라 전달되는 메서드 등을 기반으로 추가 변화 사항이 생개는 객체들을 의미한다. 옵저버 패턴은 주로 이벤트 기반 시스템에 사용하며 MVC 패턴에도 사용된다. import java.util.ArrayList; import java.util.List; interface Subject { public void register(Observer obj); public void unregister(Observer obj); public voi..
전략 패턴(strategy pattern) 객체의 행위를 바꾸고 싶은 경우 직접 수정하지 않고 전략이라고 부르는 캡슐화한 알고리즘을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴 import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; interface PaymentStrategy { public void pay(int amount); } class CardStrategy implements PaymentStrategy { private String name; private String cardNumber; private String cvv; private String dateOfExpiry; pub..
팩토리 패턴(Factory Pattern) 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴이자 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴 상위 클래스와 하위 클래스가 분리되기 때문에 느슨한 결합을 가지며 상위 클래스에서는 인스턴스 생성 방식에 대해 전혀 알 필요가 없기 때문에 더 많은 유연성을 갖게 된다. 또한 객체 생성 로직이 따로 떼어져 있기 때문에 코드를 리팩터링하더라도 한 곳만 고칠 수 있으니 유지 보수성이 증가한다. abstract class Coffee { public abstract int getPrice(); @Override public String toString(){ retur..
싱글톤 패턴(singleton pattern) 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴 하나의 클래스를 기반으로 여러 개의 개별적인 인스턴스를 만들 수 있지만, 그렇게 하지 않고 하나의 클래스를 기반으로 단 하나의 인스턴스를 만들어 이를 기반으로 로직을 만드는데 쓰이며, 보통 데이터베이스 연결 모듈에 많이 사용 class Singleton { private static class singleInstanceHolder { private static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return singleInstanceHolder.INSTANCE; } } public class..

DIP ( Dependency Inversion Principle ) - 의존 역전 원칙 객체들이 서로 정보를 주고 받을 때 의존 관계가 형성되는데, 이 때 객체들은 나름대로의 원칙을 갖고 정보를 주고 받아야 한다는 설계 원칙이다. 여기서 나름대로의 원칙이란, 추상성이 낮은 클래스보다 추상성이 높은 클래스와 의존 관계를 맺어야 한다는 것을 의미한다. 일반적으로 인터페이스를 활용하면 이 원칙을 준수할 수 있게 된다( 캡슐화 ) Client 객체는 Cat, Dog, Bird의 crying() 메서드에 직접 접근하지 않고, Animal 인터페이스의 crying() 메서드를 호출함으로써 DIP를 만족할 수 있습니다.

ISP ( Interface Segregation Principle ) - 인터페이스 분리 원칙 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다는 설계 원칙이다. 즉, 하나의 거대한 인터페이스 보다는 여러 개의 구체적인 인터페이스가 낫다는 것을 의미한다. SRP는 객체의 단일 책임을 뜻한다면, ISP는 인터페이스의 단일 책임을 의미한다. 예를 들어, 핸드폰( Phone )에는 전화( call ), 문자( sms ), 알람( alarm ), 계산기( calculator ) 등의 기능이 있다. 옛날 3G폰과 현재 스마트폰은 Phone의 기능들을 사용하므로, call, sms, alarm, calculator 기능이 정의된 Phone 인터페이스를 정의하려고 한다. 그러나 ISP를 만족하려면 Phone ..