회원가입

OCP(Open-Closed Principle) 원칙

Beany 2024-11-03

ChatGPT 요약

OCP(Open Closed Principle) 원칙은 객체 지향 설계의 중요한 원칙 중 하나로, 기존 코드를 수정하지 않고 새로운 기능을 추가할 수 있어야 한다는 내용이다. 이를 통해 코드의 확장은 열려 있지만 수정은 닫혀 있어야 한다. Car 인터페이스를 이용하여 새로운 차량을 추가하고 코드 수정을 최소화하는 방법을 설명하며, 이는 전략 패턴(Strategy Pattern)을 사용하는 예이다.

좋은 객체 지향 설계 원칙 중 하나로 OCP 원칙이라는 것이 있다.

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

확장에는 열려있고, 변경에는 닫혀 있다는 뜻인데, 쉽게 이야기해서 기존의 코드 수정 없이 새로운 기능을 추가할 수 있다는 의미다. 약간 말이 안 맞는 것 같지만 우리가 앞서 개발한 코드가 바로 OCP 원칙을 잘 지키고 있는 코드다.

 

새로운 차량의 추가

여기서 새로운 차량을 추가해도 Driver 의 코드는 전혀 변경하지 않는다. 운전할 수 있는 차량의 종류가 계속 늘어나도 Car 를 사용하는 Driver 의 코드는 전현 변경하지 않는다. 기능을 확장해도 main() 일부를 제외한 프로그램의 핵심 부분의 코드는 전혀 수정하지 않아도 된다.

(핵심 Client는 수정되는 게 없어야한다.)

확장에 열려있다는 의미

Car 인터페이스를 사용해서 새로운 차량을 자유롭게 추가할 수 있다. Car 인터페이스를 구현해서 기능을 추가할 수 있다는 의미이다. 그리고 Car 인터페이스를 사용하는 클라이언트 코드인 Driver 도 Car 인터페이스를 통해 새롭게 추가된 차량을 자유롭게 호출할 수 있다. 이것이 확장에 열려있다는 의미이다.

 

코드 수정은 닫혀 있다는 의미

새로운 차를 추가하게 되면 기능이 추가되기 때문에 기존 코드의 수정은 불가피하다. 당연히 어딘가의 코드는 수정해야 한다.

[ 변하지 않는 부분 ]

새로운 자동차를 추가할 때 가장 영향을 받는 중요한 클라이언트는 바로 Car 의 기능을 사용하는 Driver 이다. 핵심은 Car 인터페이스를 사용하는 클라이언트인 Driver 의 코드를 수정하지 않아도 된다는 뜻이다.

[ 변하는 부분 ]

main() 과 같이 새로운 차를 생성하고 Driver 에게 필요한 차를 전달해주는 역할은 당연히 코드 수정이 발생한다. main() 은 전체 프로그램을 설정하고 조율하는 역할을 한다. 이런 부분은 OCP 를 지켜도 변경이 필요하다.

 

전략 패턴 (Strategy Pattern)

디자인 패턴 중에 가장 중요한 패턴을 하나 뽑으라고 하면 전략 패턴을 뽑을 수 있다. 전략 패턴은 알고리즘을 클라이언트 코드의 변경 없이 쉽게 교체할 수 있다.

방금 설명한 코드가 바로 전략 패턴을 사용한 코드이다.

Car 인터페이스가 바로 전략을 정의하는 인터페이스가 되고, 각각의 차량이 전략의 구체적인 구현이 된다. 그리고 전략을 클라이언트 코드(Driver) 의 변경 없이 손 쉽게 교체할 수 있다.

0 0
JAVA
이 공간은 개인 공부를 통해 얻은 정보를 체계적으로 정리하고 공유하는 곳입니다. 학습한 내용, 발견한 지식, 그리고 문제 해결 방법 등을 기록하여 나만의 학습 자료를 구축하고, 필요할 때 쉽게 참고할 수 있는 유용한 자원으로 활용할 수 있도록 합니다.
Yesterday: 456
Today: 143