[Java와 Spring] 디자인 패턴 - Strategy, Abstract Factory, Builder

개발log·2024년 4월 5일

자바와 스프링

목록 보기
10/10
post-thumbnail

전략 패턴(Strategy Pattern)

"클라이언트가 전략을 생성해 전략을 실행할 컨텍스트에 주입하는 패턴"


구성 요소

  • 전략 메서드를 가진 전략 객체
  • 전략 객체를 사용하는 컨텍스트(전략 객체의 사용자/소비자)
  • 전략 객체를 생성해 컨텍스트에 주입하는 클라이언트(제3자, 전략 객체의 공급자)

의도

알고리즘을 정의하고 각각을 캡슐화하여 서로 교환 가능하도록 만드는 것


장단점

장점:

  • 유연성: 알고리즘을 독립적으로 캡슐화하여 알고리즘을 교환하거나 추가 용이(DIP)
  • 확장성: 새로운 전략 시 기존의 코드를 변경할 필요 없이 새로운 전략 클래스를 만들어서 적용 가능(OCP)
  • 재사용성: 다양한 컨텍스트에서 동일한 전략을 사용 가능

단점:

  • 복잡성: 많은 전략 클래스가 추가될 수 있음
  • 부가적인 로직 추가: 전략을 명시적으로 선택해야 하기 때문에 선택에 대한 부가적인 로직이 필요할 수 있음

추상 팩토리 패턴(Abstract Factory)

"추상적으로 정의된 컴포넌트들을 바탕으로, 주어진 구체적인 조건에 맞는 구체적인 컴포넌트를 생성하는 디자인 패턴"


의도

  • 클라이언트가 객체 생성에 관한 세부적인 사항을 알 필요 없이 적절한 객체를 생성할 수 있도록 하는 것
  • 객체 생성 로직의 변경이나 확장에 유연하게 대응하는 것

장단점

장점:

  • 객체 생성 코드를 클라이언트로부터 분리하여 유연성을 제공
  • 클라이언트 코드의 변경 없이도 새로운 종류의 객체를 생성가능 하여 다양한 종류의 객체를 생성할 수 있는 확장성 제공

단점:

  • 새로운 종류의 객체를 추가할 때 Abstract Factory 인터페이스에 대한 변경이 필요함(추상 팩토리와 서브 클래스의 수정)

Builder 패턴

"복잡한 객체의 생성 과정을 단순화하고 객체의 구성 요소들을 분리하여 유연한 방식으로 생성할 수 있는 디자인 패턴"


의도

  • 복잡한 객체의 생성 과정을 분리하여 객체 생성 방법의 유연성 제공
  • 객체 생성 과정을 클라이언트로부터 숨기고, 단순화된 인터페이스를 제공하여 복잡성 감소

장단점

장점:

  • 복잡한 객체를 단계적으로 생성하여 객체의 일관성과 유효성을 보장

단점:

  • Builder 클래스의 개수가 많아지고 객체 생성 과정이 변경될 경우, 코드가 복잡해져 유지 보수가 어려울 수 있음
profile
나의 개발 저장소

0개의 댓글