0. ์Šคํ„ฐ๋”” ์ง„ํ–‰

ํŒ€์›๋“ค๊ณผ ์ผ์ฃผ์ผ์— 1~2๋ฒˆ ์ •๋„ ๋…ผ์˜ํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ๊ณผ ์ƒ๊ฐ์„ ์ •๋ฆฌํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค.

์Šคํ„ฐ๋””๋Š” 1์‹œ๊ฐ„์„ ๋„˜๊ธฐ์ง€ ์•Š์œผ๋ ค๊ณ  ํ•˜์˜€์œผ๋ฉฐ ๊ฐ์ž ์ค€๋น„ํ•œ ๋‚ด์šฉ๋“ค์„ ๊ฐ€์ง€๊ณ  ์–˜๊ธฐ๋ฅผ ๋‚˜๋ˆ„๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•˜์˜€๋‹ค.

1. ์ผ„ํŠธ๋ฐฑ ๊ตฌํ˜„ ํŒจํ„ด์„ ์ฝ๊ธฐ ์ „์—

๊ทธ๋™์•ˆ ์ฝ”๋”ฉ์„ ํ•˜๋ฉด์„œ ์ถ”ํ›„ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊ณ ๋ คํ•˜๊ฑฐ๋‚˜ ๋ณ€ํ™” ๋น„์šฉ์„ ๊ณ ๋ คํ•˜๋ฉด์„œ ์ง  ์ ์ด ํฌ๊ฒŒ ์—†์—ˆ๋‹ค.

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

 

๊ทธ๋Ÿผ์—๋„ ํ‰์†Œ์— ์ž๋ฐ”๋‚˜ ๊ฐ์ฒด ์ง€ํ–ฅ์— ๋Œ€ํ•œ ์ง€์‹์„ ์ค‘์š”์‹œ ํ–ˆ์„๋ฟ ์ฝ”๋”ฉ์„ ํ•˜๋‹ค๊ฐ€ ํ•„์š”ํ•œ ํŒจํ„ด์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•ด๋ณด๊ฑฐ๋‚˜ ๋”ฐ๋กœ ์ฐพ์•„์„œ ๊ณต๋ถ€ํ•  ์ƒ๊ฐ์€ ์—†์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

 

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

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

2. ์ฝ๊ณ ๋‚˜์„œ ๋Š๋‚€ ์ 

์ฑ…์˜ ๋„์ž…๋ถ€๋ถ€ํ„ฐ "๋ณธ๋Šฅ์— ์˜ํ•œ ์ฝ”๋”ฉ์„ ์ง€์–‘ํ•˜๋ผ" ๋ผ๊ณ  ๋‚˜์™€์žˆ๋‹ค. 

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

 

์˜ˆ๋ฅผ ๋“ค์–ด์„œ ํด๋ž˜์Šค์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค๋ช…ํ•˜๊ณ  ์žˆ๋‹ค.

ํด๋ž˜์Šค์˜ ๋กœ์ง๊ณผ ๋ฐ์ดํ„ฐ๋Š” ํ•จ๊ผ ์‚ฌ์šฉ๋˜๋ฉฐ ๋กœ์ง์€ ๋ฐ์ดํ„ฐ์— ๋น„ํ•ด ๋ณ€ํ™”์œจ์ด ๋‚ฎ๋‹ค. ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ๋ฐ์ดํ„ฐ๋Š” 
๊ด€๋ จ ๋กœ์ง์— ์˜ํ•ด ๋ณ€ํ™”ํ•˜๋ฉฐ, ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ณ€ํ™”์œจ์€ ๋น„์Šทํ•˜๋‹ค.

 

ํ‰์†Œ ํด๋ž˜์Šค์˜ ๋กœ์ง๊ณผ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ๊นŠ์ด ๊ณ ๋ฏผํ•ด๋ณธ์ ์ด ์—†๋˜ ๋‚˜๋Š” ์ด๋Ÿฐ ๊ธ€๋“ค์„ ๋ณด๊ณ  ๋งŽ์€ ๊ณ ๋ฏผ์„ ํ•  ์ˆ˜ ์žˆ์—ˆ์œผ๋ฉฐ ์ฝ”๋”ฉ์„ ํ• ๋•Œ๋„ ํŒจํ„ด๋“ค์„ ์ƒ๊ฐํ•˜๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ์งค ์ˆ˜ ์žˆ์—ˆ๋‹ค.

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

 

์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํžˆ ๊ธฐ์ˆ ์ ์ธ ๊ด€์ ์ด ์•„๋‹Œ "์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜"์ด๋ผ๊ณ  ํ‘œํ˜„์„ ํ•œ ์ ๋„ ๋งค์šฐ ์ธ์ƒ๊นŠ์—ˆ๋‹ค. ์ข‹์€ ์ฝ”๋“œ๋Š” ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ด ์ž˜ ๋˜๊ณ  ์ด๋Š” ๊ณง ์œ ์ง€ ๋ณด์ˆ˜ ๋น„์šฉ์„ ์ค„์—ฌ์ค€๋‹ค๋Š” ๋ง์ด ๋‚˜์—๊ฒŒ ์ž˜ ์™€๋‹ฟ์•˜๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

 

์ด ์ฑ…์„ ์ฝ๊ณ  ๊ทธ๋™์•ˆ ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ๊ธ‰๊ธ‰ํ–ˆ๋˜ ๋‚˜๋Š” ์œ ์ง€ ๋ณด์ˆ˜ ๋น„์šฉ์„ ๊ณ ๋ คํ•˜๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ์งœ๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ–ˆ๊ณ  ์ดˆ๋ฐ˜์—๋Š” ์„ค๊ณ„ํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ๋งŽ์ด ๋“ค์—ˆ์ง€๋งŒ , ํ™•์‹คํžˆ ๋‚˜์ค‘์— ์ฝ”๋“œ๋ฅผ ๋ดค์„ ๋•Œ ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์ˆ˜์ •ํ•˜๊ธฐ ์‰ฝ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

 

์ฑ…์—์„œ ๋งํ•ด์ฃผ๋Š” ์ข‹์€ ํŒจํ„ด๋“ค์ด ๋งŽ๊ธฐ์—, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ˜„ ํŒจํ„ด ์ฑ…์„ ์ฝ์œผ๋ฉด์„œ ํ•˜๋‚˜์”ฉ ๋ธ”๋กœ๊ทธ์— ์ •๋ฆฌํ•ด๋‘๋ฉด์„œ ์ฝ์œผ๋ ค๊ณ  ํ•˜์˜€๋‹ค.

 

3. ๊ฐœ์ธ์ ์œผ๋กœ ์•„์‰ฌ์› ๋˜ ์ 

์ฑ…์˜ ๋‚ด์šฉ์€ ์ „๋ฐ˜์ ์œผ๋กœ ์ข‹์•˜์ง€๋งŒ ์•„๋ฌด๋ž˜๋„ ์˜›๋‚  ์ฑ…์ด๋‹ค๋ณด๋‹ˆ๊นŒ,๊ธฐ์ˆ ์ด๋‚˜ ์ž๋ฐ” ์ฝ”๋“œ ๊ฐ™์€ ๋ถ€๋ถ„์—์„œ ๋ ˆ๊ฑฐ์‹œํ•˜๋‹ค๋Š” ๋Š๋‚Œ์„ ์ง€์šธ ์ˆ˜๋Š” ์—†์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋‹ค๋ฅด๊ฒŒ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์˜›๋‚  ๊ฐœ๋ฐœ์ž๋“ค์ด ํ–ˆ๋˜ ๊ณ ๋ฏผ๋“ค๊ณผ ๊ทธ๋กœ ์ธํ•œ ๋ฐœ์ „ ๋ฐฉํ–ฅ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋˜ ์‹œ๊ฐ„์ด์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ๋˜ ๋‹ค๋ฅธ ์•„์‰ฌ์šด ์ ์€ ๋ฒˆ์—ญ์ฒด๊ฐ€ ์‚ด์ง ์–ด์ƒ‰ํ•œ ๋ถ€๋ถ„์ด ์žˆ์–ด์„œ ์ดํ•ด์— ๋ฐฉํ•ด๊ฐ€ ์กฐ๊ธˆ ๋˜์—ˆ๋‹ค.

์ด ๋ถ€๋ถ„๋“ค์€ ์Šคํ„ฐ๋”” ํŒ€์›๋“ค๊ณผ ํ•จ๊ป˜ ๋ฌธ๋งฅ์„ ์œ ์ถ”ํ•ด๊ฐ€๋ฉด์„œ ์˜๋ฏธ๋ฅผ ์•Œ์•„๋งž์ถ”๋Š” ์žฌ๋ฏธ๊ฐ€ ์žˆ์—ˆ๋‹ค.

4. ๋งˆ๋ฌด๋ฆฌ ํšŒ๊ณ 

๋น„๋ก ํด๋ก  ์ฝ”๋”ฉ ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„์ด๋ž‘ ๊ฒน์ณ์„œ ๊ฐ์ฒด ์ง€ํ–ฅ ์Šคํ„ฐ๋””๋ณด๋‹ค๋Š” ์‹œ๊ฐ„์„ ํˆฌ์žํ•˜์ง€ ๋ชปํ•˜์˜€๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

