Home > CS > 2024 > ๐Ÿ’พ [CS] ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„(Object-Oriented Design, OOD)๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

๐Ÿ’พ [CS] ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„(Object-Oriented Design, OOD)๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?
CS

๐Ÿ’พ [CS] ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„(Object-Oriented Design, OOD)๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

  • ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„(Object-Oriented Design, OOD)๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Object-Oriented Programming, OOP)์˜ ์›์น™๊ณผ ๊ฐœ๋…์„ ๋ฐ”ํƒ•์œผ๋กœ, ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ์ฒด๋ผ๋Š” ๋…๋ฆฝ์ ์ธ ๋‹จ์œ„๋กœ ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„(Object-Oriented Design, OOD)๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํด๋ž˜์Šค์™€ ๊ฐ์ฒด๋กœ ๋‚˜๋ˆ„๊ณ , ์ด๋“ค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜์—ฌ ํšจ์œจ์ ์ด๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ™‹โ€โ™‚๏ธ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„(Object-Oriented Design, OOD)๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

1๏ธโƒฃ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์˜ ํ•ต์‹ฌ ๊ฐœ๋….

1๏ธโƒฃ ๊ฐ์ฒด(Object)

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

2๏ธโƒฃ ํด๋ž˜์Šค(Class)

  • ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ฒญ์‚ฌ์ง„ ๋˜๋Š” ์„ค๊ณ„๋„์ž…๋‹ˆ๋‹ค.
    • ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๋Š” ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด์˜ ํŠน์„ฑ(์†์„ฑ)๊ณผ ํ–‰๋™(๋ฉ”์„œ๋“œ)์„ ์ •์˜ํ•˜์—ฌ, ๊ฐ™์€ ํ˜•ํƒœ์˜ ๊ฐ์ฒด๋ฅผ ๋‹ค์ˆ˜ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

3๏ธโƒฃ ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„.

  • ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„(Object-Oriented Design, OOD)์—์„œ๋Š” ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋Ÿฌํ•œ ๊ด€๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.
      • ์—ฐ๊ด€ ๊ด€๊ณ„(Association)
      • ์ง‘ํ•ฉ ๊ด€๊ณ„(Aggregation)
      • ๊ตฌ์„ฑ ๊ด€๊ณ„(Composition)
      • ์ƒ์† ๊ด€๊ณ„(Inheritance)

1๏ธโƒฃ ์—ฐ๊ด€ ๊ด€๊ณ„(Association)

  • ๋‘ ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ ๊ด€๋ จ๋œ ๊ด€๊ณ„์ž…๋‹ˆ๋‹ค.
    • ์˜ˆ: ํ•™์ƒ ๊ฐ์ฒด์™€ ์ˆ˜์—… ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ์Œ.

2๏ธโƒฃ ์ง‘ํ•ฉ ๊ด€๊ณ„(Aggregation)

  • ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ์ผ๋ถ€๋กœ ํฌํ•จ๋˜๋Š” ๊ด€๊ณ„์ด์ง€๋งŒ, ๋ถ€๋ถ„ ๊ฐ์ฒด๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ: ํŒ€๊ณผ ํŒ€์›.

3๏ธโƒฃ ๊ตฌ์„ฑ ๊ด€๊ณ„(Composition)

  • ๋ถ€๋ถ„ ๊ฐ์ฒด๊ฐ€ ์ „์ฒด ๊ฐ์ฒด์— ์™„์ „ํžˆ ์†Œ์†๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ „์ฒด ๊ฐ์ฒด๊ฐ€ ์‚ฌ๋ผ์ง€๋ฉด ๋ถ€๋ถ„ ๊ฐ์ฒด๋„ ํ•จ๊ป˜ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.
    • ์˜ˆ: ์ง‘๊ณผ ๋ฐฉ.

