Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- html
- 자료구조
- REST API
- Interceptor
- puppeteer
- OOP
- Deep Dive
- typescript
- 알고리즘
- Kubernetes
- 탐욕법
- 프로그래머스
- TIL
- 코딩테스트
- GraphQL
- java
- JWT
- Linux
- winston
- dfs
- MySQL
- nestjs
- node.js
- css
- Spring
- 인접행렬
- 인접리스트
- bean
- LifeCycle
- javascript
Archives
- Today
- Total
처음부터 차근차근
[OOP] OCP(Open-Close Principle) 개방 폐쇄 원칙 본문
Architecture pattern/Design Pattern
[OOP] OCP(Open-Close Principle) 개방 폐쇄 원칙
HangJu_95 2024. 1. 3. 14:38728x90
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
'Architecture pattern > Design Pattern' 카테고리의 다른 글
[OOP] 객체 지향 설계 원칙 (1) | 2024.01.03 |
---|---|
[OOP] 객체 지향 프로그래밍에서 다형성 (1) | 2024.01.03 |
[OOP] 객체 지향 프로그래밍이란? (0) | 2023.10.23 |