처음부터 차근차근

[OOP] OCP(Open-Close Principle) 개방 폐쇄 원칙 본문

Architecture pattern/Design Pattern

[OOP] OCP(Open-Close Principle) 개방 폐쇄 원칙

HangJu_95 2024. 1. 3. 14:38
728x90

OCP

좋은 객체 지향 설계 원칙 중 하나로 OCP 원칙이 존재합니다.

개방 폐쇄의 원칙이란, 기존의 코드는 변경하지 않으면서, 기능을 추가할 수 있도록 설계가 되어야 한다는 의미입니다.

  • Open for extension: 새로운 기능의 추가나 변경 사항이 생겼을 때, 기존 코드는 확장할 수 있어야 한다.
  • Closed for modification: 기존의 코드는 수정되지 않아야 한다.

즉, 확장(새로운 기능이 추가)에는 열려있고, 변경에는 닫혀 있다는 뜻입니다.

 

확장에 열려있다

  • 모듈의 확장성을 보장하는 것을 의미한다. 
  • 새로운 변경 사항이 발생했을 때 유연하게 코드를 추가함으로써 애플리케이션의 기능을 큰 힘을 들이지 않고 확장할 수 있다.

변경에 닫혀있다

  • 객체를 직접적으로 수정하는건 제한해야 한다는 것을 의미한다.
  • 새로운 변경 사항이 발생했을 때 객체를 직접적으로 수정해야 한다면 새로운 변경사항에 대해 유연하게 대응할 수 없는 애플리케이션이라고 말한다.
  • 이는 유지보수의 비용 증가로 이어지는 매우 안좋은 예시이다.
  • 따라서 객체를 직접 수정하지 않고도 변경사항을 적용할 수 있도록 설계해야 한다. 그래서 변경에 닫혀있다고 표현한 것이다.

자동차를 통한 예제

  • 새로운 차량의 추가
    • 여기서 새로운 차량을 추가해도 Driver 의 코드는 전혀 변경하지 않는다. 운전할 수 있는 차량의 종류가 계속 늘어나도 Car 를 사용하는 Driver 의 코드는 전혀 변경하지 않는다. 기능을 확장해도 main() 일부를 제외한 프로그램의 핵심 부분의 코드는 전혀 수정하지 않아도 된다.
  • 확장에 열려있다는 의미
    • Car 인터페이스를 사용해서 새로운 차량을 자유롭게 추가할 수 있다. Car 인터페이스를 구현해서 기능을 추가할 수 있다는 의미이다. 그리고 Car 인터페이스를 사용하는 클라이언트 코드인 Driver 도 Car 인터페이스를 통해 새롭게 추가된 차량을 자유롭게 호출할 수 있다. 이것이 확장에 열려있다는 의미이다.
  • 코드 수정은 닫혀 있다는 의미
    • 새로운 차를 추가하게 되면 기능이 추가되기 때문에 기존 코드의 수정은 불가피하다. 당연히 어딘가의 코드는 수정해야 한다.
  • 변하지 않는 부분
    • 새로운 자동차를 추가할 때 가장 영향을 받는 중요한 클라이언트는 바로 Car 의 기능을 사용하는 Driver이다. 핵심은 Car 인터페이스를 사용하는 클라이언트인 Driver 의 코드를 수정하지 않아도 된다는 뜻이다.
  • 변하는 부분
    • main()과 같이 새로운 차를 생성하고 Driver에게 필요한 차를 전달해주는 역할은 당연히 코드 수정이 발생한다. main() 은 전체 프로그램을 설정하고 조율하는 역할을 한다. 이런 부분은 OCP를 지켜도 변경이 필요하다.
  • 정리
    • Car를 사용하는 클라이언트 코드인 Driver 코드의 변경 없이 새로운 자동차를 확장할 수 있다.
    • 다형성을 활용하고 역할과 구현을 잘 분리한 덕분에 새로운 자동차를 추가해도 대부분의 핵심 코드들은 그대로 유지할 수 있게 됩니다.

OCP를 잘 적용한 사례

TypeORM, Sequelize를 통해 DB를 연결하는 데이터베이스 인터페이스가 가장 대표적인 예시라고 할 수 있습니다.

갑자기 어느날 회사에서 "MySQL에서 PostgreSQL로 변경할꺼야~" 라고 한다고 했을 때, TypeORM이나 Sequelize 부분에서 연결 부분만 변경해 주면 됩니다.

정리

  • 너무 어렵게 생각하지 말고, 객체 지향 프로그래밍을 하면서 배워왔던 추상화를 의미하는 것으로 생각하면 편합니다.
  • OCP를 통해 새로운 기능을 추가해도 대부분의 핵심 코드들은 그대로 유지할 수 있습니다.

참고

 

💠 완벽하게 이해하는 OCP (개방 폐쇄 원칙)

개방 폐쇄 원칙 - OCP (Open Closed Principle) 개방 폐쇄의 원칙(OCP)이란 기존의 코드를 변경하지 않으면서, 기능을 추가할 수 있도록 설계가 되어야 한다는 원칙을 말한다. 보통 OCP를 확장에 대해서는

inpa.tistory.com

 

김영한의 실전 자바 - 기본편 강의 - 인프런

실무에 필요한 자바 객체 지향의 핵심 개념을 예제 코드를 통해 쉽게 학습합니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 실전 자바[사진][임베딩 영상]단순히 자바 문법을 안다

www.inflearn.com