[Book] ํด๋ฆฐ์ฝ”๋“œ - 11์žฅ ์‹œ์Šคํ…œ

2021. 2. 12. 13:14ยท๐Ÿ“ Book/โœ Clean Code

11์žฅ ์‹œ์Šคํ…œ

๋„์‹œ๋ฅผ ์„ธ์šด๋‹ค๋ฉด?

์˜จ๊ฐ– ์„ธ์„ธํ•œ ์‚ฌํ•ญ์„ ํ˜ผ์ž์„œ ์ง์ ‘ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์„๊นŒ? ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
๋„์‹œ์—๋Š” ํฐ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๋Š” ์‚ฌ๋žŒ๋“ค๋„ ์žˆ์œผ๋ฉฐ ์ˆ˜๋„, ์ „๋ ฅ, ๊ตํ†ต ๋“ฑ ์ž‘์€ ์‚ฌํ•ญ์— ์ง‘์ค‘ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค๋„ ์žˆ๋‹ค.

๋„์‹œ๊ฐ€ ๋Œ์•„๊ฐ€๋Š” ๋˜ ๋‹ค๋ฅธ ์ด์œ ๋Š” ์ ์ ˆํ•œ ์ถ”์ƒํ™”์™€ ๋ชจ๋“ˆํ™” ๋•Œ๋ฌธ์ด๋‹ค.
๊ทธ๋ž˜์„œ ํฐ ๊ทธ๋ฆผ์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ• ์ง€๋ผ๋„ ๊ฐœ์ธ๊ณผ ๊ฐœ์ธ์ด ๊ด€๋ฆฌํ•˜๋Š” ๊ตฌ์„ฑ์š”์†Œ๋Š” ํšจ์œจ์ ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.

ํ”ํžˆ ์†Œํ”„ํŠธ์›จ์–ด ํŒ€๋„ ๋„์‹œ์ฒ˜๋Ÿผ ๊ตฌ์„ฑํ•œ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ๋ง‰์ƒ ์ œ์ž‘ํ•˜๋Š” ์‹œ์Šคํ…œ์€ ๋น„์Šทํ•œ ์ˆ˜์ค€์œผ๋กœ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ฑฐ๋‚˜ ์ถ”์ƒํ™”๋ฅผ ์ด๋ค„๋‚ด์ง€ ๋ชปํ•œ๋‹ค.

๊นจ๋—ํ•œ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ๋‚ฎ์€ ์ถ”์ƒํ™” ์ˆ˜์ค€์—์„œ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค.
์ด ์žฅ์—์„œ๋Š” ๋†’์€ ์ถ”์ƒํ™” ์ˆ˜์ค€์ธ ์‹œ์Šคํ…œ์—์„œ๋„ ๊นจ๋—ํ•จ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณธ๋‹ค.

 

1. ์‹œ์Šคํ…œ ์ œ์ž‘๊ณผ ์‹œ์Šคํ…œ ์‚ฌ์šฉ์„ ๋ถ„๋ฆฌํ•˜๋ผ

์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์€ ์ค€๋น„ ๊ณผ์ •๊ณผ ๋Ÿฐํƒ€์ž„ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

  • ์ค€๋น„ ๊ณผ์ •: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ์ฒด๋ฅผ ์ œ์ž‘ํ•˜๊ณ  ์˜์กด์„ฑ์„ ์„œ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ณผ์ •
  • ๋Ÿฐํƒ€์ž„ ๋กœ์ง: ์ค€๋น„ ๊ณผ์ • ์ดํ›„์— ์ด์–ด์ง€๋Š” ๊ณผ์ •

 

์‹œ์ž‘ ๋‹จ๊ณ„๋Š” ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ’€์–ด์•ผ ํ•  ๊ด€์‹ฌ์‚ฌ๋‹ค.

๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋Š” ์šฐ๋ฆฌ ๋ถ„์•ผ์—์„œ ๊ฐ€์žฅ ์˜ค๋ž˜๋˜๊ณ  ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์„ค๊ณ„ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜๋‹ค.

 

๋ถˆํ–‰ํžˆ๋„ ๋Œ€๋‹ค์ˆ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์‹œ์ž‘ ๋‹จ๊ณ„๋ผ๋Š” ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ค€๋น„ ๊ณผ์ • ์ฝ”๋“œ๋ฅผ ์ฃผ๋จน๊ตฌ๊ตฌ์‹์œผ๋กœ ๊ตฌํ˜„ํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋Ÿฐํƒ€์ž„ ๋กœ์ง๊ณผ ๋งˆ๊ตฌ ๋’ค์„ž๋Š”๋‹ค.

 

public Service getService() {
    if (service == null)
        service = new MyServiceImpl(...); // ๋ชจ๋“  ์ƒํ™ฉ์— ์ ํ•ฉํ•œ ๊ธฐ๋ณธ๊ฐ’์ผ๊นŒ?
    return service;
}

 

