if-else ๋ฌธ์ œ์ 

- ๋ณ€๊ฒฝ, ํ™•์žฅ์ด ๋  ์ˆ˜๋ก ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง„๋‹ค.

- ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์œ„์น˜๋ฅผ ์ฐพ๋Š”๋ฐ ์ ์  ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค.

- ์‹ค์ˆ˜๋กœ ์ถ”๊ฐ€ํ•˜์ง€์•Š๊ณ  ๋ˆ„๋ฝํ•˜๋Š” ๋ถ€๋ถ„์ด ์ƒ๊ธธ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.

์ฆ‰, ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์ ์  ์–ด๋ ค์›Œ์ง„๋‹ค.

 

OCP ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™

์†Œํ”„ํŠธ์›จ์–ด์˜ ๊ตฌ์„ฑ ์š”์†Œ(์ปดํฌ๋„ŒํŠธ, ํด๋ž˜์Šค, ๋ชจ๋“ˆ, ํ•จ์ˆ˜)๋Š”

ํ™•์žฅ์— ๋Œ€ํ•ด์„œ๋Š” ๊ฐœ๋ฐฉ๋˜์–ด์•ผํ•˜์ง€๋งŒ, ๋ณ€๊ฒฝ์— ๋Œ€ํ•ด์„œ๋Š” ํ์‡„๋˜์–ด์•ผ ํ•œ๋‹ค.

๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๊ฐ€ ๋˜์–ด์•ผํ•œ๋‹ค

 

์ ์  ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•ด ๋‚˜๊ฐˆ ๋•Œ, ๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฅผ ๊ณ„์† ๋ณ€๊ฒฝํ•ด์•ผํ•œ๋‹ค๋ฉด ๊ธฐ๋Šฅ์˜ ์ถ”๊ฐ€๊ฐ€ ์ ์  ํž˜๋“ค์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.  

๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€, ๋ณ€๊ฒฝ๋˜์–ด๋„ ๊ธฐ์กด ์ฝ”๋“œ๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค. (ํ™•์žฅ์ด ์‰ฝ๋‹ค)

 

OCP ์ ์šฉ ๋ฐฉ๋ฒ•

1. ์ƒ์†์„ ์ด์šฉํ•œ ๋ฐฉ๋ฒ• - ํ…œํ”Œ๋ฆฟ ๋ฉ”์†Œ๋“œ ํŒจํ„ด

๊นจ์ง€๊ธฐ ์‰ฌ์šด ์ƒ์œ„ ํด๋ž˜์Šค ๋ฌธ์ œ

 

 

2. ์ปดํฌ์ง€์…˜์„ ์ด์šฉํ•œ ๋ฐฉ๋ฒ• - ์ „๋žต ํŒจํ„ด

์ƒ์†๋ณด๋‹ค๋Š” ์ปดํฌ์ง€์…˜์„ ์ถ”์ฒœ

1) ๋ณ€๊ฒฝ(ํ™•์žฅ)๋  ๊ฒƒ๊ณผ ๋ณ€ํ•˜์ง€ ์•Š์„ ๊ฒƒ์„ ๊ตฌ๋ถ„ 

๋ณ€๊ฒฝ๋˜๋Š” ๋ถ€๋ถ„์„ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ถ”์ถœ

2) ์ด ๋‘ ๋ชจ๋“ˆ์ด ๋งŒ๋‚˜๋Š” ์ง€์ ์— ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜

์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜๋„๋ก ์ž‘์„ฑ(๊ธฐ๋Šฅ ๋ณ€๊ฒฝ์„ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—)

3) ๊ตฌํ˜„์— ์˜์กดํ•˜๊ธฐ๋ณด๋‹ค ์ •์˜ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ

 

์ž๊ธฐ๊ฐ€ ์ง์ ‘ new ์ƒ์„ฑ์ž๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , ์™ธ๋ถ€์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ›๋Š” ๊ฒƒ์„ ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection, DI)์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

