OCP와 전략 패턴

이도원·2022년 12월 11일
0

객체지향

목록 보기
1/2

OCP(Open Close Principle) - 개방폐쇄의 원칙

확장에 대해서는 개방, 변경에 대해서는 폐쇄

적용방법

  1. 상속(is-a) <-상위가 바뀌면 하위에 영향이 매우 큼

  2. 컴포지션(has-a) <- 추천

  • 변경(확장)될 것과 변하지 않을 것을 엄격히 구분
  • 이 두 모듈이 만나는 지점에 인터페이스를 정의
  • 구현에 의존하기보다 정의한 인터페이스에 의존하도록 코드를 작성

장점

  • 기능이 추가, 변경되어도 기존 코드는 변경되지 않는다 -> 확장이 쉽다
  • 구현체를 주입해서 테스트가 가능

해결

  • if else 문제점
    변경 확장될 수록 코드 복잡 -> 유지보수가 점점 어려워짐 (OCP를 통해 해결 가능)

전략 패턴

기존의 코드 변경 없이 행위를 자유롭게 바꿀 수 있게 해주는 OCP를 준수한 디자인 패턴

특징

  • 디자인 패턴의 꽃 ( 그만큼 많이 활용, 다른 디자인 패턴에서도 많이 이용)
  • 전략을 쉽게 바꿀 수 있도록 해주는 디자인 패턴
  • 행위를 클래스로 캡슐화해 동적으로 행위를 자유롭게 바꿀 수 있게 해주는 패턴
  • 새로운 기능의 추가가 기존의 코드에 영향을 미치지 못하게 해 OCP를 만족

구성

  • Context
    - 스트래티지 패턴을 이용하는 역할 수행
    - 필요에 따라 동적으로 구체적인 전략을 바꿀수 있도록 함(DI(의존성 주입))
  • Strategy
    인터페이스나 추상 클래스로 외부에서 동일한 방식으로 알고리즘을 호출하는 방법을 명시
  • ConcreateStrategy
    전략패턴에서 명시한 알고리즘을 실제로 구현한 클래스

Template Method 패턴과 차이

같은 점 - 둘다 OCP를 준수
템플릿 메서드 패턴은 상속(is-a) 이용 (전략 패턴은 컴포지션(has-a) 이용)

profile
studying

0개의 댓글