โป ์ด ์นดํ ๊ณ ๋ฆฌ์ ๊ธ๋ค์ knu HK.Lee ๊ต์๋์ <์ํํธ์จ์ด ์ค๊ณ> ์์ ์ ๋ฃ๊ณ ํ์๊ฐ ๋๋ฆ๋๋ก ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
โป ๋ถ์กฑํ ์ค๋ช ์ด ์๊ฑฐ๋, ์๋ชป ์๊ณ ์์ฑํ ๋ถ๋ถ์ด ๋ณด์ธ๋ค๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค๐

์ ์ฐจํ ํ๋ก๊ทธ๋๋ฐ
ํฐ ๋ ธ์ด๋ง ๊ตฌ์กฐ์ ์ปดํจํฐ ์ํคํ์ณ๊ฐ ๋ฑ์ฅํ๋ฉด์ ์ ์ฐจํ ํ๋ก๊ทธ๋๋ฐ์ด ์์๋์์ต๋๋ค.

ํฐ ๋ ธ์ด๋ง ๊ตฌ์กฐ๊ฐ ๋์ํ๋ ๋ฐฉ์์ ๊ฐ๋ตํ๊ฒ ์ค๋ช ํ์๋ฉด,
CPU๊ฐ ๋ฉ๋ชจ๋ฆฌ ์์ ํ๋ก๊ทธ๋จ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ๊ฐ์ ธ์ ์คํํ๋ ๋ฐฉ์์ ๋๋ค.

ํฐ ๋ ธ์ด๋ง ๊ตฌ์กฐ ์ปดํจํฐ๋ ์ด๊ธฐ์ JUMP๋ฌธ์ด ์๋ ์ ์ฐจํ ํ๋ก๊ทธ๋จ์ ์์ํ๋๋ฐ ์ด์ฉ๋์์ต๋๋ค.
ํ์ง๋ง, JUMP๋ฌธ์ด๋ GOTO๋ฌธ์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์คํ๊ฒํฐ ์ฝ๋๊ฐ ๋ง๋ค์ด์ง๊ฒ ๋ฉ๋๋ค.
( ์คํ๊ฒํฐ ์ฝ๋(spaghetti code)๋ ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ ์์ค์ฝ๋๊ฐ ๋ณต์กํ๊ฒ ์ฝํ ๋ชจ์ต์ ์คํ๊ฒํฐ ๋ฉด๋ฐ์ ๋น์ ํ ํํ์ ๋๋ค. ์คํ๊ฒํฐ ์ฝ๋๋ ์ ์์ ์ผ๋ก ์๋ํ์ง๋ง, ์ฌ๋์ด ์ฝ๋๋ฅผ ์ฝ์ผ๋ฉด์ ๊ทธ ์ฝ๋์ ์๋์ ํ์ ํ๊ธฐ๋ ์ด๋ ต๋ค๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. )
์คํ๊ฒํฐ ํ๋ก๊ทธ๋จ ์ด๋ป๊ฒ ์์จ ์ ์์๊น์?
๊ตฌ์กฐ์ ํ๋ก๊ทธ๋๋ฐ (goto๋ฌธ์ด ์๋ ์ ์ฐจํ ํ๋ก๊ทธ๋๋ฐ)

๊ตฌ์กฐ์ ํ๋ก๊ทธ๋๋ฐ์ ๋ณต์กํ ๊ณ์ฐ์ ํจ์ ์ถ์ํ๋ฅผ ํตํด ํด๊ฒฐํ๋ ๋ฐฉ์์ ๋๋ค.

๊ตฌ์กฐ์ ํ๋ก๊ทธ๋๋ฐ์ ๋ฌธ์ ์
๊ตฌ์กฐ์ ํ๋ก๊ทธ๋๋ฐ์ ๋ณต์กํ ๊ณ์ฐ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ต์ ์ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง๋ง, ํ์ค์ธ๊ณ ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ์์ด ์๋ฃ๋ฅผ ๋ชจ๋ธ๋งํ๋ ๊ณผ์ ์ด ๊น๋ค๋กญ๋ค๋ ๋ฌธ์ ๊ฐ ์ฌ์ ํ ๋จ์์์ต๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋
1) ์ฌ์ฉ์๊ฐ ์๋ก์ด data type์ ์ ์ํ ์ ์๋ ๋ฐฉ๋ฒ
2) ํ์ค์ธ๊ณ ์ ๋ณด ์ฌ์ด์ ๊ด๊ณ๋ฅผ ๋ชจ๋ธ (is-a, have, associate)
3) ์ ์ญ ๋ณ์๋ก ์ธํ ๋ฌธ์ ํด๊ฒฐ
์ด ํ์ํฉ๋๋ค.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋จ ๋ชจ๋ธ

์ ์ฐจ์งํฅ vs ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ์ ์ฐจ์งํฅ์ ๋ฐ์ดํฐ ์ค์ฌ, ๊ฐ์ฒด์งํฅ์ ๊ธฐ๋ฅ ์ค์ฌ
- ์ ์ฐจ์งํฅ์ ๋ฐ๋๋ ๊ฐ์ฒด์งํฅ์ด ์๋๊ณ ๊ฐ์ฒด์งํฅ์ ๋ฐ๋๋ ์ ์ฐจ์งํฅ์ด ์๋๋๋ค.
์ ์ฐจ ์งํฅ ํ๋ก๊ทธ๋๋ฐ(Procedural Programming)์ ํ๋ก๊ทธ๋จ์ ์ผ๋ จ์ ์ ์ฐจ๋ ํจ์์ ์งํฉ์ผ๋ก ๋ณด๊ณ , ์ด๋ฅผ ์์ฐจ์ ์ผ๋ก ์คํํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ์์ ๋๋ค.
์๋ํ๋ฉด ์ ์ฐจ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋จ์ ํ๋ฆ์ ์ค์ํ๋ฉฐ, ๊ฐ๋จํ ์์ ์ ์ ํฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด ํจ๋ฌ๋ค์์ ๋ฐ์ดํฐ์ ํจ์๋ฅผ ๋ถ๋ฆฌํ์ฌ ์๊ฐํ๋ฉฐ, C ์ธ์ด๊ฐ ๋ํ์ ์ธ ์ ์ฐจ ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋๋ค.
์ ์ฐจ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์๊ณ ๋จ์ํ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์ ์ ๋ฆฌํ๋ฉฐ, ์คํ ์๋๊ฐ ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.(์ค๋๋ ์ ์ํํธ์จ์ด์ ๋ฐ๋ฌ๊ณผ ๋๋ถ์ด ํ๋์จ์ด์ ๋ฐ๋ฌ์ด ๋ง์ด ์ด๋ฃจ์ด์ ธ ๋ ์ด์ ์ฅ์ ์ด ์๋ ์ ์์)
ํ์ง๋ง, ๋๊ท๋ชจ ์ํํธ์จ์ด ๊ฐ๋ฐ์๋ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ๋ฎ์ ์ ํฉํ์ง ์์ ์ ์์ต๋๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(Object-Oriented Programming, OOP)์ ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๋ค์ ์งํฉ์ผ๋ก ๋ชจ๋ธ๋งํ์ฌ, ๊ฐ์ฒด ๊ฐ์ ์ํธ์์ฉ์ ํตํด ๋ก์ง์ ๊ตฌ์ฑํ๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋๋ค.
์๋ํ๋ฉด ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ์ค ์ธ๊ณ์ ์ฌ๋ฌผ์ ๊ฐ์ฒด๋ก ์ถ์ํํ์ฌ ํ๋ก๊ทธ๋จ์ ์ ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ฐ์ฒด๋ ์ํ(์์ฑ)์ ํ์(๋ฉ์๋)๋ฅผ ๊ฐ์ง๋ฉฐ, ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ ์บก์ํ, ์์, ๋คํ์ฑ ๋ฑ์ ๊ฐ๋ ์ ๊ตฌํํ ์ ์์ต๋๋ค.
์ด๋ฌํ ํน์ฑ์ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ด๋ฉฐ, ๋๊ท๋ชจ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ ํฉํฉ๋๋ค.
Java, C++, Python ๋ฑ ๋ง์ ํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์ด ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํฉ๋๋ค.
ํด๋์ค์ ๊ฐ์ฒด
- ํด๋์ค๋ ๊ฐ์ฒด์ ์ค๊ณ๋์ด๊ณ , ๊ฐ์ฒด๋ ๊ทธ ์ค๊ณ๋๋ก ๋ง๋ค์ด์ง ์ค์ ์ฌ๋ก์ ๋๋ค.
- ํ๋์ ํด๋์ค๋ก ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
=> ์ ์ฐจ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋จ์ ํ๋ฆ์ ์ค์ฌ์ผ๋ก ์ค๊ณํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ํ๋ก๊ทธ๋จ์ ์ผ๋ จ์ ํจ์๋ค๋ก ๊ตฌ์ฑํฉ๋๋ค. ์ ์ฐจ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์๋ ์ฝ๋๊ฐ ๋ณต์กํด์ง๊ณ , ์ ์ญ ๋ณ์๊ฐ ๋ง์์ง์๋ก ์ค๋ฅ๊ฐ ์๊ธธ ๊ฐ๋ฅ์ฑ์ด ํฌ๊ณ , ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ถ์ ํ๊ธฐ ์ด๋ ต๋ค๋ ๋จ์ ์ด ์์ต๋๋ค.
๋ฐ๋ฉด, ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํด๋์ค์ ๊ฐ์ฒด์ ๊ฐ๋
์ ์ฌ์ฉํ์ฌ, ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๋ค์ ์ํธ์์ฉ์ ์ค์ฌ์ผ๋ก ์ค๊ณํ๋ ๋ฐฉ์์
๋๋ค. ๊ฐ์ฒด๋ ์์ฑ(๋ฐ์ดํฐ)์ ๋ฉ์๋(ํจ์)๋ฅผ ํจ๊ป ํฌํจํ๋ฉฐ, ๊ฐ์ฒด ํ๋๋ ์ ์ฐจ์งํฅ ํ๋ก๊ทธ๋จ์ ์ ์ฒด์ ํด๋นํ๋ ๋
๋ฆฝ์ ์ธ ๋จ์์
๋๋ค. ์ด ๊ฐ์ฒด๋ ์์๊ณผ ๋คํ์ฑ์ ํน์ง์ด ์์ด, ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ฝ๋๋ฅผ ์ฝ๊ฒ ์ฌ์ฌ์ฉํ๊ณ ์ ์ง๋ณด์ ๊ฐ๋ฅํ๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
'๐CS > ๐Software Design' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ํํธ์จ์ด ์ค๊ณ] Use Case Diagram (3) | 2024.10.20 |
---|---|
[์ํํธ์จ์ด ์ค๊ณ] Activity Diagram (1) | 2024.10.20 |
[์ํํธ์จ์ด ์ค๊ณ] 1์ฅ. Introduction to Systems Analysis and Design (0) | 2024.10.18 |
[์ํํธ์จ์ด ์ค๊ณ] 0์ฅ. Overview (0) | 2024.10.18 |