Skip to main content

OCP

OCP란?

  • 개방 폐쇄 원칙

OCP의 특징

  • 소프트웨어 요소는 확장에 열려 있으나 변경에는 닫혀있어야한다.
    • 기존의 코드를 변경하지 않으면서, 기능을 추가할 수 있어야한다.
    • 열려있다는 것은 기능 추가나 변경이 가능하다는 것이고 닫혀있다는 것은 기능추가를 할 때 그 모듈을 쓰고 있는 코드들을 줄지어 수정하지 않아야한다는 것
  • 다형성을 활용하자
  • 확장에 대해서는 개방적이고 수정에 대해서는 폐쇄적이어야한다.
  • 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현

OCP 위반 예제

  • 어떤 타입에 대한 반복적인 분기문
    • 하나의 enum에 대해 여러군데에서 반복적으로 if/switch문을 쓰고있다면 다시 생각해보아야한다.
      • 기능추가는 case를 한줄 추가하는것 만큼이나 쉬울 수 있지만 그러면 enum을 사용하는 모든 코드를 찾아가서 수정해주어야한다.
  • OCP는 if/switch를 최대한 안쓰는 것으로 연습할 수 있습니다.
    • 아예 사용하지 말라는 것은 아니고 enum 같은 타입을 분기하는 지점에 대해서
    • 분기문을 없애는 것만으로도 함수와 클래스의 길이를 줄여서 SRP도 준수할 수 있습니다.

OCP를 지키는 방법

  • Protocol 사용해서 상속 받기
  • 딕셔너리 사용하기 // OCP를 지키는 원칙은 아님
    • 제한적으로 사용하는 것이 좋음

OCP의 단점

  • 구현 객체를 변경하려면 클라이언트 코드 변경을 해야한다.
  • 분명 다형성을 사용하고 있지만 OCP 원칙일 지킬 수 없다.

OCP의 단점 해결 방법

  • 객체를 생성하고, 연관 관계를 맺어주는 별도의 조립, 설정자가 필요하다.