๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“–CS/๐Ÿ“™Software Design

[์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„] ์ ˆ์ฐจํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ vs ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

by goguma.dev 2024. 10. 20.

โ€ป ์ด ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€๋“ค์€ 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 ๋“ฑ ๋งŽ์€ ํ˜„๋Œ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋“ค์ด ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

 

ํด๋ž˜์Šค์™€ ๊ฐ์ฒด

  • ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด์˜ ์„ค๊ณ„๋„์ด๊ณ , ๊ฐ์ฒด๋Š” ๊ทธ ์„ค๊ณ„๋„๋กœ ๋งŒ๋“ค์–ด์ง„ ์‹ค์ œ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.
  • ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

=> ์ ˆ์ฐจ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์„ ์ค‘์‹ฌ์œผ๋กœ ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, ํ”„๋กœ๊ทธ๋žจ์„ ์ผ๋ จ์˜ ํ•จ์ˆ˜๋“ค๋กœ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ ˆ์ฐจ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ , ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธธ ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฐ˜๋ฉด, ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํด๋ž˜์Šค์™€ ๊ฐ์ฒด์˜ ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜์—ฌ, ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ์ฒด๋“ค์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์ค‘์‹ฌ์œผ๋กœ ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๊ฐ์ฒด๋Š” ์†์„ฑ(๋ฐ์ดํ„ฐ)์™€ ๋ฉ”์„œ๋“œ(ํ•จ์ˆ˜)๋ฅผ ํ•จ๊ป˜ ํฌํ•จํ•˜๋ฉฐ, ๊ฐ์ฒด ํ•˜๋‚˜๋Š” ์ ˆ์ฐจ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋žจ์˜ ์ „์ฒด์— ํ•ด๋‹นํ•˜๋Š” ๋…๋ฆฝ์ ์ธ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ์ฒด๋Š” ์ƒ์†๊ณผ ๋‹คํ˜•์„ฑ์˜ ํŠน์ง•์ด ์žˆ์–ด, ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์žฌ์‚ฌ์šฉํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.