if-else ๋ฌธ์ ์
- ๋ณ๊ฒฝ, ํ์ฅ์ด ๋ ์๋ก ์ฝ๋๊ฐ ๋ณต์กํด์ง๋ค.
- ์ฝ๋๋ฅผ ์์ ํ๊ฑฐ๋ ์์ ํ ์์น๋ฅผ ์ฐพ๋๋ฐ ์ ์ ์ค๋๊ฑธ๋ฆฐ๋ค.
- ์ค์๋ก ์ถ๊ฐํ์ง์๊ณ ๋๋ฝํ๋ ๋ถ๋ถ์ด ์๊ธธ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
์ฆ, ์ ์ง๋ณด์๊ฐ ์ ์ ์ด๋ ค์์ง๋ค.
OCP ๊ฐ๋ฐฉ ํ์ ์์น
์ํํธ์จ์ด์ ๊ตฌ์ฑ ์์(์ปดํฌ๋ํธ, ํด๋์ค, ๋ชจ๋, ํจ์)๋
ํ์ฅ์ ๋ํด์๋ ๊ฐ๋ฐฉ๋์ด์ผํ์ง๋ง, ๋ณ๊ฒฝ์ ๋ํด์๋ ํ์๋์ด์ผ ํ๋ค.
๊ธฐ์กด์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋๋ก ์ค๊ณ๊ฐ ๋์ด์ผํ๋ค
์ ์ ๊ธฐ๋ฅ์ ํ์ฅํด ๋๊ฐ ๋, ๊ธฐ์กด์ ์ฝ๋๋ฅผ ๊ณ์ ๋ณ๊ฒฝํด์ผํ๋ค๋ฉด ๊ธฐ๋ฅ์ ์ถ๊ฐ๊ฐ ์ ์ ํ๋ค์ด์ง๊ธฐ ๋๋ฌธ์ด๋ค.
๊ธฐ๋ฅ์ด ์ถ๊ฐ, ๋ณ๊ฒฝ๋์ด๋ ๊ธฐ์กด ์ฝ๋๋ ๋ณ๊ฒฝ๋์ง ์๋๋ค. (ํ์ฅ์ด ์ฝ๋ค)
OCP ์ ์ฉ ๋ฐฉ๋ฒ
1. ์์์ ์ด์ฉํ ๋ฐฉ๋ฒ - ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด
๊นจ์ง๊ธฐ ์ฌ์ด ์์ ํด๋์ค ๋ฌธ์
2. ์ปดํฌ์ง์ ์ ์ด์ฉํ ๋ฐฉ๋ฒ - ์ ๋ต ํจํด
์์๋ณด๋ค๋ ์ปดํฌ์ง์ ์ ์ถ์ฒ
1) ๋ณ๊ฒฝ(ํ์ฅ)๋ ๊ฒ๊ณผ ๋ณํ์ง ์์ ๊ฒ์ ๊ตฌ๋ถ
๋ณ๊ฒฝ๋๋ ๋ถ๋ถ์ ์ธํฐํ์ด์ค๋ก ์ถ์ถ
2) ์ด ๋ ๋ชจ๋์ด ๋ง๋๋ ์ง์ ์ ์ธํฐํ์ด์ค ์ ์
์ธํฐํ์ด์ค์ ์์กดํ๋๋ก ์์ฑ(๊ธฐ๋ฅ ๋ณ๊ฒฝ์ ์ํด ์ฝ๋๋ฅผ ์์ ํด์ผํ๊ธฐ ๋๋ฌธ์)
3) ๊ตฌํ์ ์์กดํ๊ธฐ๋ณด๋ค ์ ์ํ ์ธํฐํ์ด์ค์ ์์กดํ๋๋ก ์ฝ๋๋ฅผ ์์ฑ
์๊ธฐ๊ฐ ์ง์ new ์์ฑ์๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์๊ณ , ์ธ๋ถ์์ ์ธ์คํด์ค๋ฅผ ๋ฐ๋ ๊ฒ์ ์์กด์ฑ ์ฃผ์ (Dependency Injection, DI)์ด๋ผ๊ณ ํ๋ค.
Dependency Injection ์์กด์ฑ ์ฃผ์
์ํํธ์จ์ด ๊ฐ๋ฐ์์ ์์กด์ฑ ์ฃผ์ ์ ๊ฐ์ฒด๊ฐ ์์กดํ๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ ๊ฒ์ด๋ค.
์์กด์ฑ ์ฃผ์ ์ ์๋๋ ๊ฐ์ฒด์ ์์ฑ๊ณผ ์ฌ์ฉ์ ๊ด์ฌ์ ๋ถ๋ฆฌํ๋ ๊ฒ์ด๋ค. → ๊ฐ๋ ์ฑ๊ณผ ์ฝ๋ ์ฌ์ฌ์ฉ์ ๋์ฌ์ค๋ค.
์ํํธ์จ์ด ๊ฐ๋ฐ์์ ์์กด์ฑ ์ฃผ์ ์ ๊ฐ์ฒด๊ฐ ์์กดํ๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ ๊ฒ์ด๋ค.
์์กด์ฑ ์ฃผ์ ์ ์๋๋ ๊ฐ์ฒด์ ์์ฑ๊ณผ ์ฌ์ฉ์ ๊ด์ฌ์ ๋ถ๋ฆฌํ๋ ๊ฒ์ด๋ค. → ๊ฐ๋ ์ฑ๊ณผ ์ฝ๋ ์ฌ์ฌ์ฉ์ ๋์ฌ์ค๋ค.
์์กด์ฑ ์ฃผ์ ์ ์ ์ฉ ์ ํ
- ์์ฑ์ ์ฃผ์ : ํ์ํ ์์กด์ฑ์ ๋ชจ๋ ํฌํจํ๋ ํด๋์ค์ ์์ฑ์๋ฅผ ๋ง๋ค๊ณ , ๊ทธ ์์ฑ์๋ฅผ ํตํด ์์กด์ฑ ์ฃผ์
- setter๋ฅผ ํตํ ์ฃผ์ : ์์กด์ฑ์ ์ ๋ ฅ๋ฐ๋ setter ๋ฉ์๋๋ฅผ ๋ง๋ค๊ณ ์ด๋ฅผ ํตํด ์์กด์ฑ ์ฃผ์
- ์ธํฐํ์ด์ค๋ฅผ ํตํ ์ฃผ์ : ์์กด์ฑ์ ์ฃผ์ ํ๋ ํจ์๋ฅผ ํฌํจํ ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ๊ณ ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋๋ก ํจ์ผ๋ก์จ ์คํ ์์ ์์กด์ฑ ์ฃผ์
OCP๋ฅผ ์ค์ํ๊ธฐ ์ํ ๋์์ธ ํจํด
์ ๋ตํจํด
์ ๋ตํจํด์ด๋ ๊ธฐ์กด์ ์ฝ๋ ๋ณ๊ฒฝ์์ด ํ์๋ฅผ ์์ ๋กญ๊ฒ ๋ฐ๊ฟ ์ ์๊ฒ ํด์ฃผ๋ OCP๋ฅผ ์ค์ํ ๋์์ธ ํจํด
๋์์ธ ํจํด์ ๊ฝ
์ ๋ต์ ์ฝ๊ฒ ๋ฐ๊ฟ ์ ์๋๋ก ํด์ฃผ๋ ๋์์ธ ํจํด
ํ์๋ฅผ ํด๋์ค๋ก ์บก์ํํด ๋์ ์ผ๋ก ํ์๋ฅผ ์์ ๋กญ๊ฒ ๋ฐ๊ฟ ์ ์๊ฒ ํด์ฃผ๋ ํจํด
์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐ๊ฐ ๊ธฐ์กด์ ์ฝ๋์ ์ํฅ์ ๋ฏธ์น์ง ๋ชปํ๊ฒ ํ๋ฏ๋ก OCP๋ฅผ ๋ง์กฑ
์ฐธ๊ณ ์๋ฃ
'๐ง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 |