Design Pattern/생성 패턴
prototype pattern
prototype pattern 원형이 되는 인스턴스를 사용하여 생성할 객체의 종류를 명시하고, 이렇게 만든 견본을 복사해서 새로운 객체를 생성합니다. object 생성이 높은 비용으로 수 많은 요청을 하는 경우, 또는 비슷한 object를 지속적으로 생성해야 할 때 유용하게 사용할 수 있다. prototype pattern은 본래의 object로 부터 새로운 object를 만들어내며(서로 다른 인스턴스), 각 객체에 따라 데이터 수정이 가능한 메커니즘을 제공 java의 clone()을 이용하기 때문에 생성하고자 하는 객체에 clone에 대한 Override를 요구합니다. 1. Shape 인터페이스 구현 - Cloneable을 상속받아서 clone을 오버라이딩 try catch을 통해서 익셉션을 바로 처..
Builder Pattern
Builder Pattern 빌더 패턴은 객체 생성을 깔끔하고 유연하게 하기 위한 기법 각 인자가 어떤 의미인지 알기 쉽다. setter 메소드가 없으므로 변경 불가능 객체를 만들 수 있다. 한 번에 객체를 생성하므로 객체 일관성이 깨지지 않는다. build() 함수가 잘못된 값이 입력되었는지 검증하게 할 수도 있다. public class NutritionFacts { private final int servingSize; private final int servings; private final int calories; private final int fat; private final int sodium; private final int carbohydrate; public static class B..
Singleton Pattern
Singleton Pattern 어떤 클래스의 인스턴스는 오직 하나임을 보장하며, 이 인스턴스에 접근할 수 있는 전역적인 접촉점을 제공하는 패턴 이점 객체를 재사용하기 때문에 메모리 낭비를 방지 싱글톤으로 생성된 객체는 무조건 한번 생성으로 전역성을 띄기에 다른 객체와 공유가 용이 단점 싱글톤으로 만든 객체의 역할이 간단한 것이 아닌 역할이 복잡한 경우라면 해당 싱글톤 객체를 사용하는 다른 객체간의 결함도가 높아져서 객체 지향 설계 원칙에 어긋나게 된다. (개방-폐쇄) 해당 싱글톤 객체를 수정할 경우 싱글톤 객체를 사용하는 곳에서 사이드 이팩트 발생 확률이 생기게 되며, 멀티 쓰래드환경에서 동기화 처리 문제등이 생길수 있다. public class SingleObject { private static S..
Abstract Factory Pattern
추상 팩토리 패턴 서로 관련이 있는 객체들을 통째로 묶어서 팩토리 클래스로 만들고, 이들 팩토리를 조건에 따라 생성하도록 다시 팩토리를 만들어서 객체를 생성하는 패턴 간단하게 생각하면 팩토리를 추상화 해서 교체하기 쉽게 만드는 패턴이라고 보면된다. 1. Shape 인터페이스 public interface Shape { void draw(); } 2. Shape를 상속받은 모형 구현 public class Rectangle implements Shape { @Override public void draw() { System.out.println("직사각형을 그렸습니다."); } } public class Square implements Shape { @Override public void draw() { ..
Factory Pattern
팩토리 메소드 패턴 : 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를만들지는 서브클래스에서 결정하게 만든다. 즉 팩토리 메소드 패턴을 이용하면 클래스의 인스턴스를 만드는 일을 서브클래스에게 맡기는 것. 이점 클래스의 변경사항이 생겼을 때 얼마나 다른 클래스에게도 영향을 줄 것인가가 결합도이다. 팩토리 메소드 패턴은 직접 사용하는 객체를 생성하지 않고 팩토리 메소드 클래스를 통해 객체를 대신 생성하고 그 객체를 반환 받아 사용하기 때문에 효율적인 코드 제어를 할 수 있을 뿐더러 결합도를 낮춰 유지보수가 용이하다. 위 설계를 보면 1. Shape라는 인터페이스 public interface Shape { void draw(); } 2. 인터페이스를 상속받은 원, 정사각형, 직사각형 ..