๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
CS

[CS] : ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

by ๊ถŒ์Šพํ–„ 2023. 8. 30.

 

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ?

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ƒํ™” ์‹œ์ผœ์„œ ์ƒํƒœ์™€ ํ–‰์œ„๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค๊ณ ,
๊ฐ์ฒด๋“ค๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ํ†ตํ•ด ๋กœ์ง์„ ๊ตฌ์„ฑํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ๋ฒ•์ด๋‹ค.

 

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

C++ / C# / Java / Python / JavaScript / Ruby / Swift ๋“ฑ์ด ์žˆ๋‹ค.

 

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํŠน์ง•

  1. ์ถ”์ƒํ™”
  2. ์บก์Аํ™”
  3. ์ƒ์†
  4. ๋‹คํ˜•์„ฑ

 

1. ์ถ”์ƒํ™”

  • ๊ฐ์ฒด์—์„œ ๊ณตํ†ต๋œ ์†์„ฑ๊ณผ ํ–‰์œ„๋ฅผ ์ถ”์ถœ ํ•˜๋Š” ๊ฒƒ
  • ๊ณตํ†ต์˜ ์†์„ฑ๊ณผ ํ–‰์œ„๋ฅผ ์ฐพ์•„์„œ ํƒ€์ž…์„ ์ •์˜ํ•˜๋Š” ๊ณผ์ •
  • ์ถ”์ƒํ™”๋Š” ๋ถˆํ•„์š”ํ•œ ์ •๋ณด๋Š” ์ˆจ๊ธฐ๊ณ  ์ค‘์š”ํ•œ ์ •๋ณด๋งŒ์„ ํ‘œํ˜„ํ•จ์œผ๋กœ์จ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ

 

1-1. ์ถ”์ƒํ™”์˜ ํ•„์š” ์ด์œ 

  • "๊ฐ•์•„์ง€"๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ์žˆ์„ ๋•Œ "ํ‘ธ๋“ค"๋งŒ ์žˆ๋Š”๊ฒƒ์ด ์•„๋‹ˆ๊ณ , "๋น„์ˆ‘"์ด๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ์ถ”๊ฐ€๊ฐ€ ๋œ๋‹ค๋ฉด "๊ฐ•์•„์ง€"๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ์ถ”์ƒํ™” ์‹œ์ผœ๋†“์Œ์œผ๋กœ์จ ๋‹ค๋ฅธ๊ณณ์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ์ƒˆ๋กœ ๋งŒ๋“ค ๋ถ€๋ถ„๋งŒ ์ƒ์„ฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

2. ์บก์Аํ™”

  • ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•๋“ค์„ ๊ฒฐํ•ฉ์‹œ์ผœ ๋ฌถ๋Š” ๊ฒƒ(๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ๋Š”๊ฒƒ์„ ๋œปํ•จ)
  • ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ

 

2-1. ์บก์Аํ™”์˜ ์žฅ์ 

  • ์†์„ฑ๊ณผ ํ–‰์œ„๋ฅผ ์ •์˜ํ•˜๋Š” ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ๋ฅผ "ํด๋ž˜์Šค"๋ผ๋Š” ์บก์А์— ๋„ฃ์–ด ๋ถ„๋ฅ˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์žฌํ™œ์šฉ์ด ์›ํ™œํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
  • ์บก์Аํ™”๋ฅผ ํ†ตํ•ด์„œ ์ •๋ณด์€๋‹‰์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.(์ด๊ฑด ์ ‘๊ทผ์ œ์–ด์ž ํ™œ์šฉ ํ•„์š”)

 

3. ์ƒ์†

  • ํด๋ž˜์Šค์˜ ์†์„ฑ๊ณผ ํ–‰์œ„๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค์— ๋ฌผ๋ ค์ฃผ๊ฑฐ๋‚˜ ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์†์„ฑ๊ณผ ํ–‰์œ„๋ฅผ ๋ฌผ๋ ค๋ฐ›๋Š” ๊ฒƒ์„ ๋œปํ•œ๋‹ค.
  • ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๊ฐ€ ๊ธฐ์กด์˜ ํด๋ž˜์Šค์˜ ๋ฐ์ดํ„ฐ์™€ ์—ฐ์‚ฐ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ธฐ๋Šฅ

 

3-1. ์ƒ์†์˜ ์žฅ์ 

  • ์žฌ์‚ฌ์šฉ์œผ๋กœ ์ธํ•œ ์ฝ”๋“œ๊ฐ€ ์ค„์–ด๋“ ๋‹ค.
  • ๋ฒ”์šฉ์ ์ธ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์†์„ฑ๊ณผ ํ–‰์œ„์˜ ์ž์œ ๋กœ์šด ์‚ฌ์šฉ ๋ฐ ์ถ”๊ฐ€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