4๏ธโƒฃ ์ƒ์† ๊ด€๊ณ„(Inheritance)

  • ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ํŠน์„ฑ์„ ์ƒ์†๋ฐ›๋Š” ๊ด€๊ณ„์ž…๋‹ˆ๋‹ค.
    • ์˜ˆ: ๋™๋ฌผ ํด๋ž˜์Šค๊ฐ€ ์žˆ๊ณ , ์ด๋ฅผ ์ƒ์†๋ฐ›์•„ ๊ฐœ, ๊ณ ์–‘์ด ํด๋ž˜์Šค๋ฅผ ์ •์˜.

2๏ธโƒฃ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์˜ ์›์น™(SOLID)

  • ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„(Object-Oriented Design, OOD)์—์„œ๋Š” SOLID ์›์น™์ด ์ž์ฃผ ์–ธ๊ธ‰๋˜๋ฉฐ, ์ด๋Š” ์œ ์—ฐํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์ข‹์€ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„๋ฅผ ์œ„ํ•œ ์ค‘์š”ํ•œ ์ง€์นจ์ž…๋‹ˆ๋‹ค.

๐Ÿ™‹โ€โ™‚๏ธ SOLID ์›์น™.

1๏ธโƒฃ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(Single Responsibility Principle, SRP)

  • ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ ธ์•ผ ํ•˜๋ฉฐ, ๊ทธ ์ฑ…์ž„์„ ์™„๋ฒฝํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฆ‰, ํด๋ž˜์Šค๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ์ด์œ ๋Š” ํ•˜๋‚˜์˜ ์ด์œ ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ: Order ํด๋ž˜์Šค๊ฐ€ ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ์™€ ์ฃผ๋ฌธ ๋ฐ์ดํ„ฐ ์ €์žฅ์„ ๋ชจ๋‘ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋Š” Order ํด๋ž˜์Šค์™€ ์ฃผ๋ฌธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” OrderRespository ํด๋ž˜์Šค๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

2๏ธโƒฃ ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™(Open-Closed Principle, OCP)

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

3๏ธโƒฃ ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™(Liskov Substitution Principle, LSP)

  • ์„œ๋ธŒ ํด๋ž˜์Šค๋Š” ์–ธ์ œ๋‚˜ ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฆ‰, ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ์—์„œ ํ•˜์œ„ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ํ”„๋กœ๊ทธ๋žจ์ด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ: Bird ํด๋ž˜์Šค์˜ ํ•˜์œ„ ํด๋ž˜์Šค์ธ Penguin์ด fly() ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์ง€๋งŒ, ํ˜„์‹ค์—์„œ๋Š” ํŽญ๊ท„์ด ๋‚ ์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ์›์น™์„ ์œ„๋ฐ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ์„ค๊ณ„๋ฅผ ๋‹ค์‹œ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

4๏ธโƒฃ ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™(Interface Segregation Principle, ISP)

  • ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก, ์ž‘๊ณ  ๊ตฌ์ฒด์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋‚˜๋ˆ„์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•˜๋‚˜์˜ ํฐ ์ธํ„ฐํŽ˜์ด์Šค๋ณด๋‹ค๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ค๊ณ„ํ•˜์—ฌ, ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ๊ตฌํ˜„ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ: Printer ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ print(), scan(), fax()๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์„ ๋•Œ, ํ”„๋ฆฐํ„ฐ๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋„ ์Šค์บ๋„ˆ์™€ ํŒฉ์Šค ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค๋ฉด, Printable, Scannable, Faxable๊ณผ ๊ฐ™์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

5๏ธโƒฃ ์˜์กด ์—ญ์ „ ์›์น™(Dependency Inversion Principle, DIP)

  • ์ƒ์œ„ ๋ชจ๋“ˆ์€ ํ•˜์œ„ ๋ชจ๋“ˆ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋˜๋ฉฐ, ๋‘˜ ๋‹ค ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ, ์ถ”์ƒํ™”๋œ ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜๋„๋ก ์„ค๊ณ„ํ•˜์—ฌ ์œ ์—ฐํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ: Service ํด๋ž˜์Šค๊ฐ€ Repository ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์‹ค์ œ ๋ฐ์ดํ„ฐ ์ €์žฅ ๋กœ์ง์€ FileRepository๋‚˜ DatabaseRepository ๊ฐ™์€ ํด๋ž˜์Šค์—์„œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