Dependency Injection ์˜์กด์„ฑ ์ฃผ์ž…
์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ์˜์กด์„ฑ ์ฃผ์ž…์€ ๊ฐ์ฒด๊ฐ€ ์˜์กดํ•˜๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋ฐ›๋Š” ๊ฒƒ์ด๋‹ค. 
์˜์กด์„ฑ ์ฃผ์ž…์˜ ์˜๋„๋Š” ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์‚ฌ์šฉ์˜ ๊ด€์‹ฌ์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. → ๊ฐ€๋…์„ฑ๊ณผ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ ๋†’์—ฌ์ค€๋‹ค.

์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ์˜์กด์„ฑ ์ฃผ์ž…์€ ๊ฐ์ฒด๊ฐ€ ์˜์กดํ•˜๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋ฐ›๋Š” ๊ฒƒ์ด๋‹ค. 
์˜์กด์„ฑ ์ฃผ์ž…์˜ ์˜๋„๋Š” ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์‚ฌ์šฉ์˜ ๊ด€์‹ฌ์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. → ๊ฐ€๋…์„ฑ๊ณผ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ ๋†’์—ฌ์ค€๋‹ค.

์˜์กด์„ฑ ์ฃผ์ž…์˜ ์ ์šฉ ์œ ํ˜•
- ์ƒ์„ฑ์ž ์ฃผ์ž… : ํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ๋ชจ๋‘ ํฌํ•จํ•˜๋Š” ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค๊ณ , ๊ทธ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ ์ฃผ์ž…
- setter๋ฅผ ํ†ตํ•œ ์ฃผ์ž… : ์˜์กด์„ฑ์„ ์ž…๋ ฅ๋ฐ›๋Š” setter ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ์ด๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ ์ฃผ์ž…
- ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•œ ์ฃผ์ž… : ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ํฌํ•จํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋„๋ก ํ•จ์œผ๋กœ์จ ์‹คํ–‰ ์‹œ์— ์˜์กด์„ฑ ์ฃผ์ž…

 

์œ„ํ‚ค๋ฐฑ๊ณผ ์˜์กด์„ฑ ์ฃผ์ž…

 

OCP๋ฅผ ์ค€์ˆ˜ํ•˜๊ธฐ ์œ„ํ•œ ๋””์ž์ธ ํŒจํ„ด

์ „๋žตํŒจํ„ด

์ „๋žตํŒจํ„ด์ด๋ž€ ๊ธฐ์กด์˜ ์ฝ”๋“œ ๋ณ€๊ฒฝ์—†์ด ํ–‰์œ„๋ฅผ ์ž์œ ๋กญ๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” OCP๋ฅผ ์ค€์ˆ˜ํ•œ ๋””์ž์ธ ํŒจํ„ด 

 

๋””์ž์ธ ํŒจํ„ด์˜ ๊ฝƒ

์ „๋žต์„ ์‰ฝ๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๋””์ž์ธ ํŒจํ„ด

ํ–‰์œ„๋ฅผ ํด๋ž˜์Šค๋กœ ์บก์Šํ™”ํ•ด ๋™์ ์œผ๋กœ ํ–‰์œ„๋ฅผ ์ž์œ ๋กญ๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํŒจํ„ด

์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์˜ ์ถ”๊ฐ€๊ฐ€ ๊ธฐ์กด์˜ ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๋ฏ€๋กœ OCP๋ฅผ ๋งŒ์กฑ

 

 

์ฐธ๊ณ ์ž๋ฃŒ

 

OCP(Open Closed Principle)์ด๋ž€?

 

nesoy.github.io

 

'๐ŸงProgramming' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Servlet  (0) 2024.01.19
Java๊ฐ€ ํŒŒ์ผ์„ ์ฝ๋„๋ก ํ•˜๋Š” ๋ฒ•  (0) 2024.01.14
Logging | SLF4J  (0) 2024.01.14
React | export์™€ export default์˜ ์ฐจ์ด  (0) 2023.08.12
Recoil | Selector  (0) 2021.12.01

+ Recent posts