3-2. ์ƒ์†์˜ ๋‹จ์ 

  • ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๋ณ€๊ฒฝ์ด ์–ด๋ ค์›Œ์ง„๋‹ค.
  • ๋ถˆํ•„์š”ํ•œ ํด๋ž˜์Šค๊ฐ€ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

4. ๋‹คํ˜•์„ฑ

  • ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜๋ช…, ํ•จ์ˆ˜๋ช…์ด ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์˜๋ฏธ๋กœ ํ•ด์„ ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ
  • ์–ด๋– ํ•œ ์š”์†Œ์— ์—ฌ๋Ÿฌ ๊ฐœ๋…์„ ๋„ฃ์–ด ๋†“๋Š” ๊ฒƒ

- ํ•˜๋‚˜์˜ ํด๋ž˜์Šค ๋‚ด๋ถ€์— ๊ฐ™์€ ์ด๋ฆ„์˜ ํ–‰์œ„๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ์ƒ์œ„ ํด๋ž˜์Šค์˜ ํ–‰์œ„๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— "๋‹คํ˜•์„ฑ"์ด๋ผ๋Š” ํŠน์ง•์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค.

 

4-1. ์˜ค๋ฒ„๋ผ์ด๋”ฉ

  • ์ƒ์œ„ ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ–‰์œ„๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์žฌ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ

 

4-2. ์˜ค๋ฒ„๋กœ๋”ฉ

  • ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์ธ์ž์˜ ๊ฐœ์ˆ˜๋‚˜ ์ž๋ฃŒํ˜•์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๊ฒƒ

 

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์žฅ์ 

  • ํด๋ž˜์Šค ๋‹จ์œ„๋กœ ๋ชจ๋“ˆํ™”์‹œ์ผœ ๊ฐœ๋ฐœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—…๋ฌด ๋ถ„๋‹ด์ด ํŽธ๋ฆฌํ•˜๊ณ  ๋Œ€๊ทœ๋ชจ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์— ์ ํ•ฉํ•˜๋‹ค.
  • ํด๋ž˜์Šค ๋‹จ์œ„๋กœ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ํŽธ๋ฆฌํ•˜๋‹ค.
  • ํด๋ž˜์Šค๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ƒ์†์„ ํ†ตํ•ด ํ™•์žฅํ•จ์œผ๋กœ์จ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์ด ์šฉ์ดํ•˜๋‹ค.

 

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋‹จ์ 

  • ์ฒ˜๋ฆฌ์†๋„๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋А๋ฆฌ๋‹ค.
  • ๊ฐ์ฒด์˜ ์ˆ˜๊ฐ€ ๋งŽ์•„์ง์— ๋”ฐ๋ผ ์šฉ๋Ÿ‰์ด ์ปค์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ์„ค๊ณ„์‹œ ๋งŽ์€ ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•˜๊ฒŒ ๋  ์ˆ˜ ์žˆ๋‹ค.

 

S.O.L.I.D (๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™)

1. ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ (SRP / Single Responsibility Principle)

  • ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋Š” ๋‹จ ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.
  • ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์ง€ํ‚ค์ง€ ์•Š์„ ๊ฒฝ์šฐ ํ•œ ์ฑ…์ž„์˜ ๋ณ€๊ฒฝ์— ์˜ํ•ด ๋‹ค๋ฅธ ์ฑ…์ž„๊ณผ ๊ด€๋ จ๋œ ์ฝ”๋“œ์— ์˜ํ–ฅ์ด ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

2. ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™ (OCP / Open-Closed Principle)

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

3. ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ (LSP / Liskov Subsitution Principle)

  • ํ”„๋กœ๊ทธ๋žจ ๊ฐ์ฒด๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ •ํ™•์„ฑ์„ ๊นจ๋œจ๋ฆฌ์ง€ ์•Š์œผ๋ฉด์„œ ํ•˜์œ„ ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ์ƒ์œ„ ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ํ•˜์œ„ ํƒ€์ž…์˜ ๊ฐ์ฒด๋กœ ์น˜ํ™˜ํ•ด๋„, ์ƒ์œ„ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•ด์•ผ ํ•œ๋‹ค.

4. ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™ (ISP / Interface Segregation Principle)

  • ๋ฒ”์šฉ ์ธํ„ฐํŽ˜์ด์Šค ํ•˜๋‚˜๋ณด๋‹ค ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ๊ฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ๋ณ€๊ฒฝ์ด ์žˆ์–ด๋„ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋„๋ก ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

5. ์˜์กด๊ด€๊ณ„ ์—ญ์ „ ์›์น™ (DIP / Dependency Inversion Principle)

  • ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ์ง€ ๊ตฌ์ฒดํ™”์— ์˜์กดํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
  • ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์„ ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์˜ ๊ตฌํ˜„์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋˜๊ณ  ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์„ ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์—์„œ ์ •์˜ํ•œ ์ถ”์ƒํƒ€์ž…์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค.