Notice
Recent Posts
Link
Today
Total
07-05 05:20
๊ด€๋ฆฌ ๋ฉ”๋‰ด

dingdong coding

์ œ์–ด์˜ ์—ญ์ „๊ณผ ์˜์กด์„ฑ ์ฃผ์ž… ( Inversion of Control, Dependency Injection ) ๋ณธ๋ฌธ

๐ŸSpring/Basic

์ œ์–ด์˜ ์—ญ์ „๊ณผ ์˜์กด์„ฑ ์ฃผ์ž… ( Inversion of Control, Dependency Injection )

๐Ÿถ ๊ฐœ๋ฐœ๊ฐœ๋ฐœ ๐Ÿพ 2022. 1. 26. 05:59

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

 

ํ•˜์ง€๋งŒ ์ œ์–ด์˜ ์—ญ์ „์ด ์ ์šฉ๋œ ๊ฒฝ์šฐ, ๊ฐ์ฒด์˜ ์ƒ์„ฑ์„ ํŠน๋ณ„ํ•œ ๊ด€๋ฆฌ ์œ„์ž„ ์ฃผ์ฒด์—๊ฒŒ ๋งก๊น๋‹ˆ๋‹ค.

1. ์ œ์–ด์˜ ์—ญ์ „ ( Ioc, Inversion of Control )

: ์ œ์–ด์˜ ์—ญ์ „์ด๋ž€, ๋ง ๊ทธ๋Œ€๋กœ '์—ญ์œผ๋กœ ์ œ์–ดํ•˜๋Š” ๊ฒƒ'์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋ˆ„๊ฐ€ ์–ด๋–ค ๊ฒƒ์„ ์ œ์–ดํ•˜๋Š”์ง€ ์•Œ์•„๋ด…์‹œ๋‹ค.

 

๊ธฐ์กด = ๊ตฌํ˜„ ๊ฐ์ฒด ์Šค์Šค๋กœ, ๊ฐœ๋ฐœ์ž๊ฐ€ 

 

์—ญ์ „๋œ ์ฃผ์ฒด = ์™ธ๋ถ€ ์กฐ๋ฆฝ๊ธฐ (assembler)

+ Spring FrameWork์—์„œ๋Š” Ioc Container   

 

๋ฌด์—‡์„ ์ œ์–ด = ๊ตฌํ˜„ ๊ฐ์ฒด์˜ ์ƒ์„ฑ ๋ฐ ์—ฐ๊ฒฐ, ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ, ์ œ์–ด ํ๋ฆ„์— ๋Œ€ํ•œ ๊ถŒํ•œ

 

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

 

์ด์ฒ˜๋Ÿผ ์‚ฌ์šฉ์ž์˜ ์ œ์–ด๊ถŒ์„ ๋‹ค๋ฅธ ์ฃผ์ฒด์— ๋„˜๊ธฐ๋Š”, ์˜์กด๊ด€๊ณ„์˜ ๋ฐฉํ–ฅ์ด ๋‹ฌ๋ผ์ง€๊ฒŒ ๋˜๋Š” ๊ฒƒ์„ ์ œ์–ด์˜ ์—ญ์ „( Inversion of Control )์ด๋ผ ๋ถ€๋ฆ…๋‹ˆ๋‹ค, 

 

๋ชจ๋ฐ”์ผ ๊ฒฐ์ œ ์‹œ์Šคํ…œ์œผ๋กœ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž.

 

PaymentImpl์ด๋ผ๋Š” ๊ฒฐ์ œ์„œ๋น„์Šค๊ฐ€ ์žˆ๋‹ค. ํ•ด๋‹น ๊ฒฐ์ œ์„œ๋น„์Šค๋Š” MobilePay interface์—๋งŒ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด PaymentSystem์ด ์ง์ ‘ ๊ฒฐ์ œ์„œ๋น„์Šค์— ํ•„์š”ํ•œ ๊ตฌํ˜„๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•ด์ค€๋‹ค.

๋˜ํ•œ ์–ด๋–ค ๊ฒฐ์ œ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ• ์ง€๋„ ๊ฒฐ์ •ํ•ด์ค€๋‹ค. (์œ„์˜ ๊ทธ๋ฆผ์—์„œ๋Š” KaKaoPay)

 

- ์ด์ฒ˜๋Ÿผ ์ œ์–ด์˜ ์—ญ์ „์„ ์‚ฌ์šฉํ•˜๋ฉด DIP ์˜์กด ๊ด€๊ณ„ ์—ญ์ „ ์›์น™๋„ ๋งŒ์กฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

