Study/CleanCode

[Study][CleanCode - 3] 11. ์‹œ์Šคํ…œ

youn12 2022. 8. 4. 14:22
๐Ÿ“‹ ๋ชฉ์ฐจ.

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

    .
ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ
    .ํ…Œ์ŠคํŠธ ์ฃผ๋„ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์ถ•
    .์˜์‚ฌ ๊ฒฐ์ •์„ ์ตœ์ ํ™”ํ•˜๋ผ
    .๋ช…๋ฐฑํ•œ ๊ฐ€์น˜๊ฐ€ ์žˆ์„ ๋•Œ ํ‘œ์ค€์„ ํ˜„๋ช…ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ผ
    .์‹œ์Šคํ…œ์€ ๋„๋ฉ”์ธ ํŠนํ™” ์–ธ์–ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
    .๊ฒฐ๋ก 


โœ”๏ธ ๋‚ด์šฉ.

 

11. ์‹œ์Šคํ…œ

 

"๋ณต์žก์„ฑ์€ ์ฃฝ์Œ์ด๋‹ค. ๊ฐœ๋ฐœ์ž์—๊ฒŒ์„œ ์ƒ๊ธฐ๋ฅผ ์•—์•„๊ฐ€๋ฉฐ, ์ œํ’ˆ์„ ๊ณ„ํšํ•˜๊ณ  ์ œ์ž‘ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“œ๋‹ค"
- ๋ ˆ์ด ์˜ค์ง€, Microsoft CTO

 

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

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

 


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

 

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

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

 

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

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

 

 ์œ„ ์ฝ”๋“œ๋Š” ์ดˆ๊ธฐํ™” ์ง€์—ฐ(Lazy Initialization) ํ˜น์€ ๊ณ„์‚ฐ ์ง€์—ฐ( Lazy Evaluation)์ด๋ผ๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

 

์žฅ์ 

 

 - ์‹ค์ œ๋กœ ํ•„์š”ํ•  ๋•Œ๊นŒ์ง€ ์ƒ์„ฑํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ถˆํ•„์š”ํ•œ ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•˜๋Š” ์‹œ๊ฐ„์ด ๊ทธ๋งŒํผ ๋นจ๋ผ์ง„๋‹ค.

 - ์–ด๋–ค ๊ฒฝ์šฐ์—๋„ Null ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

๋‹จ์ 

 

 - ์˜์กด์„ฑ์ด ์ƒ๊ธด๋‹ค.

getService ๋ฉ”์„œ๋“œ๊ฐ€ MyServiceImpl์™€ (์œ„์—์„œ ์ƒ๋žต๋œ) ์ƒ์„ฑ์ž ์ธ์ˆ˜์— ๋ช…์‹œ์ ์œผ๋กœ ์˜์กดํ•œ๋‹ค.

๋Ÿฐํƒ€์ž„ ๋กœ์ง์—์„œ MyServiceImpl ๊ฐ์ฒด๋ฅผ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋”๋ผ๋„ ์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•ด์•ผ ์ปดํŒŒ์ผ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 - ํ…Œ์ŠคํŠธ ๋ฌธ์ œ.

MyServiceImpl์ด ๋ฌด๊ฑฐ์šด ๊ฐ์ฒด์ผ ๊ฒฝ์šฐ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์—์„œ getService ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ์ ์ ˆํ•œ ํ…Œ์ŠคํŠธ ์ „์šฉ ๊ฐ์ฒด(Test Double์ด๋‚˜ Mock Object)๋ฅผ servie ํ•„๋“œ์— ํ• ๋‹นํ•ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ ๋Ÿฐํƒ€์ž„ ๋กœ์ง์— ๊ฐ์ฒด ์ƒ์„ฑ ๋กœ์ง์„ ์„ž์–ด ๋†“์€ ํƒ“์— (service๊ฐ€ null์ธ ๊ฒฝ๋กœ์™€ null์ด ์•„๋‹Œ ๊ฒฝ๋กœ ๋“ฑ) ๋ชจ๋“  ์‹คํ–‰ ๊ฒฝ๋กœ๋„ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•œ๋‹ค.

 ์ฑ…์ž„์ด ๋‘˜์ด๋ผ๋Š” ๋ง์€ ์ž‘๊ฒŒ๋‚˜๋งˆ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)์„ ๊นฌ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

 

 - ์ƒํ™ฉ์— ์ ํ•ฉํ•œ ๊ฐ์ฒด์ธ๊ฐ€?.

