300x250
✍️ 추상 팩토리 패턴, 적용하기 먼저, 이전 포스팅에서 살펴봤던 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..
[객체 생성 패턴] Chapter 2-1. Factory Method Pattern : 패턴 소개 ✍️ 팩토리 메서드 패턴, 적용하기 먼저, ShipFactory 클래스를 인터페이스(혹은 추상 클래스)로 변경하고 기존에 orderShip 메서드에서 달라지는 부분(Ship 인스턴스를 만드는 부분)을 추상화 시킨다. ShipFactory가 인터페이스로 변경됐다. orderShip에 공통 코드는 살려두고 Ship 인스턴스를 만드는 작업은 구현체가 결정한다. ShipFactory interface public interface ShipFactory { Ship createShip(); default Ship orderShip(String name, String email){ validate(name, email..