CodeGym/Java Course/๋ชจ๋“ˆ 3/์ข…์†์„ฑ ์—ญ์ „

์ข…์†์„ฑ ์—ญ์ „

์‚ฌ์šฉ ๊ฐ€๋Šฅ

9.1 ์ข…์†์„ฑ ์—ญ์ „

new Thread().start()์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ?๋ฅผ ํ†ตํ•ด ์ŠคํŠธ๋ฆผ์„ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค๊ณ  ๋งํ•œ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋งŒ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด์ œ ์ด ์•„์ด๋””์–ด๋ฅผ ๋”์šฑ ๋ฐœ์ „์‹œํ‚ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

  • ์ตœ์ƒ์œ„ ๋ชจ๋“ˆ์€ ํ•˜์œ„ ์ˆ˜์ค€ ๋ชจ๋“ˆ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ถ”์ƒํ™”๋Š” ์„ธ๋ถ€ ์‚ฌํ•ญ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๊ตฌํ˜„์€ ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

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

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

๋งค์šฐ ์ข‹์€ ์†”๋ฃจ์…˜์€ ํŒฉํ† ๋ฆฌ, ์„œ๋น„์Šค ๋กœ์ผ€์ดํ„ฐ, IoC ์ปจํ…Œ์ด๋„ˆ์™€ ๊ฐ™์€ ํŠน์ˆ˜ ๊ฐ์ฒด ๋ฐ ๋ชจ๋“ˆ ๋‚ด์—์„œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด ์ƒ์„ฑ์— ์ง‘์ค‘ํ•˜๋Š” ๋ฏธ์นœ ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค.

์–ด๋–ค ์˜๋ฏธ์—์„œ ๊ทธ๋Ÿฌํ•œ ๊ฒฐ์ •์€ "์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์ด ๋งŽ์€ ๋Œ€์•ˆ์„ ์ง€์›ํ•ด์•ผ ํ•  ๋•Œ๋งˆ๋‹ค ์ „์ฒด ๋ชฉ๋ก์ด ์‹œ์Šคํ…œ์˜ ํ•œ ๋ชจ๋“ˆ์—๋งŒ ์•Œ๋ ค์ ธ์•ผ ํ•œ๋‹ค"๋Š” ๋‹จ์ผ ์„ ํƒ ์›์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค .

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

์˜ˆ 1

. new ArrayList _ List.new()_

์˜ˆ๋ฅผ ๋“ค์–ด ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ ๊ฐ์ฒด์— ๋Œ€ํ•œ ํ˜ธ์ถœ์ด ์žˆ์Œ์„ ํ™•์ธํ•˜๊ณ  ๊ฑฐ๊ธฐ์— ์Šค๋ ˆ๋“œ ์•ˆ์ „ ๊ตฌํ˜„์„ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” ์‹œํŠธ ์ค‘๊ฐ„์— ์‚ฝ์ž…์ด ๋„ˆ๋ฌด ๋งŽ์œผ๋ฉด LinkedList๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.

์˜ˆ 2

์˜ˆ๋ฅผ ๋“ค์–ด ์ด๊ฒƒ์€ ์ •๋ ฌ์—์„œ ์ด๋ฏธ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜์„ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•ด ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ž‘์„ฑํ•œ ๊ฒƒ์ด ์–ธ์ œ์ž…๋‹ˆ๊นŒ? ๋Œ€์‹  ์ด์ œ ๋ชจ๋‘๊ฐ€ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉ Collections.sort()ํ•˜๊ณ  ์ปฌ๋ ‰์…˜์˜ ์š”์†Œ๋Š” Comparable ์ธํ„ฐํŽ˜์ด์Šค(comparable)๋ฅผ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

sort()10๊ฐœ ๋ฏธ๋งŒ์˜ ์š”์†Œ ์ปฌ๋ ‰์…˜์„ ๋ฉ”์„œ๋“œ์— ์ „๋‹ฌํ•˜๋ฉด ํ€ต ์ •๋ ฌ์ด ์•„๋‹Œ ๋ฒ„๋ธ” ์ •๋ ฌ(๋ฒ„๋ธ” ์ •๋ ฌ)๋กœ ์ •๋ ฌํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค .

์˜ˆ 3

์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ด๋ฏธ ๋ฌธ์ž์—ด์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด๊ณ  ์žˆ์œผ๋ฉฐ ์ฝ”๋“œ๋ฅผ StringBuilder.append().