ํ•˜์ง€๋งŒ ํ‹ˆํ‹ˆ์ด ์ฑ…์„ ๋ณด๋ฉด์„œ ๋‹ค์–‘ํ•œ ํŒจํ„ด๋“ค์„ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์•˜๊ณ  ํ•œ์ธต ๋” ์„ฑ์žฅํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ˜ผ์ž๊ฐ€ ์•„๋‹Œ ํŒ€์›๋“ค๊ณผ ๋งค์ฃผ ์ •ํ•ด์ง„ ์‹œ๊ฐ„์— ์˜๊ฒฌ์„ ๋‚˜๋ˆ„๋Š” ๊ฒƒ๋„ ์ฑ…์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ์‹œ๊ฐ์„ ๋Š๋‚„ ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์•˜๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

 

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

๋ถ€๋‹ด์—†์ด ์ฝ์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

์ฑ…์—์„œ๋Š” ํŒจํ„ด์— ๋Œ€ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์†Œ๊ฐœํ•œ๋‹ค.

ํŒจํ„ด์€ ์ง€๊ธˆ ๋‹น์žฅ ๋ฌด์—‡์„ ํ•ด์•ผํ• ์ง€๋ฅผ ์•Œ๋ ค์ฃผ๊ณ , ๊ฐ€์น˜๋Š” ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๋™๊ธฐ๋ฅผ ์•Œ๋ ค์ฃผ๋ฉฐ, ์›์น™์€ ๋™๊ธฐ๋ฅผ ํ–‰๋™์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋ฐ”๊ฟ€์ง€๋ฅผ ์•Œ๋ ค์ค€๋‹ค.

 

์ด์ฒ˜๋Ÿผ ํŒจํ„ด๋“ค์„ ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์— ๋Œ€์ž…ํ•ด๋ณด๋ฉด ์ถฉ๋ถ„ํžˆ ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์ข‹๊ณ  ์ดํ•ดํ•˜๊ธฐ ์ข‹์€ ์ฝ”๋“œ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์™€ ํŠธ๋žœ์žญ์…˜

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์— ๋Œ€ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ‘œ์ ์ธ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ๋ฐฉ์‹

1. ์„ ์  ์ž ๊ธˆ

2. ๋น„์„ ์  ์ž ๊ธˆ

 

์„ ์  ์ž ๊ธˆ

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ์‚ฌ์šฉ์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ํ—ค๋”ฉ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ๋ชปํ•œ๋‹ค.

ex) agg1์ด ์ˆ˜์ •ํ•˜๋Š” ๋™์•ˆ agg2๋Š” ์ž ๊ธˆ์ด ํ•ด์ œ๋  ๋•Œ๊นŒ์ง€ ๋ธ”๋กœํ‚น๋œ๋‹ค.

 

์„ ์  ์ž ๊ธˆ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ ์ถฉ๋Œ ๋ฌธ์ œ๋ฅผ ํ•ด์†Œํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ต์ฐฉ ์ƒํƒœ์— ๋น ์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

๊ต์ฐฉ ์ƒํƒœ๋ž€?

์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐ์ž ๋‹ค๋ฅธ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋ฅผ ์„ ์ ํ•˜๋‹ค๊ฐ€ ์„œ๋กœ์˜ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ

๊ต์ฐฉ ์ƒํƒœ์— ๋ฐ”์ง€๋ฉด ์‹œ์Šคํ…œ์€ ๋งˆ๋น„๋˜๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๋‹ค.

์ตœ๋Œ€ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์„ค์ •ํ•ด์คŒ์œผ๋กœ์จ ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋น„์„ ์  ์ž ๊ธˆ

๋ณ€๊ฒฝํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์ œ DBMS์— ๋ฐ˜์˜ํ•˜๋Š” ์‹œ์ ์— ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ํ™•์ธ

-> ๋ฒ„์ „ ๊ฐ’์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

๋งŒ์•ฝ ์ปค๋ฐ‹ ์‹œ์— ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ๋ฒ„์ „์ด ๋‹ค๋ฅด๋ฉด ๋ฐ์ดํ„ฐ ์ˆ˜์ •์— ์‹คํŒจํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ๋ฃจํŠธ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ์™ธ ๋‹ค๋ฅธ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋ณ€๊ฒฝ ๋˜์—ˆ์„ ๊ฒฝ์šฐ, ๋ฒ„์ „์ด ๊ทธ๋Œ€๋กœ์ธ ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ๊ฐ•์ œ๋กœ ๋ฒ„์ „์„ ์ฆ๊ฐ€์‹œํ‚ฌ์ˆ˜ ์žˆ๋‹ค.

 

์˜คํ”„๋ผ์ธ ์„ ์  ์ž ๊ธˆ

์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์— ๊ฑธ์ณ ๋™์‹œ ๋ณ€๊ฒฝ์„ ๋ง‰๋Š”๋‹ค.

์ฒซ ๋ฒˆ์งธ ํŠธ๋žœ์žญ์…˜์—์„œ ์˜คํ”„๋ผ์ธ ์ž ๊ธˆ์„ ์„ ์ ํ•˜๊ณ  , ๋งˆ์ง€๋ง‰์— ์ž ๊ธˆ์„ ํ•ด์ œํ•œ๋‹ค.

 

๋งŒ์•ฝ ์˜คํ”„๋ผ์ธ ์„ ์  ์ž ๊ธˆ์„ ํ•˜๊ณ  ํ•ด์ œํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜๊ธฐ ์œ„ํ•ด ์ž ๊ธˆ ์œ ํšจ ์‹œ๊ฐ„์„ ์„ค์ •ํ•ด์•ผํ•œ๋‹ค.

ํ•„์š”์— ๋”ฐ๋ผ์„œ ์—ฐ์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๋„๋ฉ”์ธ ๋ชจ๋ธ๊ณผ ๊ฒฝ๊ณ„

 

ํ•œ ๊ฐœ์˜ ๋ชจ๋ธ๋กœ ์—ฌ๋Ÿฌ ํ•˜์œ„ ๋„๋ฉ”์ธ์„ ๋ชจ๋‘ ํ‘œํ˜„ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋งž์ง€ ์•Š๋Š” ๋ชจ๋ธ์„ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค.

ex) ์นดํƒˆ๋กœ๊ทธ์—์„œ์˜ ์ƒํ’ˆ๊ณผ ์žฌ๊ณ  ๊ด€๋ฆฌ์—์„œ์˜ ์ƒํ’ˆ์€ ๋‹ค๋ฅธ ์˜๋ฏธ์ด๋‹ค.

 

๋ชจ๋ธ์€ ํŠน์ •ํ•œ ์ปจํ…์ŠคํŠธ ํ•˜์—์„œ ์™„์ „ํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š”๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ช…์‹œ์ ์œผ๋กœ ๊ตฌ๋ถ„๋˜๋Š” ๊ฒฝ๊ณ„๋ฅผ ๊ฐ€์ ธ์„œ ์„ž์ด์ง€ ์•Š๋„๋ก ํ•ด์•ผํ•œ๋‹ค.

 

๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ

๋ชจ๋ธ์˜ ๊ฒฝ๊ณ„๋ฅผ ๊ฒฐ์ •ํ•˜๋ฉฐ ๋…ผ๋ฆฌ์ ์œผ๋กœ ํ•œ ๊ฐœ์˜ ๋ชจ๋ธ์„ ๊ฐ–๋Š”๋‹ค.

์‹ค์ œ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ฌผ๋ฆฌ์  ์‹œ์Šคํ…œ์œผ๋กœ ๋„๋ฉ”์ธ์„ ๊ตฌํ˜„ํ•œ๋‹ค.

 

๋งŒ์•ฝ ํ•˜๋‚˜์˜ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ์—์„œ ๊ฐœ๋ฐœํ•  ๋•Œ๋Š” ํ•˜์œ„ ๋„๋ฉ”์ธ ๋ชจ๋ธ์ด ์„ž์ด์ง€์•Š๋„๋ก ํ•ด์•ผํ•œ๋‹ค.

 

 

๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ ๊ตฌํ˜„

๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๋Š” ํ‘œํ˜„ ์˜์—ญ , ์‘์šฉ ์„œ๋น„์Šค , ์ธํ”„๋ผ๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•œ๋‹ค.

๋ณต์žกํ•œ ๋กœ์ง์„ ๊ฐ–์ง€ ์•Š๋Š”๋‹ค๋ฉด CRUD ๋กœ ๊ตฌํ˜„ํ•ด๋„ ์ƒ๊ด€์—†๋‹ค.

 

๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์„ ํ˜ผํ•ฉํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

-> CQRS ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ธฐ๋Šฅ๊ณผ ์ฟผ๋ฆฌ ๊ธฐ๋Šฅ์„ ๊ตฌ๋ถ„

 

 

 

๋„๋ฉ”์ธ ์„œ๋น„์Šค

 

์—ฌ๋Ÿฌ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๊ฐ€ ํ•„์š”ํ•˜๊ณ  ์ฑ…์ž„์ด ์• ๋งคํ•  ๋•Œ ๋„๋ฉ”์ธ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋„๋ฉ”์ธ ์„œ๋น„๋Š” ๋‹ค์Œ ์ƒํ™ฉ์— ์ด์šฉ๋œ๋‹ค.

1. ๊ณ„์‚ฐ๋กœ์ง