getService ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•œ ํด๋ž˜์Šค๊ฐ€ ์ „์ฒด ๋ฌธ๋งฅ์„ ์•Œ ํ•„์š”๊ฐ€ ์žˆ์„๊นŒ? ๊ณผ์—ฐ ์ด ์‹œ์ ์— ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ• ์ง€ ์•Œ ์ˆ˜๋‚˜ ์žˆ์„๊นŒ? ํ˜„์‹ค์ ์œผ๋กœ ํ•œ ๊ฐ์ฒด ์œ ํ˜•์ด ๋ชจ๋“  ๋ฌธ๋งฅ์— ์ ํ•ฉํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์„๊นŒ?

 

 - ๋ชจ๋“ˆ์„ฑ์€ ์ €์กฐํ•˜๊ณ  ๋Œ€๊ฐœ ์ค‘๋ณต์ด ์‹ฌ๊ฐํ•˜๋‹ค.

 ์ดˆ๊ธฐํ™” ์ง€์—ฐ ๊ธฐ๋ฒ•์„ ํ•œ ๋ฒˆ ์ •๋„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ํฐ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋งŽ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ด์ฒ˜๋Ÿผ ์ข€์Šค๋Ÿฌ์šด ์„ค์ • ๊ธฐ๋ฒ•์„ ์ˆ˜์‹œ๋กœ ์ด์šฉํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ „๋ฐ˜์ ์ธ ์„ค์ • ๋ฐฉ์‹์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณณ๊ณณ์— ํฉ์–ด์ ธ ์žˆ๋‹ค.

 ์ฒด๊ณ„์ ์ด๊ณ  ํƒ„ํƒ„ํ•œ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ํ”ํžˆ ์“ฐ๋Š” ์ข€์Šค๋Ÿฝ๊ณ  ์†์‰ฌ์šด ๊ธฐ๋ฒ•์œผ๋กœ ๋ชจ๋“ˆ์„ฑ์„ ๊นจ์„œ๋Š” ์ ˆ๋Œ€ ์•ˆ ๋œ๋‹ค.

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

 


 

- Main ๋ถ„๋ฆฌ

 

 ์‹œ์Šคํ…œ ์ƒ์„ฑ๊ณผ ์‹œ์Šคํ…œ ์‚ฌ์šฉ์„ ๋ถ„๋ฆฌํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ, ์ƒ์„ฑ๊ณผ ๊ด€๋ จํ•œ ์ฝ”๋“œ๋Š” ๋ชจ๋‘ main์ด๋‚˜ main์ด ํ˜ธ์ถœํ•˜๋Š” ๋ชจ๋“ˆ๋กœ ์˜ฎ๊ธฐ๊ณ , ๋‚˜๋จธ์ง€ ์‹œ์Šคํ…œ์€ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๊ณ  ๋ชจ๋“  ์˜์กด์„ฑ์ด ์—ฐ๊ฒฐ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

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

 


 

 - ํŒฉํ† ๋ฆฌ

 

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

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

 


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

 

์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection, DI)์€ ์ œ์–ด ์—ญ์ „(Inversion of Control. IOC) ๊ธฐ๋ฒ•์„ ์˜์กด์„ฑ ๊ด€๋ฆฌ์— ์ ์šฉํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค.

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

 ์ดˆ๊ธฐ ์„ค์ •์€ ์‹œ์Šคํ…œ ์ „์ฒด์—์„œ ํ•„์š”ํ•˜๋ฏ€๋กœ ๋Œ€๊ฒŒ '์ฑ…์ž„์งˆ' ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ 'main' ๋ฃจํ‹ด์ด๋‚˜ ํŠน์ˆ˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

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

 

 


 

.ํ™•์žฅ

 

 '์ฒ˜์Œ๋ถ€ํ„ฐ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ' ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฏฟ์Œ์€ ๋ฏธ์‹ ์ด๋‹ค. ๋Œ€์‹  ์šฐ๋ฆฌ๋Š” ์ฃผ์–ด์ง„ ์‚ฌ์šฉ์ž ์Šคํ† ๋ฆฌ์— ๋งž์ถฐ ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ๋‚ด์ผ์€ ์ƒˆ๋กœ์šด ์Šคํ† ๋ฆฌ์— ๋งž์ถฐ ์‹œ์Šคํ…œ์„ ์กฐ์ •ํ•˜๊ณ  ํ™•์žฅํ•˜๋ฉด ๋œ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ˜๋ณต์ ์ด๊ณ  ์ ์ง„์ ์ธ ์• ์ž์ผ ๋ฐฉ์‹์˜ ํ•ต์‹ฌ์ด๋‹ค. ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ, ๋ฆฌํŽ™ํ„ฐ๋ง, (TDD + ๋ฆฌํŒฉํ„ฐ๋ง์œผ๋กœ ์–ป์–ด์ง€๋Š”) ๊นจ๋—ํ•œ ์ฝ”๋“œ๋Š” ์ฝ”๋“œ ์ˆ˜์ค€์—์„œ ์‹œ์Šคํ…œ์„ ์กฐ์ •ํ•˜๊ณ  ํ™•์žฅํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ ๋‹ค.

 

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


 

.ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ

 

 AOP์—์„œ ๊ด€์ (aspect)์ด๋ผ๋Š” ๋ชจ๋“ˆ ๊ตฌ์„ฑ ๊ฐœ๋…์€ "ํŠน์ • ๊ด€์‹ฌ์‚ฌ๋ฅผ ์ง€์›ํ•˜๋ ค๋ฉด ์‹œ์Šคํ…œ์—์„œ ํŠน์ • ์ง€์ ๋“ค์ด ๋™์ž‘ํ•˜๋Š” ๋ฐฉ์‹์„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค"๋ผ๊ณ  ๋ช…์‹œํ•œ๋‹ค.

 ์˜์†์„ฑ์„ ์˜ˆ๋กœ ๋“ค๋ฉด, ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์˜์†์ ์œผ๋กœ ์ €์žฅํ•  ๊ฐ์ฒด์™€ ์†์„ฑ์„ ์„ ์–ธํ•œ ํ›„ ์˜์†์„ฑ ํ”„๋ ˆ์ž„์›Œํฌ์— ์œ„์ž„ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด AOP ํ”„๋ ˆ์ž„ ์›Œํฌ๋Š” ๋Œ€์ƒ ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š” ์ƒํƒœ๋กœ ๋™์ž‘ ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•œ๋‹ค. ์ž๋ฐ”์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ด€์  ํ˜น์€ ๊ด€์ ๊ณผ ์œ ์‚ฌํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์„ธ ๊ฐœ(Java Proxy, ์ˆœ์ˆ˜ ์ž๋ฐ” AOP ํ”„๋ ˆ์ž„์›Œํฌ, AspectJ ๊ด€์ )๊ฐ€ ์žˆ๋‹ค.

 


 

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

 

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

 

 ์ตœ์„ ์˜ ์‹œ์Šคํ…œ ๊ตฌ์กฐ๋Š” ๊ฐ๊ธฐ POJO ๊ฐ์ฒด๋กœ ๊ตฌํ˜„๋˜๋Š” ๋ชจ๋‘˜ํ™” ๋œ ๊ด€์‹ฌ์‚ฌ ์˜์—ญ(๋„๋ฉ”์ธ)์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด๋‹น ์˜์—ญ ์ฝ”๋“œ์— ์ตœ์†Œํ•œ์˜ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ด€์ ์ด๋‚˜ ์œ ์‚ฌํ•œ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด ํ†ตํ•ฉํ•œ๋‹ค. ์ด๋Ÿฐ ๊ตฌ์กฐ ์—ญ์‹œ ์ฝ”๋“œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ธฐ๋ฒ•์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


 

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

 

๋ชจ๋“ˆ์„ ๋‚˜๋ˆ„๊ณ  ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด ์ง€์—ฝ์ ์ธ ๊ด€๋ฆฌ์™€ ๊ฒฐ์ •์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค. ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๊ฒฐ์ •์„ ํ•œ ์‚ฌ๋žŒ์ด ๋‚ด๋ฆฌ๊ธฐ๋Š” ์–ด๋ ต๋‹ค. 

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

 


 

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

 

EJB2๋Š” ๋‹จ์ง€ ํ‘œ์ค€์ด๋ผ๋Š” ์ด์œ ๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณค ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ‘œ์ค€์— ์ง‘์ฐฉํ•˜๋Š” ๋ฐ”๋žŒ์— ๊ณ ๊ฐ ๊ฐ€์น˜๊ฐ€ ๋’ท์ „์œผ๋กœ ๋ฐ€๋ ค๋‚œ ์‚ฌ๋ก€๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

 

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

 


 

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

 

 DSL์€ ๊ฐ„๋‹จํ•œ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋‚˜ ํ‘œ์ค€ ์–ธ์–ด๋กœ ๊ตฌํ˜„ํ•œ API๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. 

์ข‹์€ DSL์€ ๋„๋ฉ”์ธ ๊ฐœ๋…๊ณผ ๊ทธ ๊ฐœ๋…์„ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ ์‚ฌ์ด์— ์กด์žฌํ•˜๋Š” '์˜์‚ฌ์†Œํ†ต ๊ฐ„๊ทน'์„ ์ค„์—ฌ์ค€๋‹ค. ๋„๋ฉ”์ธ ์ „๋ฌธ๊ฐ€๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด๋กœ ๋„๋ฉ”์ธ ๋…ผ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ๋„๋ฉ”์ธ์„ ์ž˜๋ชป ๊ตฌํ˜„ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์ค„์–ด๋“ ๋‹ค.

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

 


 

.๊ฒฐ๋ก 

 

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


๐Ÿ“ ๋Š๋‚€์ .

 - ๊นจ๋—ํ•œ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑ์„ ์œ„ํ•ด ๋…ธ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.
 - ๊ด€์  ํ˜น์€ ๊ด€์ ๊ณผ ์œ ์‚ฌํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•ด ๊ตฌํ˜„ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜์ž.
 - '๊ฐ€์žฅ ๋‹จ์ˆœํ•˜๊ฒŒ!' ํ•ญ์ƒ ์ƒ๊ฐํ•˜๋ฉฐ ์„ค๊ณ„ ๋ฐ‘ ๊ฐœ๋ฐœ์„ ํ•˜์ž.