์ด๊ฒƒ์ด ์ดˆ๊ธฐํ™” ์ง€์—ฐ ํ˜น์€ ๊ณ„์‚ฐ ์ง€์—ฐ์ด๋ผ๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

  • ์‹ค์ œ๋กœ ํ•„์š”ํ•  ๋•Œ๊นŒ์ง€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ถˆํ•„์š”ํ•œ ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•˜๋Š” ์‹œ๊ฐ„์ด ๋นจ๋ผ์ง„๋‹ค.
  • ์–ด๋–ค ๊ฒฝ์šฐ์—๋„ null ํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

๋งŽ์€ ์žฅ์ ์ด ์žˆ์ง€๋งŒ ๋‹จ์  ๋˜ํ•œ ์กด์žฌํ•œ๋‹ค.

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

 

์ดˆ๊ธฐํ™” ์ง€์—ฐ ๊ธฐ๋ฒ•์„ ์ˆ˜์‹œ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“ˆ์„ฑ์ด ์ €์กฐํ•ด์ง„๋‹ค.

์ฒด๊ณ„์ ์ด๊ณ  ํƒ„ํƒ„ํ•œ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์˜์กด์„ฑ์„ ์—ฐ๊ฒฐํ•  ๋•Œ ๋ชจ๋“ˆ์„ฑ์„ ๊นจ์„œ๋Š” ์•ˆ ๋œ๋‹ค.

์„ค์ • ๋…ผ๋ฆฌ๋Š” ์ผ๋ฐ˜ ์‹คํ–‰ ๋…ผ๋ฆฌ์™€ ๋ถ„๋ฆฌํ•ด์•ผ ๋ชจ๋“ˆ์„ฑ์ด ๋†’์•„์ง„๋‹ค.

 

1) Main ๋ถ„๋ฆฌ

main()์—์„œ ์ƒ์„ฑ ๋ถ„๋ฆฌ

์ƒ์„ฑ๊ณผ ๊ด€๋ จํ•œ ์ฝ”๋“œ๋Š” ๋ชจ๋‘ main์ด๋‚˜ main์ด ํ˜ธ์ถœํ•˜๋Š” ๋ชจ๋“ˆ๋กœ ์˜ฎ๊ธฐ๊ณ 

๋‚˜๋จธ์ง€ ์‹œ์Šคํ…œ์€ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๊ณ  ๋ชจ๋“  ์˜์กด์„ฑ์ด ์—ฐ๊ฒฐ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

  • main ํ•จ์ˆ˜์—์„œ ์‹œ์Šคํ…œ์— ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ์ด๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋„˜๊ธด๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ณผ์ •์„ ์ „ํ˜€ ๋ชจ๋ฅด๊ณ  ๊ทธ์ € ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ๋ฟ์ด๋‹ค.

 

2) ํŒฉํ† ๋ฆฌ

ํŒฉํ† ๋ฆฌ๋กœ ์ƒ์„ฑ ๋ถ„๋ฆฌ

๋•Œ๋กœ๋Š” ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์‹œ์ ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ฒฐ์ •ํ•  ํ•„์š”๋„ ์ƒ๊ธด๋‹ค.

์ด๋•Œ๋Š” ์ถ”์ƒ ํŒฉํ† ๋ฆฌ(Abstract Factory) ํŒจํ„ด์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • ์˜ˆ๋ฅผ ๋“ค์–ด ์ฃผ๋ฌธ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ์—์„œ LineItem ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด Order์— ์ถ”๊ฐ€ํ•  ๋•Œ
  • LineItem์„ ์ƒ์„ฑํ•˜๋Š” ์‹œ์ ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ฒฐ์ •ํ•˜์ง€๋งŒ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋Š” ๋ชจ๋ฅธ๋‹ค.

 

3) ์˜์กด์„ฑ ์ฃผ์ž…

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

  • ๊ฐ์ฒด๋Š” ์˜์กด์„ฑ ์ž์ฒด๋ฅผ ์ธ์Šคํ„ด์Šค๋กœ ๋งŒ๋“œ๋Š” ์ฑ…์ž„์„ ์ง€์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ๋งก๋Š”๋‹ค. (๋‹จ์ผ ์ฑ…์ž„ ์›์น™)
  • ๋Œ€์‹ ์— ์ด๋Ÿฐ ์ฑ…์ž„์„ ๋‹ค๋ฅธ ์ „๋‹ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ๋„˜๊ฒจ์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ์ œ์–ด๋ฅผ ์—ญ์ „ํ•œ๋‹ค.
  • ์ดˆ๊ธฐ ์„ค์ •์€ ์‹œ์Šคํ…œ ์ „์ฒด์—์„œ ํ•„์š”ํ•˜๋ฏ€๋กœ ๋Œ€๊ฐœ ์ฑ…์ž„์งˆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ main ๋ฃจํ‹ด์ด๋‚˜ ํŠน์ˆ˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

2. ํ™•์žฅ