2. ์™ธ๋ถ€ ์‹œ์Šคํ…œ ์—ฐ๋™์ด ํ•„์š”ํ•œ ๋กœ์ง

 

๋„๋ฉ”์ธ ์„œ๋น„์Šค๋Š” ์ƒํƒœ ์—†์ด ๋กœ์ง๋งŒ ๊ตฌํ˜„ํ•œ๋‹ค.

๋„๋ฉ”์ธ ์„œ๋น„์Šค๋ฅผ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ๊ฐ์ฒด์— ์ฃผ์ž…ํ•˜๋ฉด ์•ˆ๋œ๋‹ค!

 

์™ธ๋ถ€ ์‹œ์Šคํ…œ ์—ฐ๋™๊ณผ ๋„๋ฉ”์ธ ์„œ๋น„์Šค

public interface API {
	...
}

๋„๋ฉ”์ธ ๋กœ์ง ๊ด€์ ์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ž‘์„ฑํ•ด์•ผํ•œ๋‹ค.

 

์‘์šฉ ์„œ๋น„์Šค๋Š” ์ด ๋„๋ฉ”์ธ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•ด์„œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๋„๋ฉ”์ธ ์„œ๋น„์Šค์˜ ๋กœ์ง์ด ๊ณ ์ •๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด , ๋„๋ฉ”์ธ ์„œ๋น„์Šค ์ž์ฒด๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋„๋ฉ”์ธ ์„œ๋น„์Šค์˜ ๊ตฌํ˜„์ด ํŠน์ • ๊ธฐ์ˆ ์— ์˜์กดํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€ API๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ถ”์ƒํ™”ํ•ด์•ผํ•œ๋‹ค.

 

 

 

ํ‘œํ˜„ ์˜์—ญ๊ณผ ์‘์šฉ ์˜์—ญ

์‘์šฉ ์˜์—ญ๊ณผ ํ‘œํ˜„ ์˜์—ญ์€ ์‚ฌ์šฉ์ž์™€ ๋„๋ฉ”์ธ์„ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๋งค๊ฐœ์ฒด ์—ญํ• ์ด๋‹ค.

 

ํ‘œํ˜„ ์˜์—ญ์€ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ํ•ด์„ํ•˜๊ณ  ๊ทธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์‘์šฉ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

์‘์šฉ ์˜์—ญ์€ ์‹ค์ œ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

 

๋‘ ์˜์—ญ์€ ์„œ๋กœ ์š”๊ตฌํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ํ˜•์‹์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์š”์ฒญ์„ ๋ณ€ํ™˜ํ•ด์•ผํ•œ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ์ƒํ˜ธ์ž‘์šฉ์€ ํ‘œํ˜„ ์˜์—ญ์ด ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์‘์šฉ ์„œ๋น„์Šค๋Š” ํ‘œํ˜„ ์˜์—ญ์— ์˜์กดํ•˜์ง€ ์•Š์•„์•ผํ•œ๋‹ค.

 

์‘์šฉ ์„œ๋น„์Šค์˜ ์—ญํ• 

์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ์—์„œ ๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•œ๋‹ค.

 

public Result func(Req req){
	// ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ์—์„œ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋ฅผ ๊ตฌํ•จ
	Agg agg = AggRepository.finById(req.getId());
    
    // ์• ๊ทธ๊ฑฐํŠธ์˜ ๋„๋ฉ”์ธ ๊ธฐ๋Šฅ ์‹คํ–‰
    add.doFunc(req.getValue());
    
    // ๊ฒฐ๊ณผ ๋ฆฌํ„ด
    return createSuccessResult(agg)

}

 

 

๋„๋ฉ”์ธ ๋กœ์ง์„ ๋„๋ฉ”์ธ ์˜์—ญ๊ณผ ์‘์šฉ ์„œ๋น„์Šค์— ๋ถ„์‚ฐํ•ด์„œ ๊ตฌํ˜„ํ•˜๋ฉด ์—ฌ๋Ÿฌ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

1. ์ฝ”๋“œ์˜ ์‘์ง‘์„ฑ์ด ๋–จ์–ด์ง„๋‹ค.

2. ๋™์ผํ•œ ๋„๋ฉ”์ธ ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง„๋‹ค.

 

์‘์šฉ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๋ช‡๊ฐ€์ง€ ๊ณ ๋ คํ•  ์‚ฌํ•ญ์ด ์žˆ๋‹ค.

1. ์‘์šฉ ์„œ๋น„์Šค์˜ ํฌ๊ธฐ

๋„๋ฉ”์ธ๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์„ ํ•œ ์„œ๋น„์Šค์— ๋„ฃ๋Š”๋‹ค๋ฉด ํด๋ž˜์Šค๊ฐ€ ์ปค์ง€๊ณ  ๊ด€๋ จ์—†๋Š” ์ฝ”๋“œ๊ฐ€ ๋’ค์„ž์ผ ์ˆ˜ ์žˆ๋‹ค.

ํ•œ ์‘์šฉ ํด๋ž˜์Šค์—์„œ ํ•œ๊ฐœ ๋‚ด์ง€ 2~3๊ฐœ์˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ์„œ๋น„์Šค ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์ž

 

2. ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํ•„์š”ํ•œ ์ง€

๊ตฌํ˜„ ํด๋ž˜์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ, ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ถˆํ•„์š”ํ•˜๋‹ค.

 

์‘์šฉ ์„œ๋น„์Šค์—์„œ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ์ž์ฒด๋ฅผ ๋ฆฌํ„ดํ•˜๋ฉด ๋„๋ฉ”์ธ ๋กœ์ง์„ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ์‘์šฉ ์„œ๋น„์Šค์—์„œ๋Š” ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒƒ์ด ์‘์ง‘๋„๋ฅผ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

์‘์šฉ ์„œ๋น„์Šค์˜ ๊ตฌํ˜„

 

์‘์šฉ ์„œ๋น„์Šค๋Š” ํ‘œํ˜„ ์˜์—ญ์— ์˜์กดํ•˜์ง€ ์•Š์•„์•ผํ•œ๋‹ค.

๊ทธ ์ด์œ ๋Š” 

1. ์‘์šฉ ์„œ๋น„์Šค๋งŒ ๋‹จ๋…์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค.

2. ํ‘œํ˜„ ์˜์—ญ์˜ ์—ญํ• ๊นŒ์ง€ ๋Œ€์‹ ํ•˜๊ฒŒ ๋œ๋‹ค.

 

ํ‘œํ˜„ ์˜์—ญ์˜ ์ƒํƒœ๋ฅผ ์‘์šฉ ์„œ๋น„์Šค์—์„œ ๋ณ€๊ฒฝํ•ด๋ฒ„๋ฆฌ๋ฉด ๋กœ์ง์„ ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค. -> ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ ์ฆ๊ฐ€

์ด๋ฅผ ์œ„ํ•ด์„œ ์„œ๋น„์Šค ๋ฉ”์„œ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋ฆฌํ„ด ํƒ€์ž…์ด ํ‘œํ˜„ ์˜์—ญ์˜ ๊ตฌํ˜„ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค.

 

ํ‘œํ˜„ ์˜์—ญ

1. ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์•Œ๋งž์€ ํ๋ฆ„์„ ์ œ๊ณตํ•œ๋‹ค.

2. ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์— ๋งž๊ฒŒ ์‘์šฉ ์„œ๋น„์Šค์— ๊ธฐ๋Šฅ ์‹คํ–‰์„ ์š”์ฒญํ•œ๋‹ค.

3. ์‘์šฉ ์„œ๋น„์Šค์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์•Œ๋งž์€ ํ˜•์‹์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค.

4. ์‚ฌ์šฉ์ž ์„ธ์…˜์„ ๊ด€๋ฆฌํ•œ๋‹ค.

 

๊ฐ’ ๊ฒ€์ฆ

์›์น™์ ์œผ๋กœ ๋ชจ๋“  ๊ฒ€์ฆ์€ ์‘์šฉ ์„œ๋น„์Šค์—์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ๊ฐ๊ฐ์˜ ์˜ˆ์™ธ๋ฅผ ๋”ฐ๋กœ ๋˜์งˆ ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž๋Š” ํ•˜๋‚˜์˜ ์ด์œ ๋งŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ์—๋Ÿฌ ์ฝ”๋“œ๋ฅผ ๋ชจ์•„ ํ•˜๋‚˜์˜ ์˜ˆ์™ธ๋กœ ๋˜์งˆ ์ˆ˜๋„ ์žˆ๋‹ค.

 

ํ‘œํ˜„ ์˜์—ญ์—์„œ ํ•„์ˆ˜ ๊ฐ’๊ณผ ํ˜•์‹์„ ๊ฒ€์‚ฌํ•˜๋ฉด ์‘์šฉ์„œ๋น„์Šค์—์„œ๋Š” ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜๋งŒ ๊ฒ€์‚ฌํ•˜๋ฉด ๋œ๋‹ค.

 

์กฐํšŒ ์ „์šฉ ๊ธฐ๋Šฅ๊ณผ ์‘์šฉ ์„œ๋น„์Šค

์‘์šฉ ์„œ๋น„์Šค๊ฐ€ ์‚ฌ์šฉ์ž ์š”์ฒญ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ๋ณ„๋‹ค๋ฅธ ๊ธฐ์—ฌ๋ฅผ ํ•˜์ง€ ๋ชปํ•œ๋‹ค๋ฉด ๊ตณ์ด ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

 

 

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ

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

