Skip to content

Latest commit

 

History

History
74 lines (50 loc) · 2.36 KB

05.자원을 직접 명시하지 말고 의존 객체 주입을 사용하라.md

File metadata and controls

74 lines (50 loc) · 2.36 KB
  • 의존성 주입의 필요성

    public class Car {
    
    }
    public class Racing {
    	private Car car;
    
    	public Racing(){
    		this.car = new Car();
    	}
    }
    • Car와 Racing 클래스가 강하게 결합되어 있다.

      IF) Car가 아닌 Bike가 Racing에 참여한다면? ⇒ 유연성이 떨어진다!

    • 객체가 아니라 클래스 사이에 관계가 맺어져 있다.

      Racing에 참여할 Vehicle에 대한 관심이 분리되지 않았기 때문! ⇒ 어떠한 객체를 사용할지에 대한 책임을 넘겨버리자! (IoC)

  • 해결 방안

    // 다형성을 위한 인터페이스 구현
    
    public interface Vehicle {
    
    }
    public class Car implements Vehicle {
    
    }
    public class Racing {
    
    	private Vehicle vehicle;
    
    	public Racing(Vehicle vehicle){
    		this.vehicle = vehicle;
    	}
    }
    // DI Container에서 
    
    Car car = new Car(); // Bean 생성
    
    Racing racing = new Racing(car); // 의존성 주입
  • 의존성 주입(DI) 이란?

    • 객체 사이의 관계를 외부에서 결정
    • 인터페이스를 통해 클래스 간의 의존성을 없애고 어플리케이션 실행 시점에 객체를 연결
    • 클래스가 하나 이상의 자원에 의존하고, 사용하는 자원이 클래스 동작에 영향을 준다면 DI를 사용하는 것이 유리!
  • DI의 장단점

    • 장점: 유연성, 재사용성, 테스트 용이성
    • 단점: 코드의 가독성을 저해할 수 있다. ⇒ Spring 같은 DI Framework 사용하면 해결!
  • 참고