전공/Design Pattern

전공/Design Pattern

Design Pattern - Prototype Pattern

Definition of Prototype Pattern 기존의 인스턴스를 복제하여 새로운 인스턴스를 만드는 방법에 해당한다. 자세히 설명하자면, 복제 기능을 갖추고 있는 기존 인스턴스를 프로토타입으로 활용하여 새 인스턴스를 만드는 것 시간이 오래걸리는 DB작업이나 HTTP 통신을 통한 데이터의 경우 여러번 받아오려면 시간이 걸린다. 따라서 동일한 데이터가 사용되는 여러 객체가 필요하게 되는 경우 기존의 객체 하나를 만들어두고 해당 데이터를 포함하는 객체의 클론(복제)를 통해 사용하면 딜레이가 줄어들고 자원사용에 이득을 볼 수 있다. 기본적인 클래스 다이어그램은 위와 같이 구성되는데 Prototype의 clone() 메서드에 대한 상세한 내용은 구체클래스인 ConcretePrototype에 기술되게 된다..

전공/Design Pattern

Design Pattern - Builder Pattern

QueryDSL에서의 빌더패턴의 예시 Member findMember = queryFactory.select(m) .from(m) .where(m.username.eq("member1")) .fetchOne(); 쿼리 DSL에서 비슷한 패턴으로 JPQL을 편리하게 이용하는 과정을 목도했는데 Method Chaining이 다소 생소하긴 했는데 이번에 빌더패턴을 공부하게 되면서 좀 더 깊이있는 사고를 하게 된 것 같다. (정확히 말하면 DSL은 메서드체이닝 방식을 이용한거고, 빌더패턴도 메서드 체이닝을 이용해서 구현한 전략이긴 하다.) Builder Pattern 동일한 프로세스를 거쳐서 다양한 구성의 인스턴스를 만드는 방법으로 복잡한 객체를 만드는 프로세스를 독립적으로 분리할 수 있다는 장점이 있다. 이번..

전공/Design Pattern

Design Pattern - Abstract Factory Pattern

추상 팩토리 패턴의 핵심은 팩토리를 사용하는 클라이언트가 구체 클래스에 의존하지 않고, 추상화된 인터페이스에만 의존함으로써 클라이언트 코드의 변경 없이 용이하게 확장이 가능하도록 함에 있다. 즉 이 패턴을 사용함으로써 어떤 클래스의 구체 인스턴스에 접근하는지에 대해 클라이언트 코드는 몰라도 된다. public class WhiteshipFactory extends DefaultShipFactory { @Override public Ship createShip() { Ship ship = new Whiteship(); ship.setAnchor(new WhiteAnchor()); ship.setWheel(new WhiteWheel()); return ship; } } 다음의 코드를 확인해보자 createS..

전공/Design Pattern

Design Pattern - Factory Method Pattern

구체적으로 어떤 인스턴스를 만들지는 구체 클래스가 정한다. UML 다이어그램으로 나타내면 다음과 같은 구조를 가진다 다양한 구현체(Ship)을 가질 수 있고, 그 중에서 특정한 구현체를 만들 수 있는 다양한 팩토리를 제공한다. 위와 같은 구조를 단순히 Ship, ShipFactory로 단순화해서 구현하게 되면, ShipFactory클래스에서 if~else문을 통해 어떤 배를 생산할 것인지에 대해 분기문을 작성해주어야 하고 변경에 닫혀있고 확장에 열려있는 OCP 원칙 (SOLID) 설계에 반하게 된다. 다시 말하면 또 다른 제품을 추가하고자 하는 경우 이름에 따라 if~else문을 추가로 작성해야하고 Ship의 특성이 변경되는 경우 변경된 요구사항에 따라 필드의 변화가 생길 수 있다. 이에 따라 Ship ..

ProgYun.
'전공/Design Pattern' 카테고리의 글 목록