GRASP Pattern

๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์—์„œ ์šฐ๋ฆฌ๋Š” ํ•ญ์ƒ โ€˜์ด ์ฑ…์ž„์€ ๋ˆ„๊ฐ€ ๊ฐ€์ ธ์•ผ ํ• ๊นŒ?โ€™ ๋ผ๋Š” ์งˆ๋ฌธ์— ์ง๋ฉดํ•˜๊ฒŒ ๋œ๋‹ค.

GRASP(General Responsibility Assignment Software Patterns) ํŒจํ„ด์€ Craig Larman์ด ์ œ์•ˆํ•œ ์ฑ…์ž„ ํ• ๋‹น ๊ธฐ๋ฒ•์œผ๋กœ, ์ด 9๊ฐ€์ง€ ํŒจํ„ด์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๊ฐ ํŒจํ„ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.


Information expert

์ฑ…์ž„์„ ์ •๋ณด ์ „๋ฌธ๊ฐ€, ์ฆ‰, ์ฑ…์ž„์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์—๊ฒŒ ํ• ๋‹นํ•˜๋ผ.

์ฑ…์ž„์„ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์žฅ ์ž˜ ์•Œ๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์—๊ฒŒ ํ• ๋‹นํ•จ์œผ๋กœ์จ ๊ฐ์ฒด๊ฐ€ ์ž์œจ์ ์ธ ์กด์žฌ์—ฌ์•ผ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ƒ๊ธฐ์‹œํ‚จ๋‹ค.

์ •๋ณด๋ฅผ ์•Œ๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋งŒ์ด ์ฑ…์ž„์„ ์–ด๋–ป๊ฒŒ ์ˆ˜ํ–‰ํ• ์ง€ ์Šค์Šค๋กœ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

Information expert ํŒจํ„ด์„ ๋”ฐ๋ฅด๋ฉด ์ •๋ณด์™€ ํ–‰๋™์„ ์ตœ๋Œ€ํ•œ ๊ฐ€๊นŒ์šด ๊ณณ์— ์œ„์น˜์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ์บก์Аํ™”๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋“ค๋กœ ์ฑ…์ž„์ด ๋ถ„์‚ฐ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ์‘์ง‘๋ ฅ ์žˆ๊ณ , ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค.

๋”ฐ๋ผ์„œ ๋†’์€ ์‘์ง‘๋„๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์•„์ ธ์„œ ๊ฐ„๊ฒฐํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค.

Creator

๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ฑ…์ž„์€ ๋ˆ„๊ฐ€ ๊ฐ€์ ธ์•ผํ• ๊นŒ? ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด์˜ ์ปจํ…์ŠคํŠธ๋ฅผ ์•Œ๊ณ  ์žˆ๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ปจํ…์ŠคํŠธ๋ฅผ ์•Œ๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์— ๋ถ€์—ฌํ•˜์ž.

์•„๋ž˜ ์กฐ๊ฑด์„ ์ตœ๋Œ€ํ•œ ๋งŽ์ด ๋งŒ์กฑํ•˜๋Š” B์—๊ฒŒ ๊ฐ์ฒด ์ƒ์„ฑ ์ฑ…์ž„์„ ํ• ๋‹นํ•˜๋ผ.

  • B๊ฐ€ A ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•˜๊ฑฐ๋‚˜ ์ฐธ์กฐํ•œ๋‹ค.
  • B๊ฐ€ A ๊ฐ์ฒด๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.
  • B๊ฐ€ A ๊ฐ์ฒด๋ฅผ ๊ธด๋ฐ€ํ•˜๊ฒŒ ์‚ฌ์šฉํ•œ๋‹ค.
  • B๊ฐ€ A ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค(์ด ๊ฒฝ์šฐ B๋Š” A์— ๋Œ€ํ•œ ์ •๋ณด ์ „๋ฌธ๊ฐ€๋‹ค)

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

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