- ๊ตฌํ˜„ ํด๋ž˜์Šค์— ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ DIP๋ฅผ ์œ„๋ฐ˜ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ์ข‹์€ ์„ค๊ณ„๊ฐ€ ์•„๋‹ˆ๊ธฐ์— ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• ์€ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

- ์ด๋กœ์จ ๊ตฌํ˜„ํด๋ž˜์Šค, ๊ตฌํ˜„ ๊ฐ์ฒด๋Š” ์ž์‹ ์˜ ๋กœ์ง์„ ์‹คํ–‰ํ•˜๋Š” ์—ญํ• ๋งŒ์„ ๋‹ด๋‹นํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

Spring์˜ ์™ธ๋ถ€ ์กฐ๋ฆฝ๊ธฐ๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค์—๋งŒ ์˜์กดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋Œ€์‹  ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๊ณ  ์ฃผ์ž…ํ•ด์ฃผ๋ฏ€๋กœ DIP ์˜์กด๊ด€๊ณ„ ์—ญ์ „์›์น™์„ ๋งŒ์กฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

SOLID DIP ์˜์กด ๊ด€๊ณ„ ์—ญ์ „ ์›์น™ 

2022.01.24 - [Spring/OOP] - [ Object-Oriented Programming ] ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ


2. ์˜์กด์„ฑ ์ฃผ์ž… DI(Dependency Injection)

์˜์กด์„ฑ ์ฃผ์ž…์ด๋ž€ ๋ง ๊ทธ๋Œ€๋กœ ํด๋ž˜์Šค ์™ธ๋ถ€์—์„œ ์˜์กด๋˜๋Š” ๊ฒƒ์„ ๋Œ€์ƒ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์— ์ฃผ์ž…ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค. 

์ด๋Š” ๋Œ€์ƒ ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ๋„ ์™ธ๋ถ€์—์„œ ๋Œ€์ƒ ๊ฐ์ฒด์˜ ์™ธ๋ถ€ ์˜์กด ๊ฐ์ฒด๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค. 

 

- ์ •์ธ์ƒ, ์ฑ„ํ™์„ JAVA ๊ฐ์ฒด ์ง€ํ–ฅ ๋””์ž์ธ ํŒจํ„ด, ํ•œ๋น›๋ฏธ๋””์–ด p122

 

= ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜  ๋Ÿฐํƒ€์ž„์‹œ์ ์— ์™ธ๋ถ€์—์„œ ์‹ค์ œ ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•ด์„œ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์˜ ์‹ค์ œ ์˜์กด๊ด€๊ณ„๊ฐ€ ์—ฐ๊ฒฐ๋˜๋Š” ๊ฒƒ

 

์ฆ‰, ๋Ÿฐํƒ€์ž„ ์‹œ ์™ธ๋ถ€์—์„œ ์‹ค์ œ ๋™์ž‘์— ํ•„์š”ํ•œ ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์—์„œ ์ด๋ฅผ ์ฃผ์ž…๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ด ๋•Œ ์˜์กด ๊ด€๊ณ„๋Š” ์ •์  ํด๋ž˜์Šค ์˜์กด๊ด€๊ณ„, ๋™์  ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค ์˜์กด๊ด€๊ณ„๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค. 

 

    •  ์ •์ ์ธ ํด๋ž˜์Šค ์˜์กด๊ด€๊ณ„ : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ. import๋กœ ์˜์กด๊ด€๊ณ„ ํŒŒ์•… ๊ฐ€๋Šฅํ•œ ๊ด€๊ณ„

    •  ๋™์ ์ธ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค ์˜์กด๊ด€๊ณ„ : ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ์‹ค์ œ ์ƒ์„ฑ๋œ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค์˜ ์ฐธ์กฐ๊ฐ€ ์—ฐ๊ฒฐ๋œ ๊ด€๊ณ„ 

 

๋”ฐ๋ผ์„œ ์˜์กด์„ฑ ์ฃผ์ž…์€ ์ •์ ์ธ ํด๋ž˜์Šค ์˜์กด๊ด€๊ณ„๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ , ๋™์ ์ธ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค ์˜์กด๊ด€๊ณ„ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๋ฉฐ ํด๋ผ์ด์–ธํŠธ์˜ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” ๋Œ€์ƒ์˜ ํƒ€์ž… ์ธ์Šคํ„ด์Šค ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๋‹ค.

 

๋ชจ๋ฐ”์ผ ๊ฒฐ์ œ ์‹œ์Šคํ…œ์œผ๋กœ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž

 

ํ˜„์žฌ Client class์—์„œ๋Š” MobliePay ์ธํ„ฐํŽ˜์ด์Šค์—๋งŒ ์˜์กดํ•˜๋„๋ก ์ฝ”๋“œ๊ฐ€ ์งœ์—ฌ์ ธ ์žˆ๋‹ค.