3๏ธโƒฃ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์˜ ์žฅ์ .

1๏ธโƒฃ ์žฌ์‚ฌ์šฉ์„ฑ.

  • ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„(Object-Oriented Design, OOD)์˜ ๋ชจ๋“ˆ์„ฑ ๋•๋ถ„์—, ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ด๋Š” ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์—ฌ ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  ๋น„์šฉ์„ ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2๏ธโƒฃ ์œ ์ง€๋ณด์ˆ˜์„ฑ.

  • ๊ฐ ๊ฐ์ฒด๊ฐ€ ๋…๋ฆฝ์ ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ•ด๋‹น ๊ฐ์ฒด๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
    • ๋‹ค๋ฅธ ๊ฐ์ฒด์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์–ด, ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.

3๏ธโƒฃ ํ™•์žฅ์„ฑ.

  • ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„(Object-Oriented Design, OOD)๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ์œ ์—ฐํ•œ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์–ด, ๋ณ€ํ™”ํ•˜๋Š” ์š”๊ตฌ ์‚ฌํ•ญ์— ์‰ฝ๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4๏ธโƒฃ ์บก์Šํ™”.

  • ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„(Object-Oriented Design, OOD)๋Š” ์บก์Šํ™”(Encapsulation)๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ๋ณดํ˜ธํ•˜๊ณ , ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๊ณ , ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์„ ์ค„์ด๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“ ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ(Data Integrity)

๋ฐ์ดํ„ฐ๊ฐ€ ์ •ํ™•ํ•˜๊ณ  ์ผ๊ด€๋˜๋ฉฐ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
์ด๋Š” ๋ฐ์ดํ„ฐ์˜ ์ •ํ™•์„ฑ, ์ผ๊ด€์„ฑ, ์œ ํšจ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ฐœ๋…์œผ๋กœ, ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ, ์ฒ˜๋ฆฌ, ์ „์†ก๋˜๋Š” ๋™์•ˆ ์†์ƒ, ๋ณ€์กฐ, ์œ ์‹ค ๋“ฑ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.
๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ(Data Integrity)์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์„ ๋น„๋กฏํ•œ ๋‹ค์–‘ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์—์„œ ๋งค์šฐ ์ค‘์š”ํ•œ ๊ฐœ๋…์œผ๋กœ, ๋ฐ์ดํ„ฐ์˜ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•˜๋Š” ํ•ต์‹ฌ ์š”์†Œ์ž…๋‹ˆ๋‹ค.

4๏ธโƒฃ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์˜ ์˜ˆ.

1๏ธโƒฃ Car ํด๋ž˜์Šค ์„ค๊ณ„ ์˜ˆ.

public class Car {
    private Engine engine; // ์บก์Šํ™”๋œ ์—”์ง„ ๊ฐ์ฒด
    
    public Car(Engine engine) { // ์˜์กด์„ฑ ์ฃผ์ž…
        this.engine = engine;
    }
    
    public void start() {
        engine.start();
    }
}
  • ์œ„ ์„ค๊ณ„์—์„œ๋Š” Car ํด๋ž˜์Šค๊ฐ€ Engine ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, Engine ํด๋ž˜์Šค์˜ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์— ์˜์กดํ•˜์ง€ ์•Š๊ณ , Engine ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ ์ „๊ธฐ ์—”์ง„์ด๋‚˜ ๊ฐ€์†”๋ฆฐ ์—”์ง„์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, Engine ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
    • ์ด๋Š” ์˜์กด ์—ญ์ „ ์›์น™(Dependency Inversion Principle, DIP)์„ ์ ์šฉํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

5๏ธโƒฃ ์š”์•ฝ.

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