본문으로 바로가기

Spring Framework DI(Dependency Injection)

category SPRING 2018. 9. 4. 15:33


의존이란?


class A가 제대로 작동하기 위해서 class B의 기능이 필요하다 

쉽게 말하면 ,A class 는 B class에 의존적이다 라고 한다 


그림1)


그림1은A가 B에 의존하고 있음을 나타낸다.

의존하고 있다는 것은 곧 A가 B를 사용하고 있다는 것이다.




쉬운 예제를 통해 알아 보겠습니다 

1.ICE 

1
2
3
4
5
6
7
8
9
package kim2;
 
public class Ice  implements Ame {
    public void get() {
        System.out.println("나는 존나 차가워");        
            }
 
}
 
cs


2.Hot

1
2
3
4
5
6
7
8
9
package kim2;
 
public class Hot implements Ame{
    public void get() {
System.out.println("나는 존나 뜨거워");        
    }
 
}
 
cs

3.Coffee

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package kim2;
 
public class Coffee {
    private Ame ame;
    
    public Coffee(Ame ame) {
        this.ame=ame;
    }
    public  void coffeeType() {
        ame.get();
    }
 
}
 
cs

4.Main

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package kim2;
 
public class Main {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        Hot hot=new Hot();
        Ice ice=new Ice();
        
        Coffee coffee=new Coffee(hot);
        
        coffee.coffeeType();
    }
 
}
 
cs

5.interface Ame

1
2
3
4
5
6
7
8
package kim2;
 
public interface Ame {
 
    public void get();
 
}
 
cs
s

이코드를 보면  hot과 ice클래스 코드가 짧아서 왜구지 이렇게 쓰는 건가? 

하시겠지만  코드가 길어졌을때는 변경할 코드가 적어서 효율적으로 사용할 수 있습니다

코드를 이해하는데 있어서  도움이 되는 그림 ~!


스프링의 DI(의존성 주입)설정

DI 방식1 : 생성자 방식


말그대로 생성자를 통해 생성될 때

 파라미터로 넘겨받아 의존성을 주입해주는 방식.

 생성자함수의 파라미터의 순서대로 넣어줘야 한다.


DI 방식2 : 설정 메소드 방식


스프링에서는 생성자외에도 set으로 시작하는 프로퍼티 설정메소드 주입받는 방법을를 지원함.

1.메소드 이름은 set으로 시작

2.set뒤에 프로퍼티 이름의 첫글자는 대문자 

3.하나의 파라미터를 가짐

4.파라미터의 타입이 프로퍼티의 타입


두 방식의 장점


-생성자 방식= 빈객체를 생성하는 시점에 모든 의존 객체가 주입된다 .

-설정 메서드 방식=<property>태그의 name속성을 통해 어떤 의존 객체가 주입되는지 알 수 있다.


2개 이상의 설정 파일 사용


스프링으로 어플리케이션을 개발하게 되면 많은 빈(Bean)을 설정하는 경우가 흔하게 발생하는데

이러한 빈들을 하나의 xml파일로 관히하기가 어려울 것이다

그르ㅐ서 스프링은  두개 이상의 설정파일을 이용해서 컨테이너를 생성할 수 있다








'SPRING' 카테고리의 다른 글

스프링 개발 환경 구축 1-1  (0) 2018.10.18
DB 연결 테스트,Controller와 View의 연결  (0) 2018.09.05
주의 할 사항  (0) 2018.09.04
스프링 실행 과정(1)  (0) 2018.09.04
[스프링 개발환경 설정 ]  (0) 2018.09.04