๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ปStudy

(40)
AOP(Aspect Oriented Programming)์˜ ๊ฐœ๋… ์Šคํ”„๋ง์„ ๊ณต๋ถ€ํ•  ๋•Œ DI์™€ ํ•จ๊ป˜ ํ•ญ์ƒ ๊ฑฐ๋ก ๋˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ AOP์ด๋‹ค. AOP๋Š” ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๋Š” ํ•˜๋‚˜์˜ ๋ฐฉ๋ฒ•๋ก ์ด๋‹ค. ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•˜๋ฉด AOP ๊ตฌํ˜„์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€๋Š” Object Oriented Programming์—๋งŒ ๊ด€์‹ฌ์„ ๋‘๊ณ  ์žˆ์—ˆ๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ์›ํ•˜๋Š” ์—…๋ฌด๋ฅผ ๋ถ„์„ํ•ด์„œ ๊ทธ์— ๋Œ€ํ•œ ๋กœ์ง์„ ๊ตฌํ˜„ํ•ด์™”๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ ์™ธ์—๋„ ๊ฐœ๋ฐœ์ž ๋˜๋Š” ๊ด€๋ฆฌ์ž๊ฐ€ ๊ฐœ๋ฐœ๊ณผ ์šด์˜์„ ์œ„ํ•ด ํ•„์š”๋กœํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๊ณ , ์ด๋Ÿฌํ•œ ์ฃผ ์—…๋ฌด ๋กœ์ง ์™ธ์˜ ์ฝ”๋“œ์—๋„ ๊ด€์‹ฌ์„ ๊ฐ€์ง€๊ฒŒ ๋˜์—ˆ๋‹ค. => ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฃผ ์—…๋ฌด(์‚ฌ์šฉ์ž์˜ ๊ด€์ )์—์„œ ๋‹ค๋ฅธ ๊ด€์ (๋กœ๊ทธ ์ฒ˜๋ฆฌ, ๋ณด์•ˆ ์ฒ˜๋ฆฌ, ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ๋“ฑ)์œผ๋กœ๋„ ๋‚ด์šฉ์ด ํ™•์žฅ๋œ๋‹ค. ์ด๋Ÿฐ ๋กœ์ง๋“ค์€ ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ ์•ž ๋’ค์— ์œ„์น˜ํ•˜๋Š” ๋ณด์กฐ ..
XML Configuration์„ Java Configuration์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ ํ”„๋กœ๊ทธ๋žจ์— ์ˆ˜์ •์‚ฌํ•ญ์ด ์ƒ๊ฒผ์„ ๋•Œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ-์ฃผ์ž…ํ•˜๋Š” ์„ค์ • ๋ถ€๋ถ„์„ ์†Œ์Šค ์ฝ”๋“œ์˜ ์™ธ๋ถ€์ธ xml์œผ๋กœ ๋นผ๋‘๋Š” ๊ฒƒ์ด ์œ ์ง€ ๋ณด์ˆ˜์— ํŽธ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ์—๋Š” ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์ด ๋„๋ฆฌ ์“ฐ์˜€๋‹ค. ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์ž๋“ค์€ ๊ทธ ๋ฐฉ๋ฒ•๋งˆ์ €๋„ xml์„ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ๋‹ค๋Š” ํŒ๋‹จ์„ ํ–ˆ๊ณ  ๊ทธ ๊ฒฐ๊ณผ ์š”์ฆ˜์—๋Š” ์ž๋ฐ” ์ฝ”๋“œ ์ž์ฒด์— ์–ด๋…ธํ…Œ์ด์…˜์„ ๋‹ฌ์•„์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด ๋” ๋งŽ์ด ์“ฐ์ด๊ณ  ์žˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์— ์žฅ๋‹จ์ ์ด ์žˆ์œผ๋‹ˆ ํ•„์š”์— ๋งž๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ๋‹ค๋งŒ ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐฉ์‹์„ ํ†ต์ผํ•ด์ฃผ๋Š” ํŽธ์ด ์ข‹๋‹ค. ์•ž์„œ ์ž‘์„ฑํ•œ ํฌ์ŠคํŒ…์—์„œ๋Š” ์Šคํ”„๋ง ์—†์ด DI, xml ์„ค์ • ํŒŒ์ผ ์ถ”๊ฐ€, xml์„ ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋‘ ์‚ดํŽด๋ณด์•˜๋‹ค. ์ด์ œ๋ถ€ํ„ฐ๋Š” xml์„ ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ๋ฐ”๊พธ๋Š” ๋ฐฉ์‹์„ ๋งˆ๋ฌด๋ฆฌ ์ง€์–ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค. ๊ฐ์ฒด์˜ ์ƒ์„ฑ์€ @Co..
์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•œ ๊ฐ์ฒด ์ƒ์„ฑ(@Component) ์ด์ „ ํฌ์ŠคํŒ…์„ ํ†ตํ•ด ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด DI๋ฅผ ํ•˜๋Š” ๊ณผ์ •์„ ๊ณต๋ถ€ํ•ด ๋ณด์•˜๋‹ค. (unounou.tistory.com/44?category=1183877) ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•œ DI (@Autowired, @Qualifier) ์ด์ „ ํฌ์ŠคํŒ…์—์„œ ๋นˆ์˜ ์ƒ์„ฑ๊ณผ ์ฃผ์ž…์— ๊ด€๋ จํ•œ ๋ถ€๋ถ„์„ ์†Œ์Šค ์ฝ”๋“œ ์™ธ๋ถ€์ธ xml์œผ๋กœ ๋นผ๋†“์€ ๊ณผ์ •์„ ์‚ดํŽด๋ณด์•˜๋‹ค. ์†Œ์Šค์— ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์„ ๋•Œ ์†Œ์Šค ์ž์ฒด๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ณ  xml์˜ ์„ค์ • ๋ถ€๋ถ„๋งŒ ์ˆ˜์ • unounou.tistory.com ๋นˆ์„ ์ƒ์„ฑํ•˜๋Š” ๋ถ€๋ถ„์€ xml์— ์žˆ๊ณ  ์ž๋ฐ” ์†Œ์Šค์— @Autowired๋ฅผ ๋ถ™์—ฌ ์ƒ์„ฑ๋œ ๋นˆ์„ ์„ธํŒ…ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋ฒˆ์—๋Š” ๋นˆ ์ƒ์„ฑ ๊ณผ์ • ์—ญ์‹œ ์ž๋ฐ” ์†Œ์Šค์—์„œ ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์ฒ˜๋ฆฌํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค. GridExamConsole.java @Component public..
์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•œ DI (@Autowired, @Qualifier) ์ด์ „ ํฌ์ŠคํŒ…์—์„œ ๋นˆ์˜ ์ƒ์„ฑ๊ณผ ์ฃผ์ž…์— ๊ด€๋ จํ•œ ๋ถ€๋ถ„์„ ์†Œ์Šค ์ฝ”๋“œ ์™ธ๋ถ€์ธ xml์œผ๋กœ ๋นผ๋†“์€ ๊ณผ์ •์„ ์‚ดํŽด๋ณด์•˜๋‹ค. ์†Œ์Šค์— ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์„ ๋•Œ ์†Œ์Šค ์ž์ฒด๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ณ  xml์˜ ์„ค์ • ๋ถ€๋ถ„๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค๋Š” ์ด์ ์ด ์žˆ์—ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, B2๋ผ๋Š” ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ B3์œผ๋กœ ๋ฐ”๋€Œ์–ด์•ผ ๋œ๋‹ค๋Š” ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•ด ๋ณด์ž. xml์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋นˆ ์ƒ์„ฑ ์ฝ”๋“œ๊ฐ€ ์žˆ์—ˆ์„ ๋•Œ, B2๋ฅผ B3๋กœ ์ˆ˜์ •ํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค. (์ˆ˜์ • ํ›„) ํ•˜์ง€๋งŒ ์ด ๊ณผ์ • ์—ญ์‹œ ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ์—ˆ๊ณ , ์ฝ”๋“œ์— ์•„์˜ˆ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ์•ˆํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์„ค์ • ํŒŒ์ผ์„ ๋ฐ”๊ฟ€ ํ•„์š”๊ฐ€ ์—†์ด, @Componect๊ฐ€ ๋ถ™์€ ๊ฐ์ฒด ์ž์ฒด๋ฅผ ๋ฐ”๊ฟ”๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค. => ์–ด๋…ธํ…Œ์ด์…˜ => ์„ค์ • ํŒŒ์ผ์„ ๋ฐ–์œผ๋กœ ๋นผ๋†“๋Š” xml ๋ฐฉ์‹์—์„œ, ์„ค์ •์„ ์•„์˜ˆ ์ฝ”๋“œ์— ์‹ฌ์–ด๋†“๋Š” ์–ด๋…ธํ…Œ์ด์…˜ ๋ฐฉ์‹์œผ๋กœ ํŠธ๋ Œ..
xml์„ ์ด์šฉํ•œ ์Šคํ”„๋ง DI ์ง€์‹œ์„œ ์ž‘์„ฑ(Spring Bean Configuration), IoC ์ปจํ…Œ์ด๋„ˆ ์‚ฌ์šฉํ•˜๊ธฐ ์•ž์„œ ์Šคํ”„๋ง ์—†์ด ์ง์ ‘ DI๋ฅผ ํ•ด๋ณธ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ํ•œ๋ฒˆ ์‚ดํŽด๋ณด๊ฒ ๋‹ค. Program.java public class Program { public static void main(String[] args) { /* ์Šคํ”„๋ง์—๊ฒŒ ์ง€์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค. Exam exam = new NewlecExam(); //์ƒ์„ฑ //ExamConsole console = new GridExamConsole(exam); //์ƒ์„ฑ์ž ์ด์šฉํ•œ ์กฐ๋ฆฝ ExamConsole console = new GridExamConsole(); console.setExam(exam); //setter๋ฅผ ํ†ตํ•œ ์กฐ๋ฆฝ(๊ฒฐํ•ฉ) */ ExamConsole console = ?; console.print(); } } ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ(new ์—ฐ์‚ฐ์ž ์ด์šฉ),..
์Šคํ”„๋ง ์—†์ด DI ํ•ด๋ณด๊ธฐ ** ์†Œ์Šค ๊ตฌ์„ฑ Exam์€ NewlecExam์˜ ์ธํ„ฐํŽ˜์ด์Šค ExamConsole์€ InlineExamConsole๊ณผ GridExamConsole์˜ ์ธํ„ฐํŽ˜์ด์Šค (์ „์ฒด ์†Œ์Šค ์ฝ”๋“œ๋Š” www.newlecture.com/ ์ฐธ๊ณ ) public class Program { public static void main(String[] args) { Exam exam = new NewlecExam(); ExamConsole console = new InlineExamConsole(exam); //InlineExamConsole์ด exam ๊ฐ์ฒด๋ฅผ ์กฐ๋ฆฝํ•˜๊ณ  ์žˆ๋‹ค => DI //ExamConsole console = new GridExamConsole(exam); console.print(); //์ด์ ์„ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜ } } ..
DI์™€ IoC ์ปจํ…Œ์ด๋„ˆ * DI(Dependency Injection) ์˜์กด์„ฑ ์ฃผ์ž…, ์ข…์†์„ฑ ์ฃผ์ž…์œผ๋กœ ์ฃผ๋กœ ๋ฒˆ์—ญ๋˜์ง€๋งŒ "๋ถ€ํ’ˆ ์กฐ๋ฆฝ"์ด๋ผ๊ณ  ๋ณด๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค. /*** ์ผ์ฒดํ˜•(Composition has a), ๋ถ™๋ฐ•์ดํ˜• ***/ class A{ private B b; public A(){ b = new B(); } } //B๋Š” A์˜ ๋ถ€ํ’ˆ(dependency) //A ์ƒ์„ฑ์‹œ์— ์ง์ ‘ B๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. /*** ์กฐ๋ฆฝํ˜•(Association has a) ***/ class A{ private B b; public A(){ } public void setB(B b){ this.b = b; } } //A ์ƒ์„ฑ์‹œ์— ์ง์ ‘ B๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์™ธ๋ถ€์—์„œ ์ƒ์„ฑ๋œ B๋ฅผ ๋ฐ›์•„์„œ A์— ๋„ฃ๋Š”๋‹ค. ์ผ์ฒดํ˜•๋ณด๋‹ค ์กฐ๋ฆฝํ˜•์˜ ๊ฒฐํ•ฉ๋ ฅ์ด ํ›จ์”ฌ ๋А์Šจํ•˜๊ณ , ๋ถ€ํ’ˆ..
์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ์†Œ๊ฐœ * ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ์†Œ๊ฐœ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋ž€ ์ž๋ฐ” ํ”Œ๋žซํผ์„ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. ๋™์ ์ธ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜(๊ธฐ์—…ํ˜• ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ) ๊ฐœ๋ฐœ ์‹œ์— ์Šคํ”„๋ง์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์ธ dependency injection(์˜์กด์„ฑ ์ฃผ์ž…), transaction management(ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ)๊ฐ€ ์ค‘์š”ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์›น ์„œ๋น„์Šค ๊ฐœ๋ฐœ์— ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์ž๋ฐ” ์—๋””์…˜(EE)์ด ์žˆ์ง€๋งŒ, ์‚ฌ์šฉ์˜ ๋ถˆํŽธํ•จ์œผ๋กœ ์ธํ•ด ์Šคํ”„๋ง์— ๋Œ€ํ•œ ์ˆ˜์š”๊ฐ€ ๋”์šฑ ์ปค์กŒ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋งŒ์œผ๋กœ ๊ด€๋ฆฌ๊ฐ€ ํŽธ๋ฆฌํ•˜๋‹ค๋Š” ์Šคํ”„๋ง์˜ ํŠน์„ฑ ๋•Œ๋ฌธ์ด๋‹ค. Java SE(์Šคํƒ ๋‹ค๋“œ ์—๋””์…˜)์— Java EE(์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์—๋””์…˜)์„ ์“ฐ๋Š” ๋Œ€์‹ ์—, Java SE์— Spring์„ ์–น์–ด์„œ ์ฃผ๋กœ..