๋‹ค์‹œ ๋งํ•ด์„œ ๋‘ ๊ฐ์ฒด๋Š” ์„œ๋กœ ๊ฒฐํ•ฉ๋œ๋‹ค.

์ด๋ฏธ ๊ฒฐํ•ฉ๋ผ ์žˆ๋Š” ๊ฐ์ฒด์—๊ฒŒ ์ƒ์„ฑ ์ฑ…์ž„์„ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์€ ์„ค๊ณ„์˜ ์ „์ฒด์ ์ธ ๊ฒฐํ•ฉ๋„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ CREATOR ํŒจํ„ด์€ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๊ฐ์ฒด ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ค๊ณ„๊ฐ€ ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

Controller

์‹œ์Šคํ…œ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ฑ…์ž„์„ ์‹œ์Šคํ…œ์˜ ๊ฒฝ๊ณ„์— ์žˆ๋Š” ๊ฐ์ฒด์— ํ• ๋‹นํ•˜๋ผ.

Controller ํŒจํ„ด์€ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์ด๋‚˜ ์™ธ๋ถ€ ์‹œ์Šคํ…œ์œผ๋กœ๋ถ€ํ„ฐ์˜ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•  ๊ฐ์ฒด๋ฅผ ์„ ํƒํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ฑ…์ž„ ํ• ๋‹น ์ง€์นจ์ด๋‹ค.

์‹œ์Šคํ…œ ๊ฒฝ๊ณ„์— ์œ„์น˜ํ•œ ๊ฐ์ฒด๋Š” ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ๋‹ค:

  • UI Layer์™€ ๋„๋ฉ”์ธ ๋กœ์ง ์‚ฌ์ด์— ์œ„์น˜ํ•œ ๊ฐ์ฒด (์˜ˆ: ApplicationService, Facade)
  • ์œ ์Šค์ผ€์ด์Šค๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด

Controller๋Š” ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ํ•ด์„ํ•˜๊ณ  ๊ทธ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋„๋ฉ”์ธ ๊ฐ์ฒด์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ , ์ฑ…์ž„์„ ๋„๋ฉ”์ธ ๊ฐ์ฒด๋กœ ์œ„์ž„ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋ฅผ ์œ ์ง€ํ•˜๊ณ , UI์™€ ๋„๋ฉ”์ธ ๊ณ„์ธต ์‚ฌ์ด์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ Controller๋Š” ๋‹จ์ผ ์ง„์ž…์  ์—ญํ• ์„ ํ•˜๋ฉฐ, ์‹œ์Šคํ…œ์˜ ์œ ์—ฐ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๋†’์ธ๋‹ค.

Indirection

๋‘ ๊ฐ์ฒด ๊ฐ„์˜ ์ง์ ‘์ ์ธ ์—ฐ๊ฒฐ์„ ํ”ผํ•˜๊ณ , ์ค‘๊ฐœ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•˜๋„๋ก ์ฑ…์ž„์„ ํ• ๋‹นํ•˜๋ผ.

Indirection ํŒจํ„ด์€ ๊ฐ์ฒด ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์œ ์—ฐ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•œ ์„ค๊ณ„ ์ „๋žต์ด๋‹ค.

์ด ํŒจํ„ด์„ ์ ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ์ด ์žˆ๋‹ค:

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

์˜ˆ๋ฅผ ๋“ค์–ด, ์„œ๋น„์Šค ๋ ˆ์ด์–ด๋‚˜ ์ด๋ฒคํŠธ ๋ฒ„์Šค, ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•œ ์˜์กด์„ฑ ์ฃผ์ž… ๋“ฑ์ด Indirection์˜ ๋Œ€ํ‘œ์ ์ธ ์‚ฌ๋ก€๋‹ค.

๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๊ฐ€ ๋„ˆ๋ฌด ์ง์ ‘์ ์ด๋ผ๋ฉด, ๊ทธ ์ค‘๊ฐ„์— ์ถ”์ƒํ™” ๊ณ„์ธต์ด๋‚˜ ๋ธŒ๋กœ์ปค ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋‘๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์ž.

Low coupling

๊ฐ์ฒด ๊ฐ„์˜ ์ „์ฒด์ ์ธ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ๊ฒŒ ์œ ์ง€๋˜๋„๋ก ์ฑ…์ž„์„ ํ• ๋‹นํ•˜๋ผ.

๊ฐ์ฒด๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ๋‹ค๋ฅธ ๊ฐ์ฒด์— ์˜์กดํ•˜๋ฉด ๋ณ€๊ฒฝ์— ๋งค์šฐ ์ทจ์•ฝํ•ด์ง„๋‹ค ๋ฐ˜๋Œ€๋กœ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์œผ๋ฉด ๊ฐ ๊ฐ์ฒด๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•  ์ˆ˜ ์žˆ๊ณ , ์ˆ˜์ •์ด ๋‹ค๋ฅธ ๊ณณ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ๋„ ์ค„์–ด๋“ ๋‹ค.

ํ˜„์žฌ์˜ ์ฑ…์ž„ ํ• ๋‹น์„ ๊ฒ€ํ† ํ•˜๊ฑฐ๋‚˜ ์—ฌ๋Ÿฌ ์„ค๊ณ„ ๋Œ€์•ˆ๋“ค์ด ์žˆ์„ ๋•Œ ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ์„ค๊ณ„๋ฅผ ์„ ํƒํ•˜๋ผ.

High cohesion

๋†’์€ ์‘์ง‘๋„๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ฑ…์ž„์„ ํ• ๋‹นํ•˜๋ผ.

๊ฐ์ฒด๊ฐ€ ํ•˜๋‚˜์˜ ์ฑ…์ž„์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•จ์œผ๋กœ์จ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

  • ํ•˜๋‚˜์˜ ๋ช…ํ™•ํ•œ ๋ชฉ์ ์„ ๊ฐ–๋Š”๋‹ค.
  • ๋‚ด๋ถ€ ๊ตฌ์„ฑ์š”์†Œ๋“ค์ด ์„œ๋กœ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ด€๋ จ๋˜์–ด ์žˆ๋‹ค.
  • ๋ณ€๊ฒฝ ์‚ฌ์œ ๊ฐ€ ๋ช…ํ™•ํ•ด์ง„๋‹ค.

๊ฐ์ฒด ํ•˜๋‚˜์— ์—ฌ๋Ÿฌ ์—ญํ• ์ด ์„ž์—ฌ ์žˆ๋‹ค๋ฉด, ์‘์ง‘๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด ํด๋ž˜์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜๊ฑฐ๋‚˜ ์ฑ…์ž„์„ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜๋ผ.

Polymorphism

ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์ •์˜ํ•˜๊ณ  ๊ฐ ํƒ€์ž…์— ๋‹คํ˜•์ ์œผ๋กœ ํ–‰๋™ํ•˜๋Š” ์ฑ…์ž„์„ ํ• ๋‹นํ•˜๋ผ.

์กฐ๊ฑด์— ๋”ฐ๋ฅธ ๋ณ€ํ™”๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ๊ธฐ๋ณธ ๋…ผ๋ฆฌ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์„ if ~ else ๋˜๋Š” Switch ~ case ๋“ฑ์˜ ์กฐ๊ฑด ๋…ผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์„ค๊ณ„ํ•œ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚œ ๊ฒฝ์šฐ ์กฐ๊ฑด ๋…ผ๋ฆฌ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค.

์ด๊ฒƒ์€ ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜์ •ํ•˜๊ธฐ ์–ด๋ ต๊ณ  ๋ณ€๊ฒฝ์— ์ทจ์•ฝํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค.

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