9.2 ์‹ค์ œ ์˜์กด์„ฑ ์—ญ์ „

์ด์ œ ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šด ์ ์€ ์ด๋ก ๊ณผ ์‹ค์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ƒ๊ฐํ•ด ๋ด…์‹œ๋‹ค. ๋ชจ๋“ˆ์ด ์ข…์†์„ฑ ์—ญ์ „์„ ์œ„๋ฐ˜ํ•˜์ง€ ์•Š๊ณ  "์ข…์†์„ฑ"์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ƒ์„ฑํ•˜๊ณ  ์ˆ˜์‹ ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ๋ชจ๋“ˆ์„ ์„ค๊ณ„ํ•  ๋•Œ ์Šค์Šค๋กœ ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ชจ๋“ˆ์ด ํ•˜๋Š” ์ผ, ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ
  • ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ชจ๋“ˆ์€ ํ™˜๊ฒฝ์—์„œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๊ฐ์ฒด/๋ชจ๋“ˆ์ด ๋ฌด์—‡์ธ์ง€;
  • ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋Š” ๊ทธ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ์–ป์„ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

์ข…์†์„ฑ ์—ญ์ „์˜ ์›์น™์„ ์ค€์ˆ˜ํ•˜๋ ค๋ฉด ๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์™ธ๋ถ€ ๊ฐ์ฒด์™€ ํ•ด๋‹น ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ•์„ ํ™•์‹คํžˆ ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ชจ๋“ˆ ์ž์ฒด๊ฐ€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“ˆ์€ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ฐœ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • ๋ชจ๋“ˆ์€ ๊ฐœ์ฒด๊ฐ€ ์–ด๋””์—์„œ ์™”๋Š”์ง€ ์ „ํ˜€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

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

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

๊ด€๋ จ ๊ฐ์ฒด์˜ ๊ทธ๋ฃน ๋˜๋Š” ํŒจ๋ฐ€๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ Factory Method ๋Œ€์‹  Abstract factory๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค .

9.3 ์„œ๋น„์Šค ๋กœ์ผ€์ดํ„ฐ ์‚ฌ์šฉ

๋ชจ๋“ˆ์€ ์ด๋ฏธ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์—๋Š” ๋ชจ๋“ˆ์ด ๊ฐœ์ฒด๋ฅผ "๋„ฃ๊ณ " ์ €์žฅ์†Œ์—์„œ ๊ฐœ์ฒด๋ฅผ "๊ฐ€์ ธ์˜ฌ" ์ˆ˜ ์žˆ๋Š” ์ผ๋ถ€ ๊ฐœ์ฒด ์ €์žฅ์†Œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

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

ํŒฉํ† ๋ฆฌ์™€์˜ ์ฃผ์š” ์ฐจ์ด์ ์€ Service Locator๊ฐ€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ์ด๋ฏธ ์ธ์Šคํ„ด์Šคํ™”๋œ ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋˜๋Š” ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์œ„์น˜/๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ์ฒซ ๋ฒˆ์งธ ํ˜ธ์ถœ์—์„œ ํ•œ ๋ฒˆ๋งŒ). ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ํŒฉํ† ๋ฆฌ๋Š” ์™„์ „ํ•œ ์†Œ์œ ๊ถŒ์„ ๊ฐ–๊ณ  ์›ํ•˜๋Š” ๋Œ€๋กœ ๋ฌด์—‡์ด๋“  ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ค‘์š” ! ์„œ๋น„์Šค ๋กœ์ผ€์ดํ„ฐ๋Š” ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๋™์ผํ•œ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค . ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ Service Locator์—์„œ ๋ฐœ๊ธ‰ํ•œ ๊ฐœ์ฒด์— ๋งค์šฐ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค ๋กœ์ผ€์ดํ„ฐ์˜ ๊ฐœ์ฒด๋Š” ๊ตฌ์„ฑ ํŒŒ์ผ์„ ํ†ตํ•ด ์ง์ ‘ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‹ค์ œ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ํŽธ๋ฆฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Service Locator ์ž์ฒด๋Š” ์ •์  ๋ฉ”์†Œ๋“œ ์„ธํŠธ, ์‹ฑ๊ธ€ํ†ค ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๋Š” ์ •์  ํด๋ž˜์Šค์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ƒ์„ฑ์ž ๋˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ํด๋ž˜์Šค๋กœ ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Service Locator๋Š” ๋•Œ๋•Œ๋กœ ์•ˆํ‹ฐ ํŒจํ„ด์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋ฉฐ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์•”์‹œ์  ์—ฐ๊ฒฐ์„ ์ƒ์„ฑํ•˜๊ณ  ์ข‹์€ ๋””์ž์ธ์˜ ๋ชจ์–‘๋งŒ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค). Mark Seaman์—์„œ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

