2020. 7. 6. 16:39ㆍ개발/[Basic]
Open Closed Principle
소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에 대해서는 열려 있어야 하지만 변경에 대해서는 닫혀 있어야 한다. 즉, 자신의 확장에는 열려있고, 주변의 변화에 대해서는 닫혀 있어야 한다는 것이다. 이것은 Interface 를 통해 구현하여 해결한다.
위의 그림은 OCP를 따르지 않는 설계이다 왜 그러한가?
만약 Client입장에서 다른 서버를 사용한다고 생각해보자. 그럼 Client 클래스 자체를 바꿔야 하기 때문에 Server 클래스 입장에서 확장에 대해서 닫혀있다고 생각 할 수 있다.
OCP원칙을 유지하면서 흔히 사용하는 2가지 패턴을 보도록 하겠다.
1. 전략 패턴 & 스트래터지 패턴
이러한 구현 방식을 가리켜 스트래터지 패턴(strategy pattern), 즉 전략 패턴이라고 부른다.
여기서 말하는 전략이란 Server 클래스를 의미하며, Client는 목적에 맞는 전략(서버)를 선택할 수 있다.
Client 클래스는 이 추상화에 의존하지만 런타임에 생성된 Client 클래스의 객체는 실제로는 Server 클래스의 객체를 사용할 것이다.
이런 설계에서는 Client 객체가 다른 서버 클래스를 사용하게 해야 할 때, 단순히 ClientInterface 클래스의 새 파생 클래스를 생성하면 된다.
2. 템플릿 메소드 패턴
템플릿 메서드 패턴은 여러 클래스에서 공통으로 사용하는 메서드를 상위 클래스에서 정의하고,
하위 클래스마다 다르게 구현해야 하는 세부적인 사항을 하위 클래스에서 구현하는 패턴을 말한다.
'개발 > [Basic]' 카테고리의 다른 글
[Basic] Mock Object (0) | 2020.07.23 |
---|---|
[Basic] 개발 Know 로드맵 (0) | 2020.07.18 |
[Basic] 테스팅 프레임워크 JUnit (0) | 2020.06.29 |
[Spring] 어플리케이션 컨텍스트에서 빈 생성 방법 (0) | 2020.06.29 |
[Basic] SRP 단일 책임 원칙 (0) | 2020.06.29 |