-> ์ƒ์œ„ ์ˆ˜์ค€์—์„œ ๋ชจ๋ธ์„ ์กฐ๋งํ•ด์•ผํ•˜๋Š”๋ฐ , ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์• ๊ทธ๋ฆฌ๋ฆฌ๊ฑฐํŠธ๋Š” ๋ณต์žกํ•œ ๋„๋ฉ”์ธ์„ ๋‹จ์ˆœํ•œ ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์— ์†ํ•œ ๊ฐ์ฒด๋Š” ์œ ์‚ฌํ•˜๊ฑฐ๋‚˜ ๋™์ผํ•œ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ๊ฐ€์ง€๋ฉฐ ๋‹ค๋ฅธ ์• ๊ทธ๋ฆฌ์ปคํŠธ์— ์†ํ•œ ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ์• ๊ทธ๋ฆฌ์ปคํŠธ์—

์†ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ๋ฃจํŠธ

 

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ์ „์ฒด๋ฅผ ๊ด€๋ฆฌํ•  ์ฃผ์ฒด๊ฐ€ ํ•„์š”ํ•œ๋ฐ, ์ด ์ฑ…์ž„์„ ์ง€๋Š” ๊ฒƒ์ด ๋ฃจํŠธ ์—”ํ‹ฐํ‹ฐ์ด๋‹ค.

ex) Order -> (OrderLine) , (Orderer) , (Address)

 

ํ•ต์‹ฌ ์—ญํ• ์€ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์˜ ์ผ๊ด€์„ฑ์ด ๊นจ์ง€์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋ฃจํŠธ๋Š” ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๊ฐ€ ์ œ๊ณตํ•ด์•ผํ•  ๋„๋ฉ”์ธ์„ ๊ตฌํ˜„ํ•œ๋‹ค.

 

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ์™ธ๋ถ€์—์„œ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์— ์†ํ•œ ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

Info info = order.info();
info.setAddress(newAddress);

 

๋„๋ฉ”์ธ ๋ชจ๋ธ์— ๋Œ€ํ•ด ๋‹ค์Œ ๋‘๊ฐ€์ง€๋ฅผ ์ง€์ผœ์•ผํ•œ๋‹ค.

1. ๋‹จ์ˆœํ•œ set ๋ฉ”์†Œ๋“œ๋ฅผ ๊ณต๊ฐœ ๋ฒ”์œ„๋กœ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค.

2. ๋ฐธ๋ฅ˜ ํƒ€์ž…์€ ๋ถˆ๋ณ€์œผ๋กœ ํ•œ๋‹ค.

 

์ž ๊ธˆ ๋Œ€์ƒ์ด ๋งŽ์•„์ง„๋‹ค๋Š” ๊ฒƒ์€ ๊ทธ๋งŒํ‹ˆ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํŠธ๋žœ์žญ์…˜ ๊ฐœ์ˆ˜๊ฐ€ ์ค„์–ด๋“ ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 

-> ์„ฑ๋Šฅ์˜ ์ €ํ•˜

 

ํ•œ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ๋Š” ํ•œ ๊ฐœ์˜ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋งŒ ์ˆ˜์ •ํ•ด์•ผํ•œ๋‹ค.

ํ•œ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๊ฐ€ ๋‹ค๋ฅธ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์˜ ๊ธฐ๋Šฅ์— ์˜์กดํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ๊ฐ„ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’์•„์ง„๋‹ค.

 

๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ์™€ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ

๊ฐ์ฒด์˜ ์˜์†์„ฑ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ๋Š” ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ๋‹จ์œ„๋กœ ์กด์žฌํ•œ๋‹ค.

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ์ „์ฒด๋ฅผ ์ €์žฅ์†Œ์— ์˜์†ํ™”ํ•ด์•ผํ•œ๋‹ค.

 

ID๋ฅผ ์ด์šฉํ•œ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ์ฐธ์กฐ

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์—์„œ ๋‹ค๋ฅธ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์˜ ๋คํŠธ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋ฅผ ์ง์ ‘ ์ฐธ์กฐํ•  ๋•Œ ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋Š” ํŽธ๋ฆฌํ•จ์„ ์˜ค์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

-> ID๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋‹ค๋ฅธ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋ฅผ ์ฐธ์กฐํ•˜์ž

 

ID๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฐธ์กฐํ•˜๋ฉด ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ์ฐธ์กฐ๋กœ ์—ฐ๊ฒฐ๋˜์ž ์•Š๊ณ  ํ•œ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์— ์†ํ•œ ๊ฐ์ฒด๋“ค๋งŒ ์ฐธ์กฐ๋กœ ์—ฐ๊ฒฐ๋œ๋‹ค.

 

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋ฅผ ํŒฉํ† ๋ฆฌ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ

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

 

 

๋„ค ๊ฐœ์˜ ์˜์—ญ

ํ‘œํ˜„ ์˜์—ญ

HTTP ์š”์ฒญ์„ ํ•„์š”๋กœ ํ•˜๋Š” ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์‘์šฉ ์˜์—ญ์— ์ „๋‹ฌํ•˜๊ณ  ๋‹ค์‹œ ์‘๋‹ต์„ HTTP ์‘๋‹ต์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ „์†ก

ex) mvc ํ”„๋ ˆ์ž„์›Œํฌ

 

์‘์šฉ ์˜์—ญ(์„œ๋น„์Šค ๊ณ„์ธต)

๋„๋ฉ”์ธ ์˜์—ญ์˜ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค.

๋กœ์ง์„ ์ง์ ‘ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋ณด๋‹จ ๋„๋ฉ”์ธ ๋ชจ๋ธ์— ๋กœ์ง ์ˆ˜ํ–‰์„ ์œ„ํž˜

 

๋„๋ฉ”์ธ ์˜์—ญ

๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ๊ตฌํ˜„ํ•˜๊ณ  ํ•ต์‹ฌ ๋กœ์ง์„ ๊ตฌํ˜„

 

public cancelOrder(String orderId) {
	Order order = findOrderById(orderId); // ๋„๋ฉ”์ธ ๋ชจ๋ธ์— ์œ„์ž„
    ...
}

 

์ธํ”„๋ผ ์ŠคํŠธ๋Ÿญ์ณ ์˜์—ญ

๋…ผ๋ฆฌ์  ๊ฐœ๋… ๋ณด๋‹ค๋Š” ๊ตฌํ˜„ ๊ธฐ์ˆ ์„ ๋‹ค๋ฃฌ๋‹ค.

ex) DB ,SMTP , ์นดํ”„์นด

 

๊ณ„์ธต ๊ตฌ์กฐ ์•„ํ‚คํ…์ฒ˜

์•„ํ‚คํ…์ฒ˜๋Š” ๋ณดํ†ต

ํ‘œํ˜„ -> ์‘์šฉ -> ๋„๋ฉ”์ธ -> ์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ณ ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋‹ค.

 

์ƒ์œ„ ๊ณ„์ธต์€ ํ•˜์œ„ ๊ณ„์ธต์— ์˜์กดํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ ๋ฐ˜๋Œ€๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

๊ผญ ๋ฐ”๋กœ ์•„๋ž˜ ๊ณ„์ธต์—๋งŒ ์˜์กดํ•˜์ง€ ์•Š๊ณ  ์œ ์—ฐ์ ์œผ๋กœ ์˜์กด์„ฑ์„ ๊ฐ€์ ธ๊ฐ€๊ธฐ๋„ ํ•œ๋‹ค.

ex) ์‘์šฉ -> ์ธํ”„๋ผ

 

ํ•˜์ง€๋งŒ ์ด ๊ฒฝ์šฐ ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค

1. ๊ตฌํ˜„ ์„ค์ •์„ ๋ชจ๋‘ ๋๋‚ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋ ค์›€ 

2. ๊ตฌํ˜„ ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์–ด๋ ค์›€

 

๋”ฐ๋ผ์„œ DIP๋ฅผ ์ ์šฉํ•˜๋ฉด ์œ„์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

DIP

๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ

- ์˜๋ฏธ ์žˆ๋Š” ๋‹จ์ผ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“ˆ

- ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ•˜์œ„ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค

 

์ €์ˆ˜์ค€ ๋ชจ๋“ˆ

- ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์˜ ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ 

ex) JPA , Drools

 

๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์— ์˜์กดํ•˜๋ฉด ์•ž์„œ ๋งํ•œ ๋‘๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.

๊ทธ๋ž˜์„œ DIP๋Š” ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์— ์˜์กดํ•˜๋„๋ก ๋ฐ”๊พผ๋‹ค.

์ด๋•Œ ์ถ”์ƒํ™”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋” ์ด์ƒ ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์— ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ด๋ฅผ ์˜์กด ๊ด€๊ณ„ ์—ญ์ „(DIP)๋ผ๊ณ  ํ•œ๋‹ค.

 

DIP๋ฅผ ํ†ตํ•ด ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

1. ๊ธฐ์ˆ  ๊ต์ฒด๋ฅผ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

// ์‚ฌ์šฉํ•  ์ €์ˆ˜์ค€ ๊ฐ์ฒด ์ƒ์„ฑ
Rule Discounter ruleDiscounter = new DroolsRuleDiscounter();

