본문 바로가기

Spring/개념 정리

[Spring] DI (Dependency Indection), 결합도

결합도와 인터페이스

결합도란 하나의 클래스가 다른 클래스와 얼마나 많이 연결되어 있는지를 나타내는 것!

클래스간의 연결이 많다면 하나의 수정을 위해 많은 클래스를 수정해야 할것이다. 스프링의 사용목적은 클래스간의 결합도를 낮추는 것이다.

예시를 들어본다면,

public class HelloEn {
    public void hello() {
        System.out.println("hello");
    }
}

 

public class HelloKr {
    public void hello() {
        System.out.println("안녕");
    }
}

 

public class Main {
    public static void main(String[] args) {
        HelloEn en = new HelloEn();
        en.hello();
    }
}

 

클래스의 객체를 생성해 영어를 출력했다. 이것을 한국어로 바꾸기 위해서는 아래처럼 모든 부분을 바꿔줘야한다.

public class Main {
    public static void main(String[] args) {
        HelloKr kr = new HelloKr();
        kr.hello();
    }
}

 

이러한 코드의 결합도를 낮추기 위해서 다형성을 이용한다.

public interface Hello {
    public void hello();
}

 

인터페이스를 만들고 상속받는 함수들을 구현한다.

public class HelloEn implements Hello {
    @Override
    public void hello() {
        Syetem.out.println("hello");
    }
}

 

public class HelloKr implements Hello {
    @Override
    public void hello() {
        Syetem.out.println("hello");
    }
}

 

public class Main {
    public static void main(String[] args) {
        Hello h = new HelloEn();
        h.hello();
    }
}

 

영어 출력을 한국어로 바꾸기 위해서는 HelloEn -> HelloKr 의 수정만 하면 된다. 다형성을 이용하여 결합도를 낮춘것이다.

 

DI (Dependency Injection)

DI란 객체를 외부에서 생성한 후 주입 시켜주는 방식으로 모듈간의 결합도가 낮아지게 만든다.

위는 일체형, 아래는 조립형을 뜻한다. 만약 B라는 부품을 갈아끼운다고 한다면, 일체형으로 통채로 바꾸는것보다 B만을 갈아끼우는게 좋다.

아래의 B라는 부품을 Dependency, 부품을 A에 끼우는 동작을 Injection이라고 볼 수 있다.

 

객체 주입 시에는 두가지 방법이 있는데, setter를 이용하는 방법과 생성자를 이용하는 방법이다.

 

일체형보다 조립형이 불편한 점은 ‘조립하는 일’이 추가되는 것이고, 이것을 편하게 하려면 조립을 해주는 서비스를 받으면 된다. 여기서 부품을 조립해주는 역할을 스프링이 하는 것이다.

원하는 부품이 무엇인지, 부품들이 어떤 결합을 하기를 원하는지만 설정해주면 스프링은 결과를 내줄것이고, 가져다 쓰면 된다.

 

* 출처 - youtube/뉴렉처

 

'Spring > 개념 정리' 카테고리의 다른 글

[Spring] IoC 컨테이너  (0) 2021.10.11