public class Client{
    private MobliePay mobliePay;

    public void setPayment(MobliePay mobliePay){
        this.mobliePay = mobliePay;
    }

    public void payment(){
        System.out.println(mobliePay.toString());
    }
}

 

Client class์—์„œ setPayment ๋ฉ”์„œ๋“œ๋กœ ๊ฒฐ์ œ์ˆ˜๋‹จ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.  KaKaoPay ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

 

public class KaKaoPay implements MobliePay {
    public String toString(){
        return "KaKaoPay";
    }
}
public class Main {
    public static void main(String[] args){
        MobliePay m = new KaKaoPay();
        Client c = new Client();
        c.setPayment(m);
        c.payment(); // KaKaoPay
    }
}

 

๋งŒ์•ฝ ๋‹ค๋ฅธ ๊ฒฐ์ œ ์ˆ˜๋‹จ์„ ์ด์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์‹คํ–‰ ํด๋ž˜์Šค์ธ Main์—์„œ NaverPay ๊ฐ์ฒด๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค. 

์ด ๋•Œ Client๋Š” ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค. 

 

public class NaverPay implements MobliePay {
    public String toString(){
        return "NaverPay";
    }
}
public class Main {
    public static void main(String[] args){
        MobliePay m = new NaverPay(); //๊ฐ์ฒด ๋ณ€๊ฒฝ
        Client c = new Client();

        c.setPayment(m);
        c.payment(); // NaverPay
    }
}

 

์ฐธ์กฐ - ์ •์ธ์ƒ, ์ฑ„ํ™์„ JAVA ๊ฐ์ฒด ์ง€ํ–ฅ ๋””์ž์ธ ํŒจํ„ด, ํ•œ๋น›๋ฏธ๋””์–ด p123

 

์ด๋ฅผ ํ†ตํ•ด ์•Œ ์ˆ˜ ์žˆ๋Š” ์˜์กด์„ฑ ์ฃผ์ž…์˜ ์žฅ์ ์„ ์ •๋ฆฌํ•ด๋ณด์ž. 

์˜์กด์„ฑ ์ฃผ์ž… ์žฅ์  

  • ๊ฐ€๋…์„ฑ๊ณผ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ์ด ํ–ฅ์ƒ๋œ๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์•„์ง„๋‹ค.
  • ์ฝ”๋“œ๊ฐ€ ์œ ์—ฐํ•ด์ง€๊ณ  ๋ณ€๊ฒฝ์ด ์‰ฌ์›Œ์ง„๋‹ค.
  • ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๊ฐ€ ์ž˜ ์ด๋ค„์ง„๋‹ค.

Spring์—์„œ ์˜์กด์„ฑ ์ฃผ์ž… 

Spring Dependency Injection์ด๋ž€, ๊ฐ ๊ฐ์ฒด ๊ฐ„ ์˜์กด ๊ด€๊ณ„๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ •์˜ํ•œ Bean ๋“ฑ๋ก ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ž๋™ ์ฃผ์ž…ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ

 

์ผ๋ฐ˜์ ์ธ ๋‹ค์–‘ํ•œ ๊ธฐ์กด ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณด๋ฉด, Controller์—์„œ Service๋‚˜ Repository ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉ ์‹œ, new ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ†ตํ•ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ๋ฐ›์•„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

@Component, @Service, @Repository, @Controller ๋“ฑ์˜ ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค๋“ค์€ ์Šคํ”„๋ง ์‹คํ–‰ ์‹œ ์Šค์บ”์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ •์˜ํ•œ ์˜์กด์„ฑ ์ •๋ณด๋ฅผ ์ž๋™์œผ๋กœ bean ์„ค์ • ์ •๋ณด์— ๋“ฑ๋ก์„ ํ•˜๊ฒŒ ๋˜์–ด ์˜์กด์„ฑ ์ฃผ์ž…์ด ๋™์ž‘ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

 

๋˜ํ•œ Spring์˜ DI(Dependencies Injection)์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ์กด์ฝ”๋“œ๋ฅผ ์ „ํ˜€์†๋Œ€์ง€ ์•Š๊ณ  ์„ค์ •๋งŒ์œผ๋กœ ๊ตฌํ˜„ํด๋ž˜์Šค๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ex) Jdbc

์˜์กด์„ฑ ์ฃผ์ž… 3๊ฐ€์ง€ ๋ฐฉ๋ฒ• 

1 ) setter ์ฃผ์ž…

    •  ์˜์กด์„ฑ์„ ์ž…๋ ฅ๋ฐ›๋Š” Setter ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ์ด๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ ์ฃผ์ž…

    •  setter๋ผ ๋ถˆ๋ฆฌ๋Š” ํ•„๋“œ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ˆ˜์ •์ž ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ• 

    •  ์„ ํƒ, ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์˜์กด๊ด€๊ณ„์—์„œ ์‚ฌ์šฉ

