CleanCode TIL (2022.02.16)

Henry Choยท2022๋…„ 2์›” 16์ผ
0

๋…ธ๊ฐœ๋ถ

๋ชฉ๋ก ๋ณด๊ธฐ
22/31

DAY 24

๐Ÿ”–ย ์˜ค๋Š˜ ์ฝ์€ ๋ฒ”์œ„ : 11. ์‹œ์Šคํ…œ(205~214p)


๐Ÿค“ย ์ฑ…์—์„œ ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ

์ˆœ์ˆ˜ ์ž๋ฐ” AOP ํ”„๋ ˆ์ž„์›Œํฌ

  • ์ˆœ์ˆ˜ ์ž๋ฐ” ๊ด€์  ๊ตฌํ˜„ํ•˜๋Š” ์Šคํ”„๋ง AOP, JBoss AOP ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ํ”„๋ก์‹œ ์‚ฌ์šฉ
  • ์Šคํ”„๋ง์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋…ผ๋ฆฌ๋ฅผ POJO๋กœ ๊ตฌํ˜„
    • ๋„๋ฉ”์ธ์— ์ดˆ์ ์„ ๋งž์ถค
    • ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ”„๋ ˆ์ž„์›Œํฌ์— ์˜์กดํ•˜์ง€ ์•Š์Œ
    • ํ…Œ์ŠคํŠธ๊ฐ€ ์‰ฝ๊ณ  ๊ฐ„๋‹จ
    • ๋ฏธ๋ž˜ ์Šคํ† ๋ฆฌ์— ๋งž์ถฐ ์ฝ”๋“œ๋ฅผ ๋ณด์ˆ˜ํ•˜๊ณ  ๊ฐœ์„ ํ•˜๊ธฐ ํŽธํ•จ
    • ๊ฐ Bean์€ ๋งˆํŠธ๋ฃŒ์‰ฌ์นด ์ฒ˜๋Ÿผ ์ค‘์ฒฉ์œผ๋กœ ๊ฐ์‹ผ๋‹ค
      • Bank โ†’ DAO(์ ‘๊ทผ์ž๊ฐ์ฒด) โ†’ JDBC ๋“œ๋ผ์ด๋ฒ„
    • ํด๋ผ์ด์–ธํŠธ๋Š” Bank ๊ฐ์ฒด ๋‚ด getAccount()๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๊ณ  ๋ฏฟ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” DECORATOR ๊ฐ์ฒด ์ง‘ํ•ฉ์˜ ๊ฐ€์žฅ ์™ธ๊ณฝ๊ณผ ํ†ต์‹ 
    • XML์ด ์žฅํ™ฉํ•˜๊ณ  ์ฝ๊ธฐ ์–ด๋ ต์ง€๋งŒ ๋ช…์‹œ๋œ โ€˜์ •์ฑ…โ€™ ์ด ํ”„๋ก์‹œ๋‚˜ ๊ด€์  ๋…ผ๋ฆฌ๋ณด๋‹ค ๋‹จ์ˆœ

AspectJ ๊ด€์ 

  • ๊ด€์‹ฌ์‚ฌ๋ฅผ ๊ด€์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ
  • ์–ธ์–ด ์ฐจ์›์—์„œ ๊ด€์ ์„ ๋ชจ๋“ˆํ™” ๊ตฌ์„ฑ์œผ๋กœ ์ง€์›
  • ์ƒˆ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋ฌธ๋ฒ•๊ณ  ์‚ฌ์šฉ๋ฒ•์„ ์ตํ˜€์•ผ ํ•˜๋Š” ๋‹จ์ ์€ ์žˆ์Œ
  • AspectJ annotation form ์€ ์ˆœ์ˆ˜ ์ž๋ฐ” ์ฝ”๋“œ์— ์ž๋ฐ” 5 annotation์„ ์‚ฌ์šฉํ•ด ๊ด€์ ์„ ์ •์˜

ํ…Œ์ŠคํŠธ ์ฃผ๋„ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์ถ•

  • APP ๋„๋ฉ”์ธ ๋…ผ๋ฆฌ๋ฅผ POJO๋กœ ์ž‘์„ฑ โ†’ ์ฝ”๋“œ ์ˆ˜์ค€์—์„œ ์•„ํ‚คํ…์ฒ˜ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ โ†’ ํ…Œ์ŠคํŠธ ์ฃผ๋„ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์ถ• ๊ฐ€๋Šฅ
  • ๊ฑด์ถ•๊ฐ€๋Š” BigDesignUpFront ๋ฅผ ์ถ”๊ตฌํ•˜์ง€๋งŒ ์†Œํ”„ํŠธ์›จ์–ด๋Š” ๋‹จ์ˆœํ•˜๊ณ  ๋ฉ‹์ง€๊ฒŒ ๋ถ„๋ฆฌ๋œ ์•„ํ‚คํ…์ฒ˜๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•ด ๊ฒฐ๊ณผ๋ฌผ์„ ์žฌ๋นจ๋ฆฌ ์ถœ์‹œํ•œ ํ›„, ๊ธฐ๋ฐ˜์„ ํ™•์žฅํ•ด ๋‚˜๊ฐ€๋„ ๊ดœ์ฐฎ๋‹ค

