Search
Duplicate
🏓

OCP : The Open Closed Principle

Category
S/W 엔지니어
Tags
S/W Engineering
Architecture
SOLID
OCP
Created time
2009/04/15

Definition

S/W 개체(class, module, function 등)는 확장에 열려있고, 변경에는 닫혀있어야.
추상화를 통한 변경에 대한 파급의 격리, 다형성을 이용한 확장의 지원

OCP violated sample

Class Client { void DoCommunicate(Server1 server1) { //.. } //... } //타 server(Server2)를 참조해야 할 경우의 변경 Class Client { void DoCommunicate(Server2 server2) { //.. } //... }
C#
복사
Client는 Concrete class인 server를 참조
만일 client가 타 server 개체를 사용하려면, 새 server 개체를 참조하도록 변경해야 할 것임

OCP complied sample

Class Server1 : IClient {} Class Client { void DoCommunicate(IClient server) { //.. } //... } //새 기능을 담당할 Server2. client 변경 필요 무 Class Server2 : IClient {}
C#
복사
Client는 추상 클래스 또는 interface를 참조. 이 때 참조해야 할 새 server 개체가 Client Interface를 상속한다면,
client는 변경할 필요가 없음(변경에 대한 격리)
새 server 개체를 통해 client의 기능을 확장(다형성 기반)

Usage examples for OCP

Access modifier : 특히 private(protected), Property(Getter/Setter)를 통한 외부 노출.
IOC(Inversion of Control) : template method, strategy pattern, delegate(C#) 등..

Conclusion

경직성과 취약성을 제거하는 대표적 원칙으로서, 개체 지향 설계의 핵심.
OCP가 요구하는 적절한 추상화는 실제 적용에는 많은 경험을 요구(적용이 용이한 원칙은 아님) : 왜? 추상화는 종종 '불필요한 복잡성'을 유발하기 때문에. 적절한 trade off 필요.