OCP 가이드: 개방-폐쇄 원칙은 어떻게 이해해야 할까
Dev

OCP 가이드: 개방-폐쇄 원칙은 어떻게 이해해야 할까


SOLID에서 OCP, 즉 개방-폐쇄 원칙은 처음 보면 꽤 추상적으로 느껴집니다. “확장에는 열려 있고 수정에는 닫혀 있어야 한다”는 문장이 멋있어 보이지만, 실제 코드에서 이게 무슨 뜻인지 감이 잘 안 올 수 있습니다.

이 글에서는 아래 내용을 정리합니다.

  • OCP가 무엇인지
  • 왜 중요한지
  • 실무에서는 어떤 식으로 이해하면 좋은지

핵심은 OCP는 기존 코드를 절대 건드리지 말라는 뜻이 아니라, 반복되는 요구사항 변화에 더 안정적으로 대응할 수 있는 확장 구조를 고민하자는 원칙이라는 점입니다.

OCP란 무엇인가

OCP는 보통:

  • 확장에는 열려 있고
  • 수정에는 닫혀 있어야 한다

고 설명됩니다.

즉, 새로운 요구가 생겼을 때 기존 핵심 코드를 계속 뜯어고치기보다, 새로운 구현을 추가하는 쪽으로 대응할 수 있으면 좋다는 의미입니다.

왜 중요한가

기존 코드의 중심부를 자꾸 수정하면:

  • 기존 기능이 깨질 위험이 커지고
  • 테스트 범위가 넓어지며
  • 변경 비용이 누적됩니다

반대로 확장 포인트가 잘 잡혀 있으면 새로운 기능을 넣어도 기존 코드를 덜 흔들 수 있습니다.

입문자는 어떻게 이해하면 좋을까

너무 거창하게 보기보다:

  • 매번 if/else를 늘려야 하는가
  • 새로운 종류가 추가될 때 기존 코드 중심부를 계속 수정하는가

같은 질문으로 보면 훨씬 이해가 쉽습니다.

예를 들어 결제 방식이 늘어날 때마다 하나의 거대한 조건문만 계속 커진다면, OCP 관점에서 개선 여지가 있을 수 있습니다.

OCP는 “수정 금지”가 아니다

이 원칙을 오해하면 “기존 코드는 절대 건드리면 안 된다”처럼 들릴 수 있습니다. 하지만 실제로는 리팩터링도 하고 수정도 해야 합니다.

중요한 것은:

  • 변화가 자주 생기는 부분에는 확장 가능한 구조를 두고
  • 안정적인 핵심 코드는 덜 흔들리게 하자

는 방향입니다.

자주 하는 오해

1. 추상화만 많이 넣으면 OCP다

불필요한 추상화는 오히려 복잡도만 늘릴 수 있습니다.

2. 모든 코드를 확장 가능하게 만들어야 한다

변화 가능성이 낮은 코드까지 과하게 일반화할 필요는 없습니다.

3. OCP는 패턴을 많이 쓰라는 뜻이다

패턴 자체보다 변화 포인트를 어디에 둘지가 더 중요합니다.

FAQ

Q. OCP를 처음 적용할 때 무엇을 보면 좋을까

새 요구사항이 들어올 때마다 계속 수정되는 조건문이나 분기 구조를 먼저 보는 것이 좋습니다.

Q. 작은 프로젝트에도 필요할까

항상 거대한 추상화가 필요한 것은 아니지만, 반복되는 변경 지점은 미리 구조를 생각해볼 가치가 있습니다.

Q. OCP와 DIP는 같이 가는가

자주 같이 갑니다. 확장 포인트를 만들 때 추상화와 의존성 분리가 함께 필요해지는 경우가 많기 때문입니다.

  • 전체 흐름은 SOLID 가이드와 이어집니다.
  • 구체 구현 대신 추상에 의존하는 관점은 DIP 가이드를 같이 보면 좋습니다.

먼저 읽어볼 가이드

검색 유입이 많은 핵심 글부터 이어서 보세요.