@Controller
public class TestController {

    private TestService testService;

    @Autowired
    public void setTestService(TestService testService) {
        this.testService = testService;
    }

}

 

2 ) ํ•„๋“œ ์ฃผ์ž… 

    •  ๋ณ€์ˆ˜ ์„ ์–ธ๋ถ€์— @Autowired ์• ๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ž„

    •  ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ํ•„๋“œ์— ๋ฐ”๋กœ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ• 

    •  ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•˜์ง€๋งŒ ์™ธ๋ถ€์—์„œ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์„œ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ํž˜๋“ค๋‹ค๋Š” ๋‹จ์ ์ด ์กด์žฌ 

    •  DI ํ”„๋ ˆ์ž„ ์›Œํฌ๊ฐ€ ์—†์œผ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ํ•  ์ˆ˜ ์—†๋‹ค.

    •  ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

@Controller
public class TestController {

    @Autowired
    TestService testService;

}

 

3 ) ์ƒ์„ฑ์ž ์ฃผ์ž…

    •  ํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ํฌํ•จํ•˜๋Š” ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค๊ณ  ์ด๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ ์ฃผ์ž…

    •  ์˜์กด๊ด€๊ณ„๊ฐ€ ์‹คํ–‰ ์ค‘ ๋™์ ์œผ๋กœ ๋ณ€ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†์œผ๋ฏ€๋กœ ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ๊ถŒ์žฅ

    •  ์ƒ์„ฑ์ž ํ˜ธ์ถœ ์‹œ์ ์— ๋”ฑ 1๋ฒˆ๋งŒ ํ˜ธ์ถœ๋˜๋Š” ๊ฒƒ์ด ๋ณด์žฅ 

    •  ๋ถˆ๋ณ€, ํ•„์ˆ˜ ์˜์กด๊ด€๊ณ„์— ์‚ฌ์šฉ 

@Controller
public class TestController {
   
    // final ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ์ž์— ๊ฐ’์ด ์„ค์ •๋˜์ง€ ์•Š๋Š” ์˜ค๋ฅ˜๋ฅผ ์ปดํŒŒ์ผ ์‹œ์ ์— ๋ง‰์•„์ค€๋‹ค.
    private final TestService testService;

    @Autowired // ์ƒ์„ฑ์ž๊ฐ€ 1๊ฐœ๋งŒ ์žˆ์„ ๊ฒฝ์šฐ ์ƒ๋žต ๊ฐ€๋Šฅ
    public TestController(TestService testService) {
        this.testService = testService;
    }

}

 

Spring Framework๋Š” ์˜์กด์„ฑ ์ฃผ์ž…์‹œ "์ƒ์„ฑ์ž ์ฃผ์ž… ๋ฐฉ๋ฒ•"์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

 

์ด์œ  

: ๋Œ€๋ถ€๋ถ„ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ์‹œ์ ๊ฐ€์ง€ ๋ณ€๊ฒฝํ•  ์ผ์ด ์—†์œผ๋ฉฐ ๋ถˆ๋ณ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

: setter๋ฅผ ์ด์šฉํ•˜๊ฒŒ ๋˜๋ฉด setxx ๋ฉ”์„œ๋“œ๋ฅผ public์œผ๋กœ ์—ด์–ด๋‘์–ด์•ผ ํ•˜๋Š”๋ฐ ์ด๋Š” ๋ˆ„๊ตฐ๊ฐ€ ์‹ค์ˆ˜๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜๋„ ์žˆ๊ณ , ๋ณ€๊ฒฝํ•˜๋ฉด ์•ˆ๋˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์—ด์–ด๋‘๋Š” ๊ฒƒ์€ ์ข‹์€ ์„ค๊ณ„ ๋ฐฉ๋ฒ•์ด ์•„๋‹™๋‹ˆ๋‹ค.

: ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์ฃผ์ž… ๋ฐฉ์‹์€ ๋ชจ๋‘ ์ƒ์„ฑ์ž ์ดํ›„์— ํ˜ธ์ถœ๋˜๋ฏ€๋กœ ํ•„๋“œ์— final ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

 

'๐ŸSpring > Basic' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

JDBC vs JDBC Template vs JPA  (0) 2022.06.18
Spring Framework, Spring Boot  (0) 2022.06.18
Spring Bean, Spring Container  (0) 2022.06.17
MVC, Spring MVC  (0) 2022.06.16
์–ด๋…ธํ…Œ์ด์…˜ ์ •๋ฆฌ @  (0) 2022.06.14
Comments