์ฒ˜์Œ๋ถ€ํ„ฐ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฏฟ์Œ์€ ๋ฏธ์‹ ์ด๋‹ค.

์˜ค๋Š˜ ์ฃผ์–ด์ง„ ์‚ฌ์šฉ์ž ์Šคํ† ๋ฆฌ์— ๋งž์ถฐ ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•˜๊ณ  ๋‚ด์ผ์€ ์ƒˆ๋กœ์šด ์Šคํ† ๋ฆฌ์— ๋งž์ถฐ ์‹œ์Šคํ…œ์„ ์กฐ์ •ํ•˜๊ณ  ํ™•์žฅํ•˜๋ฉด ๋œ๋‹ค.

 

์ด๊ฒƒ์ด ๋ฐ˜๋ณต์ ์ด๊ณ  ์ ์ง„์ ์ธ ์• ์ž์ผ ๋ฐฉ์‹์˜ ํ•ต์‹ฌ์ด๋‹ค.

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

 

ํ•˜์ง€๋งŒ ์‹œ์Šคํ…œ ์ˆ˜์ค€์—์„œ ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ๊ณผ ๋ฌผ๋ฆฌ์ ์ธ ์‹œ์Šคํ…œ์€ ๋‹ค๋ฅด๋‹ค.

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

 

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

์ฝ”๋“œ ์ˆ˜์ค€์—์„œ ์•„ํ‚คํ…์ฒ˜ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ง„์ •ํ•œ ํ…Œ์ŠคํŠธ ์ฃผ๋„ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์ถ•์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

๊ทธ๋•Œ๊ทธ๋•Œ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์„ ์ฑ„ํƒํ•ด ๋‹จ์ˆœํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋ณต์žกํ•œ ์•„ํ‚คํ…์ฒ˜๋กœ ํ‚ค์›Œ๊ฐˆ ์ˆ˜๋„ ์žˆ๋‹ค.

 

์„ธ๊ณ„ ์ตœ๋Œ€ ์›น ์‚ฌ์ดํŠธ๋“ค์€ ๊ณ ๋„์˜ ์ž๋ฃŒ ์บ์‹ฑ, ๋ณด์•ˆ, ๊ฐ€์ƒํ™” ๋“ฑ์„ ์ด์šฉํ•ด ์•„์ฃผ ๋†’์€ ๊ฐ€์šฉ์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ–ˆ๋‹ค.

์„ค๊ณ„๊ฐ€ ์ตœ๋Œ€ํ•œ ๋ถ„๋ฆฌ๋˜์–ด ๊ฐ ์ถ”์ƒํ™” ์ˆ˜์ค€๊ณผ ๋ฒ”์œ„์—์„œ ์ฝ”๋“œ๊ฐ€ ์ ๋‹นํžˆ ๋‹จ์ˆœํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๐Ÿ“ Book/โœ Clean Code' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Book] ํด๋ฆฐ์ฝ”๋“œ - 13์žฅ ๋™์‹œ์„ฑ
  • [Book] ํด๋ฆฐ์ฝ”๋“œ - 12์žฅ ์ฐฝ๋ฐœ์„ฑ
  • [Book] ํด๋ฆฐ์ฝ”๋“œ - 10์žฅ ํด๋ž˜์Šค
  • [Book] ํด๋ฆฐ์ฝ”๋“œ - 9์žฅ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
Blxxming
Blxxming
CS ์ง€์‹๊ณผ ๊ณต๋ถ€ํ•˜๋‹ค ๋ฐฐ์šด ๊ฒƒ, ๊ฒฝํ—˜ํ•œ ๊ฒƒ ๋“ฑ์„ ๊ธฐ๋กํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
  • Blxxming
    ๐Ÿ’ก๋ฒˆ๋œฉ๐Ÿ’ก
    Blxxming
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • ๊ณต์ง€์‚ฌํ•ญ

    • Tech Interview
    • ๐Ÿ“š Tech (246)
      • ๐Ÿ“ Computer Science (96)
        • โœ OS (12)
        • โœ Network & Web (10)
        • โœ Database (11)
        • โœ Data Structure (6)
        • โœ Algorithm (40)
        • โœ Design Pattern (9)
        • โœ Cloud Computing (3)
        • โœ (5)
      • ๐Ÿ“ Language (73)
        • โœ Language (6)
        • โœ C & C++ (11)
        • โœ C# (19)
        • โœ JAVA (37)
      • ๐Ÿ“ Game (43)
        • โœ Computer Graphics (2)
        • โœ Unity (14)
        • โœ Unreal (26)
        • โœ (1)
      • ๐Ÿ“ Book (34)
        • โœ Effective (3)
        • โœ Game Server (16)
        • โœ Clean Code (14)
        • โœ (1)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
Blxxming
[Book] ํด๋ฆฐ์ฝ”๋“œ - 11์žฅ ์‹œ์Šคํ…œ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”