본문 바로가기
프레임워크/Spring

의존성 주입(Dependency Injection)(강하고 느슨한 결합 관계)

by 프로그래밍 공부 2023. 4. 11.

 우선 의존성에 대해 알아보자.

 

예를 들어 A와 B가 있다고 했을 때, A가 수정되었을 때, B 또한 이 영향을 받는다는 것.

 

이것이 바로 의존성을 갖는 것이다. 

 

의존성을 갖는 관계에서는 또 강한 결합과 느슨한 결합이라는 관계로 나뉜다.

 

강한 결합 관계는 구현 클래스를 직접 참고하는 것이다.

 

public class Desktop{
	public void CodingDesktop(){};
}

public class Programmer {
	private Desktop Computer;
    
    public void code(){
    	Desktop.CodingDesktop();
        
    }
}

 

위와 같이 Programmer 클래스는 Desktop이라는 구현된 클래스를 직접 참조하고 있기 때문에

 

강한 결합 상태라고 할 수 있다.

 

하지만 여기서 Desktop을 Laptop으로 변경해야 한다면?

 

그렇다면 Desktop 클래스 내의 메소드 또한 CodingLaptop()으로 변경될 것이고,

 

이는 Programmer 클래스 내에서도 수정을 요하게 된다. 

 

그렇다면 느슨한 결합 관계는 어떨까?

 

위의 강한 결합 관계에서 생각할 수 있겠지만, 

 

Desktop이든 Laptop이든 코딩만 되면 되는데 굳이 Programmer 클래스에 따로 수정을 가해야 할까?

 

Programmer는 컴퓨터만 있으면 되는디

 

그래서 Computer라는 인터페이스를 만들어 이를 상속하는 Desktop, Laptop 클래스를 생성한다. 

 

public interface Computer{
	void coding();
}


public class Laptop implements Computer{
	@Override
    public void coding(){}
}

public class Desktop implements Computer{
	@Override 
    public void coding(){}
}


public class Programmer{
	private Computer computer = new Laptop();
    //private Computer computer = new Desktop();
    
    public void Build(){
    	computer.coding();
    }
}

 

구현 클래스를 직접 참조한 강한 결합 관계와는 달리 인터페이스를 통해 Laptop, Desktop 클래스를

 

computer 인스턴스를 통해 참조할 수 있다. 이렇게 구현 클래스를 직접 참조하는 것이 아닌, 

 

'추상화'를 통해 참조하는 것을 느슨한 결합 관계 라고 할 수 있다.

 

- 구체적으로 구현된 클래스

 

- 추상 클래스

 

- 인터페이스

 

순으로 결합 관계가 느슨해진다고 볼 수 있다.

 

 

라고 이해했다.