본문 바로가기
java/spring

DI(Dependency Injection)

by 일상코더 2022. 10. 9.

DI(Dependency Injection) 

   

     - 스프링이 다른 프레임워크와 차별화되어 제공하는 의존 관계 주입 기능으로 

       객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식이다.

       DI(의존성 주입)을 통해서 모듈 간의 결합도가 낮아지고 유연성이 높아진다.

 

 

객체 생성 방법

 

방법1 ex)

class Dogs{
    private String DogName;
    private int DogAge;

    public Dogs(){

    }

    public Dogs(String DogName, int DogAge){
        this.DogName = DogName;
        this.DogAge = DogAge;
    }

    public String getDogName(){
        return this.DogName;
    }
    public int getDogAge(){
        return this.DogAge;
    }
    public void setDogName(String dogName){
        this.DogName = dogName;
    }
    public void setDogAge(int dogAge){
        this.DogAge = dogAge;
    }
}

public class Main {
    public static void main(String[] args) {

        //방법 1
        //New 생성자를 통해서 직접 생성
        Dogs dog1 = new Dogs("멍멍이", 1);

        System.out.println(dog1.getDogName() +" "+ dog1.getDogAge() +"살");
        //setter 사용
        Dogs dog2 = new Dogs();
        dog2.setDogName("뭉뭉이");
        dog2.setDogAge(1);
        System.out.println(dog2.getDogName() + " " + dog2.getDogAge() + "살");

    }
}

Main Class는 Dogs를 의존하고 있고, MainClass에서 직접 Dogs클래스를 생성해서 사용한다.

 

 

방법2 ex)

 

 

 

직접 객체를 생서하지 않고 GenericXmlApplicationContext을 사용하여 객체(bean)을 외부에서 얻어와서 호출

property 의 name 속성이 mydogs class의 필드 멤버 변수 값을 설명해줌

 

실행 결과

 

첫번째 강아지 이름은 순덕입니다.

두번째 강아지 이름은 나비입니다.

 

첫번째 강아지 이름은 1살입니다.

두번째 강아지 이름은 2살입니다.

 

 

첫번째 방법과 두번째 방법을 정리하면 , DI(의존성 주입)을 적용한 두번재 예제는 직접 객체를 생성하지 않고,

외부에서 객체를 생성후 사용할 객체에 주입을 시켜주어 사용한다는 점이다.

 

두번재 방법을 사용하면 강아지가 아닌 다른 동물의 정보를 보고싶을때 메인 클래스의 소스를 고칠 필요없이

설정 파일만 바꿔주면된다. 스프링에서 사용하는 DI가 확장성이나 유지보수에 용이하다는 점을 잘 나타내주는것 같다. 

 

 

'java > spring' 카테고리의 다른 글

Spring Security 작동 순서  (0) 2022.10.13
스프링 부트 동작 원리  (0) 2022.10.09
Spring IoC  (0) 2022.10.09
Memo api 구현  (0) 2022.10.07
Spring 서버에서 객체를 JSON으로 변환 후 응답하기  (0) 2022.10.06

댓글