web 개발/spring

<spring> IOC(제어의 역전), DI(의존성 주입)

잼추 2024. 5. 18. 04:20

IOC( Inversion Of Control) 제어의 역전

소프트웨어 설계 원칙 중 하나로 프로그래밍에 있어 객체의 생성 및 관리 책임을 개발자에서

전체 애플리케이션 또는 프레임워크에 위임하는 디자인 원칙

 

프레임워크를 쓰면 프레임워크의 틀안에서 개발자가 짜둔 어플리케이션 코드를 호출하게 된다.

제어하는 역할을 프레임워크가 가지게 된다. 이를 제어의 역전이라고 함

 

IOC 구현 방법

  • Factory Pattern
  • Template Method Pattern
  • Service Locator Pattern
  • Depedency Injection(DI)

IOC 장점

  • 코드의 유연성과 재사용성 증가
  • 테스트 용이
  • 결합도가 낮아져 유지보수 용이

IOC 단점

  • 코드의 가독성 떨어짐, 몰이해 발생
  • 초기설정과, 성능 이슈 발생가능

 

DI(Dependency Injection) 의존성 주입

IOC 구현 방법 중 하나

객체 생성 및 관리에 대한 책임을 ioc 컨테이너가 가지며, 필요한 객체를 직접 생성하거나, 외부에서 주입 받는 방식

 -> 생성자 주입, 속성 주입, 메소드 주입 방식

 

생성자 주입 (가장 권장 되는 방식!)

@Autowired를 통해 사용 가능

생성자를 1개만 두고, @Autowired 생략 가능

public class Injection {
	private InjectionService injectionService;

	// 생성자 DI    
    // @Autowired -> Spring4.3부터는 @Autowired 생략 가능    
    public Injection(InjectionService injectionService) {
    	this.injectionService = injectionService;
    }
}

 

@RequiredArgsConstructor 를 함께 사용하면 생성자를 생략 가능 하여 코드 생략가능

@RequiredArgsConstructor
public class Injection{
	//private 설정!!!
	private InjectionService injectionService
}

 

해당 글 참조

https://backendcode.tistory.com/249