9.4 ์˜์กด์„ฑ ์ฃผ์ž…

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

์ด๊ฒƒ์ด ๋ฐ”๋กœ ์˜์กด์„ฑ ์ฃผ์ž… ์ž…๋‹ˆ๋‹ค . ์ผ๋ฐ˜์ ์œผ๋กœ ํ•„์š”ํ•œ ์ข…์†์„ฑ์€ ์ƒ์„ฑ์ž ๋งค๊ฐœ ๋ณ€์ˆ˜(์ƒ์„ฑ์ž ์ฃผ์ž…) ๋˜๋Š” ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ(Setter ์ฃผ์ž…)๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ข…์†์„ฑ ์ƒ์„ฑ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฐ˜๋Œ€๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ ์ž์ฒด ๋Œ€์‹  ์ข…์†์„ฑ ์ƒ์„ฑ์€ ์™ธ๋ถ€์˜ ๋ˆ„๊ตฐ๊ฐ€์— ์˜ํ•ด ์ œ์–ด๋ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด์˜ ํ™œ์„ฑ ์ด๋ฏธ ํ„ฐ์˜ ๋ชจ๋“ˆ์€ ์ˆ˜๋™์ ์ด๋ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑํ•˜๋Š” ์‚ฌ๋žŒ์ด ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๊ทธ๋ฅผ ์œ„ํ•ด ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐฉํ–ฅ ์ „ํ™˜์„ ์ œ์–ด ์—ญ์ „ ๋˜๋Š” ํ• ๋ฆฌ์šฐ๋“œ ์›์น™ ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค . "์ „ํ™”ํ•˜์ง€ ๋งˆ์„ธ์š”. ์ „ํ™”๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค."

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

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

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

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“ˆ ๊ฐ„์˜ ์ข…์†์„ฑ์„ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ(Dependency Inversion) + ์ด๋Ÿฌํ•œ ์ข…์†์„ฑ์˜ ์˜ฌ๋ฐ”๋ฅธ ์ƒ์„ฑ ๋ฐ ์ฃผ์ž…(์ฃผ๋กœ ์ข…์†์„ฑ ์ฃผ์ž…)์ด ๋ถ„๋ฆฌ๋ฅผ ์œ„ํ•œ ํ•ต์‹ฌ ๊ธฐ์ˆ  ์ด๋ผ๊ณ  ํ•ด๋„ ๊ณผ์–ธ์ด ์•„๋‹™๋‹ˆ๋‹ค .

๊ทธ๊ฒƒ๋“ค์€ ์ฝ”๋“œ์˜ ๋Š์Šจํ•œ ๊ฒฐํ•ฉ, ์œ ์—ฐ์„ฑ, ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์ €ํ•ญ, ์žฌ์‚ฌ์šฉ ๋ฐ ๋‹ค๋ฅธ ๋ชจ๋“  ๊ธฐ์ˆ ์ด ๊ฑฐ์˜ ์˜๋ฏธ๊ฐ€ ์—†๋Š” ํ† ๋Œ€ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋Š์Šจํ•œ ๊ฒฐํ•ฉ๊ณผ ์ข‹์€ ์•„ํ‚คํ…์ฒ˜์˜ ๊ธฐ์ดˆ์ž…๋‹ˆ๋‹ค.

Inversion of Control์˜ ์›์น™(Dependency Injection ๋ฐ Service Locator์™€ ํ•จ๊ป˜)์€ Martin Fowler๊ฐ€ ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ์˜ ๋‘ ๊ธฐ์‚ฌ "Inversion of Control Containers and the Dependency Injection pattern" ๋ฐ "Inversion of Control" ์— ๋Œ€ํ•œ ๋ฒˆ์—ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค .

์ฝ”๋ฉ˜ํŠธ
  • ์ธ๊ธฐ
  • ์‹ ๊ทœ
  • ์ด์ „
์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‚จ๊ธฐ๋ ค๋ฉด ๋กœ๊ทธ์ธ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
์ด ํŽ˜์ด์ง€์—๋Š” ์•„์ง ์ฝ”๋ฉ˜ํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค