IT/Others

OCP (Open Closed Principle)

김 정 환 2021. 7. 1. 18:13
반응형

객체지향의 가장 멋진 부분은 OCP이다 라는 말을 들었습니다. OCP를 알아볼려고 합니다.

 

객체지향이 개발하는데 편해서 좋다라는 말은 많이 들었습니다. 그리고 SOLID 원칙을 이유로 들었습니다. 그런데 와닿지 않았습니다. 어느날, 현직자분께서 실전 예제 코드를 보여주면서 OCP를 설명하는 장면에서, OCP가 객체지향을 멋지게 만드는 녀석이지 않을까 생각하게 되었습니다.

 

 


위키백과에서 정의된 OCP의 의미는 아래와 같습니다.

개방-폐쇄 원칙
(OCP, Open-Closed Principle)은 '소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다'는 프로그래밍 원칙이다.

 

제가 이해한 예시를 들어보겠습니다.

A 노트북이 있고, 마우스, 키보드, 웹캠 등 다양한 종류의 장치가 있습니다. A 노트북은 무선 마우스, 유선 마우스, 그리고 삼성, LG 등 다양한 브랜드와도 호환이 됩니다. 호환이 되는 것은 우리에게 당연합니다. 이렇게 A 노트북은 바꾸지 않고 다양한 장치를 사용할 수 있는 것이 개방-폐쇄 원칙입니다.

그런데 제가 산 LG 마우스를 사용하려고 하니 A 노트북 바꿔야 한다면? 짜증이 납니다. 이렇게 하나 바꾼다고 기존 것들을 줄줄이 바꿔야 한다면 개발이 굉장히 힘들어 집니다.

 

 

글로는 이해했지만 고민해본적이 없으니 와닿지 않았습니다. 그런데 예제를 직접 만들어서 고민하니 정말 멋지다는 것을 알 수 있었습니다. 아래 이미지로 설명하겠습니다.

예제의 상황을 설명하자면, DB가 정해지지 않아서 memory에 저장하는 repository를 만들었습니다. 그외에 컨트롤러와 서비스를 모두 만들었습니다. 그리고 DB가 정해져서 jdbc repository를 만들었습니다.

 

그리고 아래와 같이 간단하게 repository만 바꾸어서 실행할 수 있었습니다. 이것은 마치 위 예시에서 말했던, A 노트북에 기본 마우스 대신에 성능 좋은 마우스로 교체하는 것과 유사합니다. 이렇게 실제로 경험하니 OCP가 참 멋진 녀석으로 보였습니다.

반응형