// ์ƒ์„ฑ์ž ๋ฐฉ์‹์œผ๋กœ ์ฃผ์ž…
CalculateDiscountService disService = new CalculateDiscountService(ruleDiscounter);

2. ํ…Œ์ŠคํŠธ๊ฐ€ ์šฉ์ดํ•˜๋‹ค.

๊ธฐ์กด์—๋Š” ๊ธฐ์ˆ ์ด ๊ตฌํ˜„๋˜์–ด์•ผ ํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ์ด์   ๋Œ€์—ญ๊ฐ์ฒด(mock)์„ ์ด์šฉํ•ด์„œ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ง„ํ–‰ํ• ์ˆ˜ ์žˆ๋‹ค.

์Šคํ…์ด๋‚˜ ๋ชจ์˜ ๊ฐ์ฒด์™€ ๊ฐ™์€ ํ…Œ์ŠคํŠธ ๋ชฉ์ ์˜ ๋Œ€์—ญ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฑฐ์˜ ๋ชจ๋“  ์ƒํ™ฉ์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋‹ค !

 

* ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์—์„œ ์ถ”์ถœํ•˜์ง€ ์•Š์•„์•ผํ•œ๋‹ค !!

* ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์ถ”์ƒํ™”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ ๊ด€์ ์—์„œ ๋„์ถœํ•œ๋‹ค !!

 

๋„๋ฉ”์ธ ์˜์—ญ์˜ ์ฃผ์š” ๊ตฌ์„ฑ์š”์†Œ

์—”ํ‹ฐํ‹ฐ

- ๊ณ ์œ ์˜ ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ง€๊ณ  ๋„๋ฉ”์ธ์˜ ๊ณ ์œ ํ•œ ๊ฐœ๋…์„ ํ‘œํ˜„ํ•œ๋‹ค.

 

๋ฐธ๋ฅ˜

- ๊ฐœ๋…์ ์œผ๋กœ ํ•˜๋‚˜์ธ ๊ฐ’์„ ํ‘œํ˜„

ex) ์ฃผ์†Œ , ๊ธˆ์•ก

 

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ

- ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ์™€ ๋ฐธ๋ฅ˜ ๊ฐ์ฒด๋ฅผ ๊ฐœ๋…์ ์œผ๋กœ ๋ฌถ์€ ๊ฒƒ

 

๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ

- ๋„๋ฉ”์ธ ๋ชจ๋ธ์˜ ์˜์†์„ฑ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

๋„๋ฉ”์ธ ์„œ๋น„์Šค

- ํŠน์ • ์—”ํ‹ฐํ‹ฐ์— ์†ํ•˜์ง€ ์•Š์€ ๋„๋ฉ”์ธ ๋กœ์ง

- ๋„๋ฉ”์ธ ๋กœ์ง์ด ์—ฌ๋Ÿฌ ์—”ํ‹ฐํ‹ฐ์™€ ๋ฐธ๋ฅ˜๋ฅผ ํ•„์š”๋กœ ํ•˜๋ฉด ๋„๋ฉ”์ธ ์„œ๋น„์Šค์—์„œ ๋กœ์ง์„ ๊ตฌํ˜„ํ•œ๋‹ค.

 

๋„๋ฉ”์ธ ์—”ํ‹ฐํ‹ฐ VS DB ์—”ํ‹ฐํ‹ฐ

 

๋„๋ฉ”์ธ ์—”ํ‹ฐํ‹ฐ

- ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ๋„๋ฉ”์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

- ๋„๋ฉ”์ธ ๊ด€์ ์—์„œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์บก์Šํ™”ํ•ด์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž„์˜๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š”๋‹ค.

- ๊ฐœ๋…์ ์œผ๋กœ ํ•˜๋‚˜์ธ ๊ฒฝ์šฐ ๋ฐธ๋ฃจ ํƒ€์ž…์„ ์ด์šฉํ•ด์„œ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ

- ๊ฐœ๋ณ„ ๊ฐ์ฒด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ƒ์œ„ ์ˆ˜์ค€์—์„œ ๋ชจ๋ธ์„ ๋ณผ ์ˆ˜ ์žˆ์–ด์•ผ ์ „์ฒด ๋ชจ๋ธ์˜ ๊ด€๊ณ„์™€ ๊ฐœ๋ณ„ ๋ชจ๋ธ์„ ์ดํ•ดํ•˜๋Š” ๋ฐ

๋„์›€์ด ๋œ๋‹ค.

- ๊ด€๋ จ ๊ฐ์ฒด๋ฅผ  ํ•˜๋‚˜๋กœ ๋ฌถ์€ ๊ตฐ์ง‘

- ๊ฐ์ฒด ๊ตฐ์ง‘ ๋‹จ์œ„๋กœ ๋ชจ๋ธ์„ ๋ฐ”๋ผ๋ณธ๋‹ค.

- ๋ฃจํŠธ ์—”ํ‹ฐํ‹ฐ๋Š” ์—๊ทธ๋ฆฌ๊ฑฐํŠธ์— ์†ํ•ด ์žˆ๋Š” ์—”ํ‹ฐํ‹ฐ์™€ ๋ฐธ๋ฅ˜ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„ํ•ด์•ผํ•  ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

- ๋ฃจํŠธ ์—”ํ‹ฐํ‹ฐ๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ์—”ํ‹ฐํ‹ฐ๋‚˜ ๋ฐธ๋ฅ˜ ๊ฐ์ฒด์— ์ ‘๊ทผํ•œ๋‹ค.-> ์บก์Šํ™”

 

๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ

- ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ๋‹จ์œ„๋กœ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ •์˜ํ•œ๋‹ค.

- ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ฝ”๋“œ๋Š” ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ ๊ตฌํ•œ ๋’ค์— ๋„๋ฉ”์ธ ๊ฐ์ฒด์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ

 

 

 

 

์š”๊ตฌ ์‚ฌํ•ญ

์š”๊ตฌ์‚ฌํ•ญ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋ฉด ์—‰๋šฑํ•œ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค.

(Garbage in , Garbage out)

-> ์ฝ”๋”ฉ์— ์•ž์„œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค !

 

๋„๋ฉ”์ธ ๋ชจ๋ธ

ํŠน์ • ๋„๋ฉ”์ธ์„ ๊ฐœ๋…์ ์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์„ ๋„๋ฉ”์ธ ๋ชจ๋ธ์ด๋ผ๊ณ  ํ•œ๋‹ค.

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

ex) ๊ฐ์ฒด , ์ƒํƒœ ๋‹ค์ด์–ด๊ทธ๋žจ, ๊ทธ๋ž˜ํ”„

 

๋„๋ฉ”์ธ ๋ชจ๋ธ ํŒจํ„ด

๋„๋ฉ”์ธ ๊ณ„์ธต์€ ๋„๋ฉ”์ธ์˜ ํ•ต์‹ฌ ๊ทœ์น™์„ ๊ตฌํ˜„ํ•œ๋‹ค.

์•„๋ž˜์˜ ์ฝ”๋“œ๋Š” ์ฃผ๋ฌธ ์ƒํƒœ์— ๋”ฐ๋ผ ๋ฐฐ์†ก์ง€๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์— ๋Œ€ํ•œ ์ฝ”๋“œ๋ฅผ ๋„๋ฉ”์ธ ๋ชจ๋ธ ํŒจํ„ด์œผ๋กœ ๊ตฌํ˜„

public class Order {
	private OrderState state;
    private ShippingInfo info;
    
    public void changeShippingInfo(ShippingInfo info) {
    	if(!state.isShippingChangeable()) {
        	// ์˜ˆ์™ธ์ฒ˜๋ฆฌ
        }
        ...
    }
    ...
}

public enum OrderState {
	PAYMENT_WAITING {
    	public boolean isShippingChangeable() {
        	return true;
        }
    }
    ...
}

ํ˜น์€ ์ด๋ ‡๊ฒŒ๋„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

public class Order {
	private OrderState state;
    private ShippingInfo info;
    
    public void changeShippingInfo(ShippingInfo info) {
    	if(!state.isShippingChangeable()) {
        	// ์˜ˆ์™ธ์ฒ˜๋ฆฌ
        }
        ...
    }
    
	private boolean isShippingChangeable() {
    	return state == OrderState.PAYMENT_WAITING || ...
    }
    ...
}

public enum OrderState {
	PAYMENT_WAITING
    ...
    ;
    
}

์ค‘์š”ํ•œ ์ ์€ Order , OrderState ๊ฐ™์€ ์ฃผ๋ฌธ ๋„๋ฉ”์ธ ๋ชจ๋ธ์— ๊ตฌํ˜„ ํ–ˆ๋‹ค๋Š” ์ ์ด๋‹ค.

์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ๋‹ค๋ฅธ ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ๋œ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

 

๋„๋ฉ”์ธ ๋ชจ๋ธ ๋„์ถœ

๊ตฌํ˜„์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ ์ดˆ๊ธฐ ๋ชจ๋ธ์ด ํ•„์š”ํ•˜๋‹ค.

 

๋ช‡๊ฐ€์ง€ ์š”๊ตฌ์‚ฌํ•ญ์œผ๋กœ ๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•ด์•ผํ•  ๊ธฐ๋Šฅ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

ex)

