13์ฅ์์๋ ์ํผํ์ ๊ณผ ์๋ธํ์ ์ ๊ฐ๋ ์ ์ค๋ช ํ๊ณ ํ์ ๊ณ์ธต์ ๋ง์กฑ์ํค๊ธฐ ์ํด ์ ์ฉํ ์ ์๋ ์ค๊ณ ์์น์ ์ค๋ช ํ๋ค. ์ฌ๋ฐ๋ฅธ ํ์ ๊ณ์ธต์ ๊ตฌ์ฑํ๊ธฐ ์ํด์๋ ํด๋ผ์ด์ธํธ์ ๊ด์ ์์ ์ํผํ์ ๊ณผ ์๋ธํ์ ์ฌ์ด์ ํ๋์ด ํธํ๋๋๋ก ๋ง๋ค์ด์ผ ํ๋ค.
์์์ ์ฉ๋๋ ๋๊ฐ์ง๋ก ๋๋ ์ ์๋ค.
์ฒซ ๋ฒ์งธ๋ ํ์ ๊ณ์ธต ๊ตฌํ์ด๊ณ ๋๋ฒ์งธ๋ ์ฝ๋ ์ฌ์ฌ์ฉ์ด๋ค.
๋์ผํ ๋ฉ์์ง์ ๋ํด ์๋ก ๋ค๋ฅด๊ฒ ํ๋ํ ์ ์๋ ๋คํ์ ์ธ ๊ฐ์ฒด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ๊ฐ์ฒด์ ํ๋์ ๊ธฐ๋ฐ์ผ๋ก ํ์ ๊ณ์ธต์ ๊ตฌ์ฑํด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์์์ ์ด ํ์ ๊ณ์ธต์ ๊ตฌํํ ์ ์๊ฒ ํด ์ค๋ค.
๊ทธ๋ผ ํ์ ๊ณ์ธต์์ ํ์ ์ ๋ฌด์์ ๋งํ๋ ๊ฑธ๊น?
๊ฐ์ฒด์งํฅ ํจ๋ฌ๋ค์์ ๊ด์ ์์์ ํ์ ์ ๋์ผํ ์คํผ๋ ์ด์ ์ ์ ์ฉํ ์ ์๋ ์ธ์คํด์ค์ ์งํฉ์ด๋ค. ์ฆ, ๋์ผํ ํผ๋ธ๋ฆญ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง๋ ๊ฐ์ฒด๋ ๋์ผํ ํ์ ์ผ๋ก ๋ถ๋ฅํ ์ ์๋ค.
ํ์ ๊ณ์ธต์ ์ํ ์์์ ์ธ์ ์ฌ์ฉํ๋ ๊ฑธ๊น?
์์ ๊ด๊ณ๊ฐ is-a ๊ด๊ณ๋ฅผ ๋ชจ๋ธ๋ง ํ ๋,
ํด๋ผ์ด์ธํธ ์ ์ฅ์์ ๋ถ๋ชจ ํด๋์ค์ ํ์ ์ผ๋ก ์์ ํด๋์ค๋ฅผ ์ฌ์ฉํด๋ ๊ด์ฐฎ์ ๋
์ด ๋ ์กฐ๊ฑด ๋ชจ๋๋ฅผ ๋ง์กฑํ ๊ฒฝ์ฐ ์์์ ์ฌ์ฉํ๋ค.
๊ทธ๋์ is-a ๊ด๊ณ๋ฅผ ๋ง์กฑํ๋๋ผ๋ ํด๋ผ์ด์ธํธ๊ฐ ๊ธฐ๋ํ๋ ํ๋์ด ๋ค๋ฅด๋ค๋ฉด(ํ๋์ ์ฐ๊ด์ฑ์ด ์๋ค๋ฉด) ์์๊ด๊ณ๋ฅผ ์ฌ์ฉํ์ง ์์์ผ ํ๋ค.
์๋ธํด๋์ฑ๊ณผ ์๋ธํ์ดํ์ ๋ป์?
์๋ธํด๋์ฑ(๊ตฌํ ์์/ํด๋์ค ์์)์ ๋ค๋ฅธ ํด๋์ค์ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ ๋ชฉ์ ์ผ๋ก ์์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์๋ธํด๋์ฑ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์๋ธํ์ดํ(์ธํฐํ์ด์ค ์์)์ ํ์ ๊ณ์ธต์ ๊ตฌ์ฑํ๊ธฐ ์ํด ์์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค. ์๋ธํ์ดํ์ด ๋๋ ค๋ฉด ํ๋ ํธํ์ฑ(behavioral substitution)์ ๋ง์กฑํด์ผ ํ๋ฉฐ, ๋ถ๋ชจํด๋์ค์ ์๋ฆฌ์ ์์ ํด๋์ค๋ก ๋์ฒด๊ฐ ๊ฐ๋ฅ(substitutability) ํด์ผ ํ๋ค.
SOLID ์์น ์ค ํ๋์ธ ๋ฆฌ์ค์ฝํ ์นํ ์์น์ ์ฌ๋ฐ๋ฅธ ์์ ๊ด๊ณ์ ํน์ง์ ์ ์ํ๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์ฐจ์ด์ ์ ์ธ์ํ์ง ๋ชปํ ์ฑ ๊ธฐ๋ฐ ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์๋ธ ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ฉฐ, ์ฌ๊ธฐ์ ๋์ฒด ๊ฐ๋ฅ์ฑ์ ๊ฒฐ์ ํ๋ ๊ฒ์ ํด๋ผ์ด์ธํธ๋ค.
๊ณ์ฝ์ ์ํ ์ค๊ณ(Design By Contract, DBC)๋?
ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์ ํ๋ ฅ์ ์๋ฌด(obligation)์ ์ด์ต(benefit)์ผ๋ก ๊ตฌ์ฑ๋ ๊ณ์ฝ์ ๊ด์ ์์ ํํํ ๊ฒ์ด๋ค.
- ์ฌ์ ์กฐ๊ฑด(precondition): ํด๋ผ์ด์ธํธ๊ฐ ์ ์์ ์ผ๋ก ๋ฉ์๋๋ฅผ ์คํํ๊ธฐ ์ํด ๋ง์กฑ์์ผ์ผ ํ๋ ์กฐ๊ฑด
- ์ฌํ์กฐ๊ฑด(postcondition): ๋ฉ์๋๊ฐ ์คํ๋ ํ์ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด์ฅํด์ผ ํ๋ ์กฐ๊ฑด
- ํด๋์ค ๋ถ๋ณ์(class invariant): ๋ฉ์๋ ์คํ ์ ๊ณผ ์คํ ํ์ ์ธ์คํด์ค๊ฐ ๋ง์กฑ์์ผ์ผ ํ๋ ํด๋์ค ๋ถ๋ณ์
๊ณ์ฝ์ ์ํ ์ค๊ณ๋ ์ ์บ์คํ ์ ํ๋ ฅ์ด ์ฑ๊ณตํ๋ ค๋ฉด ์๋ธํ์ ์ด ์๋์ ๊ฐ์ ์กฐ๊ฑด์ ๋ง์กฑ์์ผ์ผ ํ๋ค๊ณ ํ๋ค.
- ์๋ธํ์ ์ ๋ ๊ฐ๋ ฅํ ์ฌ์ ์กฐ๊ฑด์ ์ ์ํ ์ ์๋ค.
- ์๋ธํ์ ์ ์ํผํ์ ๊ณผ ๊ฐ๊ฑฐ๋ ๋ ์ฝํ ์ฌ์ ์กฐ๊ฑด์ ์ ์ํ ์ ์๋ค.
- ์๋ธํ์ ์ ์ํผํ์ ๊ณผ ๊ฐ๊ฑฐ๋ ๋ ๊ฐํ ์ฌํ์กฐ๊ฑด์ ์ ์ํ ์ ์๋ค.
- ์๋ธํ์ ์ ๋ ์ฝํ ์ฌํ์กฐ๊ฑด์ ์ ์ํ ์ ์๋ค.
'์คํฐ๋ > ์ค๋ธ์ ํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ค๋ธ์ ํธ] 15์ฅ '๋์์ธ ํจํด๊ณผ ํ๋ ์์ํฌ' (0) | 2023.01.21 |
---|---|
[์ค๋ธ์ ํธ] 14์ฅ '์ผ๊ด์ฑ ์๋ ํ๋ ฅ' (0) | 2023.01.14 |
[์ค๋ธ์ ํธ] 12์ฅ '๋คํ์ฑ' (0) | 2022.12.30 |
[์ค๋ธ์ ํธ] 11์ฅ 'ํฉ์ฑ๊ณผ ์ ์ฐํ ์ค๊ณ' (0) | 2022.12.23 |
[์ค๋ธ์ ํธ] 10์ฅ '์์๊ณผ ์ฝ๋ ์ฌ์ฌ์ฉ' (0) | 2022.12.16 |
๋๊ธ