[OOP] 결합도의 개념, 결합도 낮추기,의존성 주입(DI)

2026.07.14. 14:13

A 클래스가 B 클래스에 의존하는 상황에서 

  • B의 코드를 변경했을 때 A 클래스의 코드도 변경해야한다 -> 결합도 높음.

  • B의 코드를 변경했을 때 A 클래스의 코드도 변경하지 않아도 된다. -> 결합도 낮음.

** 의존성이 있다고 해서 나쁜 것은 아님.

A 클래스에서 B 클래스를 새로 생성하는 코드 

public class A {
    private B b;
    
    public A() {
       this.b = new B();
    }
}

--> 

public class A {
    private B b;
    
    public A(B b) {
       this.b = b;
    }
}

이렇게 수정하면 B 클래스를 수정하더라도 A 클래스를 수정할 필요 없음. 

** 이런 방식으로 주입을 하는 것을 DI(의존성 주입이라고 함)

DI의 장단점

  • 장점

    • 결합도 낮춤

    • 나중에 B의 생성자가 바뀌어도 A를 바꿀 필요가 없음

    • B가 바뀌면 이 클래스만 따로 컴파일해서 배포 가능 -> 다만 요새는 잘 안함.

  • 단점

    • 편의성 - 일일히 A 클래스를 B 클래스에서 만들어야함.

    • 프로그래머의 원래 의도를 잘 보여주는 클래스 : 원 의도는 A 클래스를 만들면 B 클래스를 자동으로 만들어야하는 것일 수도 있음.

--> 결과적으로 어떤 방식이 무조건 옳다고 할 수 없음.