์ตœ์†Œ ํ•œ ์ข…๋ฅ˜ ์ด์ƒ์˜ ์ƒํ’ˆ ์ฃผ๋ฌธ -> ๋กœ์ง ๊ตฌํ˜„ ํ•„์š”

ํ•œ ์ƒํ’ˆ์„ ํ•œ ๊ฐœ ์ด์ƒ ์ฃผ๋ฌธํ•  ์ˆ˜ ์žˆ๋‹ค. -> ๊ตฌ๋งค ์ƒํ’ˆ ์ •๋ณด๋Š” ์ƒํ’ˆ ๊ฐœ์ˆ˜๋ฅผ ํฌํ•จํ•œ๋‹ค

 

์—”ํ‹ฐํ‹ฐ

์—”ํ‹ฐํ‹ฐ์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒƒ์ด๋‹ค.

์‹๋ณ„์ž๋Š” ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์†์„ฑ์„ ๋ฐ”๊พธ๊ณ  ์‚ญ์ œํ•  ๋•Œ๊นŒ์ง€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค.

์ฆ‰ ์‹๋ณ„์ž๊ฐ€ ๊ฐ™์œผ๋ฉด ๊ฐ™์€ ์—”ํ‹ฐํ‹ฐ์ด๋‹ค.

 

์‹๋ณ„์ž๋Š” ์‚ฌ์šฉํ•˜๋Š” ๋„๋ฉ”์ธ์˜ ํŠน์ง•๊ณผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋ฉฐ, DB์—์„œ ์ƒ์„ฑํ•ด์ฃผ๊ธฐ๋„ ํ•œ๋‹ค.

(์ด ๊ฒฝ์šฐ DB์— ์ €์žฅํ•ด์•ผ ์•Œ ์ˆ˜ ์žˆ์Œ)

 

๋ฐธ๋ฃจ(value) ํƒ€์ž… 

๊ฐœ๋…์ ์œผ๋กœ ์™„์ „ํ•œ ํ•˜๋‚˜๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ๋ฐธ๋ฃจ ํƒ€์ž…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

private String receiverName;
private String receiverPhoneNumber;

//๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œํ˜„ ๊ฐ€๋Šฅ
private Receiver receiver;

 

๋ฌด์กฐ๊ฑด ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ•„๋“œ๋ฅผ ๊ฐ€์ ธ์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

public class Money {
	private int value;
    
    public Money(int value) {
    	this.value = value;
    }
}

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์ˆ˜ํ˜•์˜ value๋ฅผ Money ๋กœ ํ‘œํ˜„ํ•จ์œผ๋กœ์จ ์˜๋ฏธ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ ํ•ด๋‹น ํด๋ž˜์Šค ๋‚ด์— ๋”ํ•˜๊ธฐ , ๊ณฑํ•˜๊ธฐ ๊ฐ™์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฐธ๋ฃจ ํƒ€์ž…์€ ์•ˆ์ „ํ•œ ์ฝ”๋“œ ์ž‘์„ฑ์„ ์œ„ํ•ด ๋ถˆ๋ณ€์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

*๋ถˆ๋ณ€ : ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Œ

 

๋„๋ฉ”์ธ ๋ชจ๋ธ์ด set ๋ฉ”์†Œ๋“œ๋ฅผ ๋„ฃ์ง€ ์•Š๋Š” ์ด์œ 

 

1. ํ•ต์‹ฌ ๊ฐœ๋…์ด๋‚˜ ์˜๋„๋ฅผ ์ฝ”๋“œ์—์„œ ์‚ฌ๋ผ์ง€๊ฒŒ ํ•œ๋‹ค.

// ๋„๋ฉ”์ธ๊ณผ ์˜๋„๊ฐ€ ๋ช…ํ™•ํ•จ
public void completePayment();

// ํ•„๋“œ๊ฐ’๋งŒ ๋ณ€๊ฒฝํ•˜๊ณ  ๋, ์˜๋„๊ฐ€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Œ
pubic void setStatus();

 

2. ๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์˜จ์ „ํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

Order order = new Order();

// set ๋ฉ”์†Œ๋“œ๋กœ ๊ฐ’์„ ์ „๋‹ฌ
order.setOrderLines(lines);

๋งŒ์ผ ์œ„์™€ ๊ฐ™์ด set ๋ฉ”์†Œ๋“œ๋กœ ๊ฐ’์„ ์ „๋‹ฌํ•œ๋‹ค๋ฉด ๋‚˜์ค‘์— ํ•„๋“œ๊ฐ€ null์ธ์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

ํ•˜์ง€๋งŒ ์ƒ์„ฑํ•  ๋•Œ๋ถ€ํ„ฐ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š”๋‹ค๋ฉด ์ƒ์„ฑํ•˜๋Š” ์‹œ์ ์— ๊ฒ€์‚ฌํ•˜๋ฉด ๋˜๋ฏ€๋กœ ํ•ด๋‹น ๋กœ์ง์ด ํ•„์š”๊ฐ€ ์—†์–ด์ง„๋‹ค.

 

๋„๋ฉ”์ธ ์šฉ์–ด์™€ ์œ ๋น„์ฟผํ„ฐ์Šค ์–ธ์–ด

๋„๋ฉ”์ธ ์šฉ์–ด๋ฅผ ์ฝ”๋“œ์— ๋ฐ˜์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ํ•ด์„ํ•˜๋Š”๋ฐ ๋ถ€๋‹ด์ด ๋œ๋‹ค.

// ๋„๋ฉ”์ธ ์šฉ์–ด๊ฐ€ ๋ฐ˜์˜๋˜์ง€ ์•Š์Œ
public OrderState {
	STEP1,STEP2,STEP3,STEP4;
}

// ๋„๋ฉ”์ธ ์šฉ์–ด๊ฐ€ ๋ฐ˜์˜๋˜์„œ ์ง๊ด€์ ์ž„
public OrderState {
	PAYMENT_WAITING,PREPARING,SHIPPED,DELIVERING;
}

๋„๋ฉ”์ธ ์šฉ์–ด์— ์•Œ๋งž์€ ๋‹จ์–ด๋ฅผ ์ฐพ๋Š” ์‹œ๊ฐ„์„ ์•„๊นŒ์›Œํ•˜์ง€ ๋ง์ž!

 

์ปฌ๋ ‰์…˜

์ปฌ๋ ‰์…˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์—ฌ๋Ÿฌ ๊ฐ์ฒด์˜ ๋ฌถ์Œ์— ๋Œ€ํ•ด ์ œ๊ฐ๊ฐ ๋‹ค๋ฅธ ์˜๋ฏธ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

์ฃผ๋กœ ์„ฑ๋Šฅ์— ๊ด€๋ จ๋œ ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์˜๋„๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

 

์ปฌ๋ ‰์…˜์ด ํ‘œํ˜„ํ•˜๋Š” 3๊ฐ€์ง€ ๊ฐœ๋…

1. ํฌ๊ธฐ

- ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” ์ƒ์„ฑ ์‹œ ๊ณ ์ •๋˜์ง€๋งŒ, ๋Œ€๋ถ€๋ถ„์˜ ์ปฌ๋ ‰์…˜์€ ์ค‘๊ฐ„์— ํฌ๊ธฐ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

2. ์›์†Œ ๊ฐ„ ์ˆœ์„œ

- ์›์†Œ์˜ ์ˆœ์„œ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ์ˆœ์„œ๋ฅผ ๋ณด์ „ํ•˜๋Š” ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

 

3. ๋…์ž์„ฑ

- ์ผ๋ถ€ ์—ฐ์‚ฐ์˜ ๊ฒฝ์šฐ ์–ด๋–ค ์›์†Œ๊ฐ€ ์ปฌ๋ ‰์…˜์— ์†ํ•ด์žˆ๋Š” ์ง€ ํ˜น์€ ๋ช‡๋ฒˆ ๋‚˜ํƒ€๋‚ฌ๋Š”์ง€ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

 

์ธํ„ฐํŽ˜์ด์Šค

๋ฐฐ์—ด

๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.

์œ ์—ฐ์„ฑ ๋ฌธ์ œ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค.

 

Iterable

์›์†Œ๋ฅผ ์ฃผ๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๋ง‰์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์›์†Œ๊ฐ€ ์ง€์›Œ์งˆ ์œ„ํ—˜์ด ์žˆ๋‹ค.

 

Collection

Iterable์„ ์ƒ์†ํ•˜๋ฉฐ ์—ฌ๋Ÿฌ ๋ฉ”์†Œ๋“œ๋ฅผ ์ถ”๊ฐ€๋กœ ์ง€์›ํ•œ๋‹ค.

 

*์„ ์–ธ์„ ์ผ๋ฐ˜์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋‚จ๊ฒจ๋‘๋ฉด ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ์‰ฝ๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.

 

List

Collection์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด์„œ ์›์†Œ ๊ฐ„์— ์ •ํ•ด์ง„ ์ˆœ์„œ๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค.

์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์–ด๋–ค ์›์†Œ๋ฅผ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Set

์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

SertedSet

์ˆœ์„œ๋Š” ์œ ์ง€๋˜์ง€๋งŒ ์ค‘๋ณต ์›์†Œ๊ฐ€ ์—†๋Š” ์ปฌ๋ ‰์…˜์ด๋‹ค.

