300x250
✍️ 팩토리 메서드 패턴 vs 추상 팩토리 패턴 팩토리 메서드 패턴 그리고 추상 팩토리 패턴 모두 객체(제품, 이하 객체)를 만드는 과정을 추상화한 패턴임은 동일하다. 다만 관점의 차이로 구조가 사뭇 다른데, 팩토리 메서드 패턴은 객체를 만드는 과정에 집중한 패턴으로, 구체적인 객체의 생성을 메서드로 추상화 하고 ConcreteCreator의 구현 메서드에서 구체적인 객체를 만들어 팩토리 메서드에 제공한다. 정리하면 1.추상화된 객체 반환하는 추상 메서드, 2.구체적인 객체를 생성하는 구현 메서드, 3. 추상 메서드를 호출하는 팩토리 메서드의 조합이라고 할 수 있다 반면 추상 팩토리 패턴은 팩토리를 사용하는 클라이언트에 집중한 패턴으로, 클라이언트는 ConcreteFactory가 제공하는 추상화된 인터페..
✍️ 추상 팩토리 패턴, 적용하기 먼저, 이전 포스팅에서 살펴봤던 ShipFactory의 구현체 TurtleshipFactory 클래스가 현재 구조에서 Client에 해당한다. TurtleshipFactory의 createShip 메서드를 보면 구체적인 제품의 인스턴스(TurtleAnchor, TurtleEngine)를 주입하고 있다. 이처럼 클라이언트에서 구체적인 인스턴스를 주입하는 것이 아닌 팩토리로부터 제품(Anchor, Engine ...)을 생성하고 사용하는 코드를 인터페이스 기반으로 작성하게끔 하는 것이 추상 팩토리 패턴의 목적이다. public class TurtleshipFactory implements ShipFactory { @Override public Ship createShip()..
✍️ 추상 팩토리 패턴 추상 팩토리 패턴은 여러 관련있는 객체를 만들어주는 인터페이스다. 이름에서부터 알 수 있듯 팩토리 메서드 패턴과 굉장히 헷갈린다. "구체적인 팩토리에서 구체적인 인스턴스를 만드는 것" 까진 팩토리 메서드 패턴과 매우 유사하지만 팩토리를 사용하는 초점이 클라이언트쪽에 있다 보니 다른 구조를 띈다. 추상 팩토리 패턴의 목적 자체를 이해하면 팩토리 메서드와 완전히 분리해서 이해할 수 있는데, 추상 팩토리 패턴은 클라이언트 코드에서 팩토리로부터 객체(제품)를 생성하고 사용하는 코드를 인터페이스 기반으로 작성할 수 있게끔 한다. 말로만 이해하긴 조금 어려우니 팩토리 메서드 패턴과 추상 팩토리 패턴을 잘 비교한 Stackoverflow의 글 하나를 첨부하려 한다. 예시도 굉장히 이해하기 쉽다..
[객체 생성 패턴] Chapter 2-3. Factory Method Pattern : 인터페이스 적용하기 ✍️ 팩토리 메서드 패턴, Java에서 찾아보기 지금까지 살펴봤던 팩토리 메서드 패턴 말고 조금 더 단순한 심플 팩토리 패턴이 있다. 사실 심플 팩토리 패턴은 디자인 패턴이라 보긴 어렵고 조건에 따라 서로 다른 객체를 만드는 메서드 그 자체라고 보 는편이 맞는 듯하다. 심플 팩토리 패턴, 그 형태를 살펴보면 말 그대로 조건에 따라서 서로 다른 객체를 만들어내는 메서드의 정의 그 자체다. public class SimpleFactory { public Object createProduct(String string) { if (string.equals("turtle")) { return new Turt..
[객체 생성 패턴] Chapter 2-3. Factory Method Pattern : 인터페이스 적용하기 ✍️ 팩토리 메서드 패턴, 장단점 팩토리 메서드 패턴을 사용했을 때의 장점과 단점 팩토리 메서드 패턴의 장점으로는 지금까지 살펴봤던 모든 것으로, 기존 코드를 수정하지 않고 새로운 인스턴스를 여러 방법으로 생성할 수 있는 "확장에 열려있고 변경에 닫혀있는 객체 지향 원칙"을 만족하는 객체 생성 방법이다. 이러한 원칙을 만족하는 이유는 제품과 제품을 생성하는 팩토리가 느슨한 결합 구조를 가지기 때문이다. 그리고 이 모든 것을 가능케하는 핵심 개념은 추상화와 다형성이다. 반면 단점으로는 제품이 추가됨에 따라 제품을 생상하는 팩토리도 추가되므로 관리할 클래스가 선형적으로 증가한다. 인프런의 백기선님의 강..
[객체 생성 패턴] Chapter 2-2. Factory Method Pattern : 패턴 적용하기 ✍️ 팩토리 메서드 패턴, 인터페이스 적용하기 팩토리 메서드 패턴을 사용하더라도 새로운 팩토리가 생기면 결국 클라이언트 코드에 변화가 생기는 문제 아닌 문제점을 확인했다. 그러나 클라이언트는 어떤 팩토리를 가지고 제품을 만들지 알아야 하기 때문에 클라이언트 코드에 변화가 생기는 것은 당연하다. 집중해야 하는 부분은 제품과 팩토리를 확장할 때 기존 구조가 변경되지 않는 점이다. 단, 클라이언트 코드가 인터페이스 기반으로 작성됐다면 클라이언트 코드에 변화를 최소화할 순 있다. 변경 전 public class Client { public static void main(String[] args) { Ship t..