๋Œ€์‹  ๋‹คํ˜•์„ฑ์„ ์ด์šฉํ•ด ์ƒˆ๋กœ์šด ๋ณ€ํ™”๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์‰ฝ๊ฒŒ ํ™•์žฅํ•˜๋ผ๊ณ  ๊ถŒ๊ณ ํ•œ๋‹ค.

Protected variations

๋ณ€ํ™”๊ฐ€ ์˜ˆ์ƒ๋˜๋Š” ๋ถˆ์•ˆ์ •ํ•œ ์ง€์ ๋“ค์„ ์‹๋ณ„ํ•˜๊ณ  ๊ทธ ์ฃผ์œ„์— ์•ˆ์ •๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ˜•์„ฑํ•˜๋„๋ก ์ฑ…์ž„์„ ํ• ๋‹นํ•˜๋ผ.

์ฑ…์ž„ ํ• ๋‹น์˜ ๊ด€์ ์—์„œ ์บก์Аํ™”๋ฅผ ์„ค๋ช…ํ•œ ๊ฒƒ์œผ๋กœ, ์กฐ๊ฑด๋ฌธ ๋Œ€์‹  ๋‹คํ˜•์„ฑ์„ ํ™œ์šฉํ•˜์—ฌ ์œ ์—ฐํ•œ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ ๋‹ค.

โ€˜์„ค๊ณ„์—์„œ ๋ณ€ํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ๊ณ ๋ คํ•˜๊ณ  ๋ณ€ํ•˜๋Š” ๊ฐœ๋…์„ ์บก์Аํ™”ํ•˜๋ผโ€™๋ผ๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์˜ค๋žœ ๊ฒฉ์–ธ์€ Protected variations ํŒจํ„ด์˜ ๋ณธ์งˆ์„ ์ž˜ ์„ค๋ช…ํ•ด์ค€๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์บก์Аํ™”ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ๋ณ€๊ฒฝ์ด๋‹ค. ๋ณ€๊ฒฝ์ด ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๋ฉด ์บก์Аํ™”ํ•˜๋ผ.

Pure fabrication

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

Pure fabrication ํŒจํ„ด์€ ์‘์ง‘๋„๋‚˜ ๊ฒฐํ•ฉ๋„ ์ธก๋ฉด์—์„œ ๋” ๋‚˜์€ ์„ค๊ณ„๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด, ํ˜„์‹ค ์„ธ๊ณ„์˜ ๊ฐœ๋…๊ณผ ๋ฌด๊ด€ํ•˜์ง€๋งŒ ๋…ผ๋ฆฌ์ ์œผ๋กœ ํ•„์š”ํ•œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

์ฆ‰, ์ด ํŒจํ„ด์€ ์‘์ง‘๋„๋ฅผ ๋†’์ด๊ณ  ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•ด ๋„๋ฉ”์ธ ๋ชจ๋ธ ์™ธ์˜ ๊ฐ์ฒด๋ฅผ ๋„์ž…ํ•˜๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ๋Š” Repository, DAO, Service, Validator ๋“ฑ์ด ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฐ์ฒด๋Š” ํ˜„์‹ค ์„ธ๊ณ„์—์„œ ์ง์ ‘ ๋Œ€์‘๋˜๋Š” ๊ฐœ๋…์ด ์—†์ง€๋งŒ, ์†Œํ”„ํŠธ์›จ์–ด ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์ฑ…์ž„์„ ์ ์ ˆํžˆ ๋ถ„์‚ฐ์‹œํ‚ค๊ณ , ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐ ๋งค์šฐ ํšจ๊ณผ์ ์ด๋‹ค.

Pure fabrication ์„ ์ ์ ˆํžˆ ํ™œ์šฉํ•˜๋ฉด ์‹œ์Šคํ…œ์„ ๋” ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฌ์šด ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , ๋ชจ๋“ˆํ™” ์ˆ˜์ค€๋„ ๋†’์•„์ง„๋‹ค.