๋ฉ”์‹œ์ง€

๋ฉ”์‹œ์ง€ ์ˆ˜์‹ ์ž๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์œผ๋ฉด, ๋ฐœ์‹ ์ž์˜ ์ƒํƒœ๋Š” ๋ฐ”๋€Œ์ง€ ์•Š์ง€๋งŒ ์ˆ˜์‹ ์ž์˜ ์ƒํƒœ๋Š” ๋ฐ”๋€” ์ˆ˜ ์žˆ๋‹ค.

๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์‹œ์ €๋Š” ๋‹น์žฅ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ์„ธ๋ถ€ ๊ตฌํ˜„์ด ์กด์žฌํ•œ๋‹ค ๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๋‚ดํฌํ•  ์ˆ˜ ์žˆ๋‹ค. (์บก์Šํ™”)

 

function() {
	input();
    process();
    output();
}

 

์„ ํƒ ๋ฉ”์‹œ์ง€

์„ ํƒ ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ช…์‹œ์  ์กฐ๊ฑด๋ฌธ์˜ ์‚ฌ์šฉ์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ณผ๋„ํ•œ ์„ ํƒ๋ฉ”์‹œ์ง€์˜ ์‚ฌ์šฉ์€ ๊ฐ€๋…์„ฑ์„ ์ €ํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

 

public void display(Subject subject, Brush brush) {
	brush.display(subject);
}

 

๋”๋ธ” ๋””์ŠคํŒจ์น˜

2๊ฐœ์˜ ์„ ํƒ ๋ฉ”์‹œ์ง€๋ฅผ ์ง๋ ฌ๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

https://www.youtube.com/watch?v=s-tXAHub6vg&loop=0 

 

๋ถ„๋ฆฌ ๋ฉ”์‹œ์ง€

์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑ๋˜๋Š” ๋ณต์žกํ•œ ์•Œ๊ณ ์ฆ˜์„ ๋‹จ๊ณ„๋ณ„๋กœ ๋ชจ์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

๋˜๋Œ๋ฆผ ๋ฉ”์‹œ์ง€

๋„์šฐ๋ฏธ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ”์†Œ๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

void process() {
	helper.process(this);
}

void compute() {
	input();
    process(helper);
    output();
}

 

์ดˆ์ฒญ ๋ฉ”์‹œ์ง€

๋กœ์ง์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๊ตฌํ˜„๋˜์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋กœ ์„ ์–ธํ•ด์„œ ์ถ”์ƒ ๋ฉ”์‹œ์ง€์ž„์„ ๋ถ„๋ช…ํžˆํ•˜๋ผ

 

์„ค๋ช… ๋ฉ”์‹œ์ง€

 

highlight ๋ฉ”์†Œ๋“œ์™€ ๊ฐ™์ด ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์˜๋„๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

highlight() {
	reverse();
}

 

๋˜ ์ฃผ์„์„ ๋ถ™์ด๊ณ  ์‹ถ์€ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๋‹ค,.

flags |= LOADED_BIT; // ๋กœ๋“œ ๋น„ํŠธ๋ฅผ ์„ค์ •

setLoadedFlag() {
	flags |= LOADED_BIT;
};

์ด๋Ÿฌํ•œ ํ•œ์ค„์งœ๋ฆฌ ๋ฉ”์†Œ๋“œ๋Š” ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ๋•๋Š”๋‹ค.

 

์˜ˆ์™ธ ํ๋ฆ„

์˜ˆ์™ธ ํ๋ฆ„์€ ์ˆ˜ํ–‰ ๋นˆ๋„๊ฐ€ ๋‚ฎ๊ณ  ์ˆ˜์ • ๋นˆ๋„๊ฐ€ ๋‚ฎ์œผ๋ฉฐ, ์ฃผ์š” ํ๋ฆ„์— ๋น„ํ•ด ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์˜ ์ค‘์š”์„ฑ์ด ๋–จ์–ด์ง„๋‹ค.

์ฃผ๋ฃŒ ํ๋ฆ„์€ ๋ช…๋ฃŒํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ด๊ณ  ์˜ˆ์™ธ ํ๋ฆ„์€ ์ฃผ์š” ํ๋ฆ„์˜ ๋ช…๋ฃŒ์„ฑ์„ ํ›ผ์†ํ•˜์ง€ ์•Š๋Š” ๋ฒ”์œ„ ๋‚ด์—์„œ ๋ช…๋ฃŒํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ด๋ผ !

 

๋ณดํ˜ธ์ ˆ

๋ณดํ˜ธ์ ˆ์„ ์‚ฌ์šฉํ•ด์„œ ๋ณต์žกํ•œ ์ œ์–ด ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

void conpute() {
	Server server = getServer();
    if (server != null) {
    	Client client = server.getClient();
        if(client != null) {
        	....
        }
    }
}

 

void conpute() {
	Server server = getServer();
    if (server != null)
    	return;
    Client client = server.getClient();
    if(client != null)
    	return;
    ...
}

 

์˜ˆ์™ธ

๋ฉ”์†Œ๋“œ๊ฐ€ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋ฉด ๋ฉ”์†Œ๋“œ์˜ ์„ค๊ณ„์™€ ๊ตฌํ˜„์˜ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ€๋Šฅํ•˜๋ฉด ์ˆœ์ฐจ์  ๊ตฌ๋ฌธ , ๋ฉ”์‹œ์ง€ , ๋ฃจํ”„ ์ œ์–ด๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ์ œ์–ด ํ๋ฆ„์ด ์•ˆ๋  ๊ฒฝ์šฐ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค

 

์˜ˆ์™ธ ์ „๋‹ฌ

ํ•˜์œ„ ์ˆ˜์ค€์˜ ์˜ˆ์™ธ๋Š” ๋ฌธ์ œ๋ฅผ ์ง„๋‹จํ•˜๋Š” ๋ฐ ์œ ์šฉํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

ํ•˜์œ„ ์ˆ˜์ค€์˜ ์˜ˆ์™ธ๋ฅผ ์ƒ์œ„ ์ˆ˜์ค€ ์˜ˆ์™ธ๋กœ ํฌ์žฅํ•˜๋ผ 

 

 

๊ฐ์ฒด๋Š” ์™ธ๋ถ€์— ๋“œ๋Ÿฌ๋‚˜๋Š” ํ–‰์œ„์™€ ํ–‰์œ„๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ์ƒํƒœ๋ฅผ ๋ฌถ์–ด์ฃผ๋Š” ํŽธ๋ฆฌํ•œ ๋‹จ์œ„๋‹ค.

์ƒํƒœ

-  ์ƒํƒœ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์œ ์‚ฌํ•œ ์ƒํƒœ๋ฅผ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌํ•˜๊ณ  ๊ฐ ์ƒํƒœ๋Š” ๋ณ„๋„๋กœ ๊ด€๋ฆฌํ•ด์•ผํ•œ๋‹ค.

 

๋‘ ๊ฐœ์˜ ์ƒํƒœ๊ฐ€ ์œ ์‚ฌํ•œ ์ง€ ์•Œ๋ ค๋ฉด

1. ๋‘ ๊ฐœ์˜ ์ƒํƒœ๊ฐ€ ๋™์ผํ•œ ์—ฐ์‚ฐ ์•ˆ์—์„œ ์‚ฌ์šฉ๋˜๋Š”๊ฐ€?

2. ๋™์ผํ•œ ์‹œ์ ์— ์ƒ์„ฑ๋˜๊ณ  ์†Œ๋ฉธ๋˜๋Š”๊ฐ€?

๋ฅผ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค.

 

์ง์ ‘ ์ ‘๊ทผ

- ์ง์ ‘ ์ ‘๊ทผ์˜ ์žฅ์ ์€ ๋ช…ํ™•์„ฑ์ด๋‹ค.

x=10 // ๋งค์šฐ๋งค์šฐ ๋ช…ํ™•ํ•˜๋‹ค.

ํ•˜์ง€๋งŒ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์•Œ๋ ค์ฃผ๊ธฐ๋Š” ์–ด๋ ต๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด

doorRegister = 1; // ์ง๊ด€์ ์ด์ง€ ์•Š์Œ
door.open(); // ๋งค์šฐ ์ง๊ด€์ ์ž„

๋”ฐ๋ผ์„œ ์ง์ ‘ ์ ‘๊ทผ์ด ๋งŽ๋‹ค๋ฉด ์›ํ™œํ•œ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ๋ฐฉํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ฐ„์ ‘ ์ ‘๊ทผ

- ๋ช…ํ™•์„ฑ๊ณผ ์ง์ ‘์„ฑ์„ ํฌ์ƒํ•ด์„œ ์œ ์—ฐ์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

- 2๊ฐœ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ์˜์กด ๊ด€๊ณ„๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค.

void setValue(int number){
	this.number = number;
    value = width * number;
}

 

๊ณต์šฉ ์ƒํƒœ

- ๊ฐ™์€ ๋ฐ์ดํ„ฐ ์š”์†Œ๋Š” ํด๋ž˜์Šค์— ํ•„๋“œ๋ฅผ ์„ ์–ธํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค.