์˜์‚ฌ ๊ฒฐ์ •์„ ์ตœ์ ํ™”ํ•˜๋ผ

  • ๊ฐ ๋ถ„๋ฆฌ๋œ ๊ด€์‹ฌ์‚ฌ์™€ ๋ชจ๋“ˆ์— ๋Œ€ํ•ด ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์‚ฌ๋žŒ์—๊ฒŒ ์ฑ…์ž„์„ ๋งก๊ธฐ๋ผ
  • ๊ฐ€๋Šฅํ•œ ๋งˆ์ง€๋ง‰๊นŒ์ง€ ๊ฒฐ์ •์„ ๋ฏธ๋ค„์„œ ์ •๋ณด๋ฅผ ๋ชจ์•„ ์ตœ์„ ์˜ ๊ฒฐ์ •์„ ๋‚ด๋ ค๋ผ

๋ช…๋ฐฑํ•œ ๊ฐ€์น˜๊ฐ€ ์žˆ์„ ๋•Œ ํ‘œ์ค€์„ ํ˜„๋ช…ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ผ

  • ๋•Œ๋กœ๋Š” ํ‘œ์ค€์„ ๋งŒ๋“œ๋Š” ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ ค ์—…๊ณ„๊ฐ€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ๋ชปํ•œ๋‹ค

์‹œ์Šคํ…œ์€ ๋„๋ฉ”์ธ ํŠนํ™” ์–ธ์–ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค

  • Domain-Specific Langauge: ๊ฐ„๋‹จํ•œ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋‚˜ ํ‘œ์ค€์–ธ์–ด๋กœ ๊ตฌํ˜„ํ•œ API
  • ์ข‹์€ DSL์€ ๋„๋ฉ”์ธ ๊ฐœ๋…๊ณผ ์ฝ”๋“œ ์‚ฌ์ด์˜ ์˜์‚ฌ์†Œํ†ต ๊ฐ„๊ทน์„ ์ค„์—ฌ์ค€๋‹ค

๊ฒฐ๋ก 

  • ๋ชจ๋“  ์ถ”์ƒํ™” ๋‹จ๊ณ„์—์„œ ์˜๋„๋Š” ๋ช…ํ™•ํžˆ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค
  • POJO๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๊ด€์ ์œผ๋กœ ๊ฐ ๊ตฌํ˜„ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.
  • ์‹œ์Šคํ…œ์ด๊ฑด ๊ฐœ๋ณ„ ๋ชจ๋“ˆ์ด๊ฑด ๋Œ์•„๊ฐ€๋Š” ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ์ˆ˜๋‹จ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค

๐Ÿค”ย ๋– ์˜ค๋ฅด๋Š” ์ƒ๊ฐ

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

๐Ÿ”Žย ์งˆ๋ฌธ

๐Ÿ“ย ์†Œ๊ฐ 3์ค„ ์š”์•ฝ

  • ๊ฑด์ถ•๊ฐ€๋Š” BigDesignUpFront ๋ฅผ ์ถ”๊ตฌํ•˜์ง€๋งŒ ์†Œํ”„ํŠธ์›จ์–ด๋Š” ๋‹จ์ˆœํ•˜๊ณ  ๋ฉ‹์ง€๊ฒŒ ๋ถ„๋ฆฌ๋œ ์•„ํ‚คํ…์ฒ˜๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•ด ๊ฒฐ๊ณผ๋ฌผ์„ ์žฌ๋นจ๋ฆฌ ์ถœ์‹œํ•œ ํ›„, ๊ธฐ๋ฐ˜์„ ํ™•์žฅํ•ด ๋‚˜๊ฐ€๋„ ๊ดœ์ฐฎ๋‹ค
  • POJO๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๊ด€์ ์œผ๋กœ ๊ฐ ๊ตฌํ˜„ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.
  • ์‹œ์Šคํ…œ์ด๊ฑด ๊ฐœ๋ณ„ ๋ชจ๋“ˆ์ด๊ฑด ๋Œ์•„๊ฐ€๋Š” ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ์ˆ˜๋‹จ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค
profile
Full stack tech visionary

0๊ฐœ์˜ ๋Œ“๊ธ€