본문 바로가기
[Design pattern] Factory pattern (팩토리 패턴) 팩토리 패턴 팩토리라는 클래스에 객체 생성을 위임(캡슐화)하여 팩토리 클래스가 객체를 생성하도록 하는 방식. 어떤 클래스의 인스턴스를 생성할지 서브클래스에서 결정하도록 한다는게 팩토리 패턴의 핵심. 분류에 딱히 큰 의미는 없는 듯 하나, 팩토리 메소드 패턴과 추상 팩토리 메소드 패턴으로 나누고 있다. "구상클래스에 의존하지 않게, 추상화 된 것에 의존하도록 개발" 을 따르는 패턴 1. 팩토리 메소드 패턴 : 객체 생성을 담당하는 팩토리 메소드 작성하여 객체 생성을 캡슐화 : 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정한다. [Mouse interface] 1 2 public interface Mouse { } cs [LGMouse.java] Mous.. 2020. 1. 30.
[Design pattern] Adaptor pattern (어댑터 패턴) 그리고 캡슐화 어댑터 패턴은 실생활에서 사용하는 어댑터와 동일한 역할을 수행한다. 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환한다. 어댑터 패턴 사용시 라이브러리를 직접 사용하는 것이 아닌, 라이브러리를 캡슐화한 어댑터를 사용하게 되므로, 소스간 결합도가 약해지는 장점이 있다. wrapper 와 slf4j(log4j 의 어댑터) 는 어댑터라 볼 수 있다. [Adapter Pattern의 Class 다이어그램(참고)] Client 는 Adapter 구상 클래스를 Target Interface를 통해 사용한다. Adapter 클래스는 Target Interface를 구현한다. Adapter 클래스는 Adaptee(새롭게 사용할 구상 클래스) 를 구상 클래스로 사용하며, Adapter의 R.. 2020. 1. 26.
[Design pattern] Builder pattern (빌더 패턴) : 객체를 정의하는 세가지 패턴 1. Telescoping Pattern (텔레스코핑 패턴) 생성자와 오버로딩을 사용하는 패턴 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 package design_pattern.builder; public class CoordinateTelescoping { //텔레스코핑 생성자 패턴 //Telescoping constructor private final int x; private final int y; private int w; private int h; public CoordinateTelescoping(int x, int y) { this(x, y, 0, 0); } public CoordinateTelescoping(int x, int y.. 2019. 12. 24.
[Design pattern] Proxy pattern (프록시 패턴) 원래 객체의 기능을 다른 객체가 대신 처리하도록 설계하는 패턴 AOP 등에 사용되는 패턴 Proxy 기본 패턴 [Subject interface] 1 2 3 public interface Subject { public String action(); } cs [RealSubject class] 실제 사용하는 객체 1 2 3 4 5 6 7 8 public class RealSubject implements Subject{ @Override public String action() { return "Real Subject action()"; } } Colored by Color Scripter cs [Proxy class] 프록시 객체. 내부적으로 RealSubject 객체를 생성하여 사용 1 2 3 4 5 .. 2019. 12. 17.
[Design pattern] Observer Pattern (옵저버패턴) 그리고 리스너 옵저버 패턴에서는 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의한다. (Head First Design Pattern 내용 발췌) Subject(주제) 객체에 변화가 일어날 경우 Subject에 의존하고 있는 다수의 Observer 에 변화를 알리는 일대다 의존성을 갖는 디자인 패턴. 대표적으로 java.awt 의 listener가 Observer pattern 이라고 할 수 있다. Observer pattern 을 파악하기 위해 java.awt 의 lister 와 Button 을 어설프게나마 직접 구현해보자. [Listener] Observer 와 같은 역할을 하는 Listener Interface 1 2 3 4 5 6 .. 2019. 11. 21.
[Design pattern] Facade pattern (퍼사드패턴) "어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스 제공. 퍼사드에서 고수준 인터페이스를 정의하기 때문에 서브시스템을 더 쉽게 사용할 수 있다." 사용할 메소드가 여러 클래스에 퍼져 있는 경우 필요한 클래스들을 모두 생성자로 생성하여 필요한 메소드를 각각 호출 하는 대신, (최소 지식 원칙 (의존하는 클래스의 갯수를 최대한 적게) 위배) 별도의 클래스(퍼사드)에 사용할 클래스들을 멤버변수로 담고, 사용하고자 하는 멤버변수의 메소드들을 한곳에 묶은 새로운 메소드를 작성한다. 예를 들어, 메일 전송 로직을 다음과 같이 구현한다고 하자. 1. 수신인의 메일주소를 확인한다. 2. 메일을 전송한다. 3. 메일 전송 결과를 이력에 남긴다. 위 기능들이 각각 다른 클래스에 존재하는 메소드라고 한다면 위 세.. 2019. 11. 18.
[Design pattern] strategy pattern (스트래터지 패턴) 1. 변화하는 기능을 별도의 interface로 분리(캡슐화) 2. 각각의 기능(interfaceImple)들이 인터페이스를 구현(implements) 3. 기능을 사용하는 객체(class) 내에서 기능(interface)을 멤버변수로 포함 4. 기능을 사용하는 객체(class) 내에서 기능(interfaceImple)을 주입받는 setter를 선언하여 각각의 객체(class)가 다른 기능(interfaceImple) 을 사용할 수 있게 설계 * 무조건적인 상속은 소스의 중복을 야기, 소스 수정시 구현체들의 소스 수정을 야기 [ex] [Shout interface] 소리지르기 비명지르기 기능이 있는 Shout 인터페이스 작성. 1 2 3 4 5 6 7 package design_pattern.strate.. 2019. 6. 4.