- ๊ฐ ๊ฐ์ฒด์˜ ๊ณต์šฉ ์ƒํƒœ๋Š” ๋ชจ๋‘ ๋ฒ”์œ„์™€ ์ƒ๋ช… ๊ธฐ๊ฐ„์ด ๊ฐ™์•„์•ผํ•œ๋‹ค.

class Point {
	int x;
    int y;
}

๊ฐ€๋ณ€ ์ƒํƒœ

- ๋ฐ์ดํ„ฐ ์š”์†Œ์˜ ์ด๋ฆ„์„ ํ‚ค๋กœํ•˜๊ณ  ๊ฐ’์„ ๋ฐ์ดํ„ฐ๋กœ ํ•˜๋Š” ๋งต์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

- ์œ ์—ฐํ•˜๊ธด ํ•˜์ง€๋งŒ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ด ์–ด๋ ต๋‹ค.

- ๊ฐ ํ•„๋“œ์˜ ์ƒํƒœ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํ•„๋“œ๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ ์œ ์šฉํ•˜๋‹ค.

 

์™ธ์žฌ ์ƒํƒœ

์–ด๋–ค ๊ฐ์ฒด์™€ ๊ด€๋ จ๋œ ํŠน์ˆ˜ ๋ชฉ์  ์ •๋ณด๋Š” ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ํ•„์š”๋กœ ํ•˜๋Š” ๋ถ€๋ถ„์— ๋‘๋Š” ๊ฒŒ ๋‚ซ๋‹ค.

๋‹ค๋งŒ ์™ธ์žฌ ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด์˜ ๋ณต์‚ฌ๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค.

 

๋ณ€์ˆ˜

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์—๋Š” ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ์‹œ์šฉํ•˜๊ณ  ๊ฐ„๊ฐ„ํžˆ ์ •์  ๋ณ€์ˆ˜์™€ ์ „์šฉ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ์„ ์ค„์ด๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

๋ณ€์ˆ˜์˜ ์ข…๋ฅ˜๋ฅผ ์ค„์ด๋ฉด ๋ฌธ๋งฅ๋งŒ์œผ๋กœ๋„ ์‰ฝ๊ฒŒ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ณ€์ˆ˜์˜ ์ƒ๋ช… ์‹œ๊ฐ„์€ ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„์— ๊ฐ€๊นŒ์šด๊ฒŒ ์ข‹๋‹ค.

๊ฐ™์€ ๋ฒ”์œ„์—์„œ ์ •์˜๋˜๋Š” ๋ณ€์ˆ˜๋“ค์€ ๋ชจ๋‘ ๊ฐ™์€ ์ƒ๋ช… ๊ธฐ๊ฐ„์„ ๊ฐ€์ ธ์•ผํ•œ๋‹ค.

 

์ง€์—ญ๋ณ€์ˆ˜ 

์ง€์—ญ ๋ณ€์ˆ˜๋Š” ๊ฐ€๊ธ‰์  ์ตœ์†Œ ๋ฒ”์œ„ ๋‚ด์—์„œ ์„ ์–ธํ•˜๋ผ

 

์ง€์—ญ ๋ณ€์ˆ˜๋Š” ๋„์šฐ๋ฏธ ๋ฉ”์†Œ๋“œ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.

์ด๋•Œ ์—ฐ์‚ฐ์— ํ•„์š”ํ•œ ํ‘œํ˜„์€ ๋ฉ”์†Œ๋“œ ๋‚ด์šฉ์ด ๋˜๊ณ , ๋ณ€์ˆ˜ ์ด๋ฆ„์€ ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์ด ๋œ๋‹ค.

 

ํ•„๋“œ

ํ•„๋“œ์˜ ๋ฒ”์œ„์™€ ์ƒ๋ช…๊ธฐ๊ฐ„์€ ํ•„๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์™€ ๊ฐ™๋‹ค.

 

๋งŒ์•ฝ ํ•„๋“œ๋ฅผ ๊ฐ€์žฅ ์•ž์— ์„ ์–ธํ•˜๋ฉด , ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋ ์ง€์— ๋Œ€ํ•œ ๋ฌธ๋งฅ์„ ์ œ๊ณตํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

๋’ค์— ์„ ์–ธํ•œ๋‹ค๋ฉด ์ค‘์š”์„ฑ์ด ์ƒ๋Œ€์ ์œผ๋กœ ๋–จ์–ด์ง„๋‹ค๋Š” ๊ฒƒ์„ ์•”์‹œํ•œ๋‹ค.

 

๋ถˆ๋ฆฐ ํ”Œ๋ž˜๊ทธ๋ฅผ ํ†ตํ•ด "๊ฐ์ฒด๊ฐ€ ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค" ๋Š” ๊ฒƒ์„ ๋‚ดํฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํŒŒ๋ผ๋ฏธํ„ฐ

ํ•˜๋‚˜์˜ ๊ฐ์ฒด์—์„œ ๋‹ค๋ฅธ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ๊ฐ™์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค๋ฉด , ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ˜ธ์ถœ๋˜๋Š” ๊ฐ์ฒด์— ํฌํ•จํ•˜๋ผ

 

Server s = new Server();
s.a(this);
s.b(this);
s.c(this);

์ด ์ฝ”๋“œ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

Server s = new Server(this);
s.a();
s.b();
s.c();

 

์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ์˜์กด์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

 

์˜ต์…˜ ํŒŒ๋ผ๋ฏธํ„ฐ

๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์•ž์—์„œ ์ „๋‹ฌํ•˜๊ณ  , ์˜ต์…˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๋’ค์— ์ „๋‹ฌํ•œ๋‹ค.

 

public Server();
public Server(int port);
public Server(int port, int log)

์ด๋ฅผ ๋ง์›๊ฒฝ์‹ ํŒŒ๋ผ๋ฏธํ„ฐ ํŒจํ„ด์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.

 

๊ฐ€๋ณ€ ์ธ์ž

์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ž„์˜์˜ ์ˆ˜์˜ ์ธ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

method(Class... classes)

 

ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ์ฒด

์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ํ•จ๊ป˜ ์—ฌ๋Ÿฌ ๋ฉ”์†Œ๋“œ๋กœ ์ „๋‹ฌ๋œ๋‹ค๋ฉด, ์ด๋“ค์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์„œ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด x,y,heigh,width ๋ฅผ ๋ฌถ์–ด์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

setOuterBounds(x, y, width, height)

setOuterBounds(bounds)

ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ์งง์•„์ง€๊ณ  ์˜๋„๋ฅผ ๋ช…ํ™•ํžˆ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ ํ•ด๋‹น ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์ด ๋ฐ€์ ‘ํ•œ ์—ฐ๊ด€์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ๋งŒ์•ฝ ๊ฐ์ฒด์˜ ์ƒ์„ฑ์œผ๋กœ ์ธํ•ด ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์ผ์–ด๋‚œ๋‹ค๋ฉด ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ์ฒด๋ฅผ ์—†์• ๋Š” ์ชฝ์œผ๋กœ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค.

 

์ƒ์ˆ˜

 

๋ณ€ํ™”ํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฅผ static final์„ ํ†ตํ•ด ์„ ์–ธํ•˜๊ณ  ๊ทธ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๊ฒŒ๋” ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

์ดˆ๊ธฐํ™”

์ดˆ๊ธฐํ™”๋Š” ๋ณ€์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋˜๊ธฐ ์ „์— ์•Œ๊ณ  ์žˆ๋Š” ์ƒํƒœ๋กœ ๋งŒ๋“œ๋Š” ์ž‘์—…์ด๋‹ค.

 

์ดˆ๊ธฐํ™”๋Š” ๊ฐ€๊ธ‰์  ์„ ์–ธ๊ณผ ํ•จ๊ป˜ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

๋งŒ์•ฝ ์ดˆ๊ธฐํ™”์— ๋“œ๋Š” ๋น„์šฉ์ด ๋น„์‹ธ๋‹ค๋ฉด ์ƒ์„ฑ๊ณผ ์ดˆ๊ธฐํ™”๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค..

 

์—ด์„ฑ์  ์ดˆ๊ธฐํ™”(eager)

 

๋ชจ๋“  ๋ณ€์ˆ˜๊ฐ€ ์ดˆ๊ธฐํ™” ์ดํ›„์— ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋˜๊ฑฐ๋‚˜ ์ƒ์„ฑ๋˜์ž๋งˆ์ž ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

 

์„ ์–ธ๋ฌธ์—์„œ ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋ฉด ์„ ์–ธ ํƒ€์ž…๊ณผ ์‹ค์ œ ํƒ€์ž…์„ ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

List<Integer> number = new ArrayList<>();

 

์„ ์–ธ๋ฌธ์—์„œ ํ•„๋“œ๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ์ƒ์„ฑ์ž์—์„œ ์ดˆ๊ธฐํ™”ํ•˜๋ผ

 

class Point {
	int x,y;
    Point(int x,int y){
    	this.x = x;
        this.y = y;
    }
}

 

๊ฒŒ์œผ๋ฅธ ์ดˆ๊ธฐํ™”(lazy)

 

์ดˆ๊ธฐํ™” ๋น„์šฉ์ด ํฌ๊ฑฐ๋‚˜ ๋น„์šฉ ๋ถ€๋‹ด์„ ๋Šฆ์ถ”๊ณ  ์‹ถ๋‹ค๋ฉด ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋ฉด ๋œ๋‹ค.

+ Recent posts