템플릿(Template)
개방 폐쇄 원칙(OCP)
클래스나 모듈은 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다
- 어떤 코드는 변경을 통해서 그 기능이 다양해지고, 확장하려는 성질이 있는 부분이 있음
- 어떤 부분은 일단 한 번만들어지고 나면 고정되어 있고, 잘 변하지 않으려는 성질을 가지고 있음
- 이 부분들이 보통 혼재되어 나타남
- 그래서 이 코드를 더 유연하고 깔끔하게 만들려면 개방 폐쇄 원칙을 기존에 해왔던 방식과 조금 다른 방식으로 적용할 필요가 있음
변화의 특성이 다른 부분을 구분하고 각각 다른 목적과 이유에 의해 다른 시점에 독립적으로 변경될 수 있는 효율적인 구조를 만들어야 함
![image.png](https://prod-files-secure.s3.us-west-2.amazonaws.com/a7e1e85e-d6f9-43d3-8475-0933babeaf4a/b3a00fef-6824-4cdd-b46c-1d07a3035b8a/image.png)
- 다양한 시도를 통해 유연하도록 확장한 구조
- 중간에 인터페이스를 두고 ExRateProvider들이 자유롭게 확장되더라도 PaymentService는 수정에 닫혀있도록 만드는 OCP 원칙을 잘 충족하고 있음
- Dependency Injection 의존관계를 주입하는 책임을 안에 두지 않고 밖에 두는 것이 필요
템플릿
코드 중에서 변경이 거의 일어나지 않으며 일정한 패턴으로 유지되는 특성을 가진 부분을 자유롭게 변경되는 성질을 가진 부분으로부터 독립시켜서 효과적으로 활용할 수 있도록 하는 방법
독립시키는 이유?
OCP를 잘 ㅈ지키게 할 수 있도록 하기 위함 → 효과적으로 이 코드를 재사용할 수 도 있고, 확장 할 수도 있게 만들기 위함
2가지 특징
-
템플릿
: 변경이 거의 일어나지 않으며 일정한 패턴으로 유지되는 특성을 가진 부분
-
콜백(Callback)
: 자유롭게 변경되는 성질을 가진 부분
⇒ 템플릿 콜백 패턴이라고도 부름