[Spring] IOC & DI

이다혜·2023년 11월 22일
0

Spring

목록 보기
15/27
post-thumbnail

IOC (Inversion Of Control)

프로그램의 흐름을 개발자가 아닌 프레임워크가 주도한다.
객체의 생성부터 생명주기 관리를 컨테이너가 도맡아서 한다.

즉, 제어권이 컨테이너에게 넘어간다고 해서 제어의 역전이라고 한다.

DI ( Dependency Injection)

객체를 직접 생성하는 것이 아니라 외부에서 생성한 후 주입(의존성 주입) 시키는 방식이다.

이를 통해 모듈 간의 결합도가 낮아지고 유연성이 높아진다.

의존성 주입 방법 3가지

1. setter 주입

의존성을 입력받는 setter 메서드를 만들고 이를 통해 의존성을 주입한다.

@Component
public class ArticleController {

   private ArticleService articleService;
   
   public void setArticleService(ArticleService articleService) {
       this.articleService = articleService;
   }
}

2. 생성자 주입

필요한 의존성을 포함하는 클래스의 생성자를 만들고 이를 통해 의존성을 주입한다.

@Component
public class ArticleController {

   private ArticleService articleService;
   
   public ArticleController(ArticleService articleService) {
       this.articleService = articleService;
   }
}

롬복의 @RequiredArgsConstructor를 사용하면 private final 키워드가 붙은 필드들을 가지고 생성자를 자동으로 생성해줘서 생성자 코드를 생략할 수 있다.

@Component
@RequiredArgsConstructor
public class ArticleController {

   private final ArticleService articleService;

}

3. 필드 주입

의존성을 주입할 변수에 @Autowired를 붙인다.

@Component
public class ArticleController {

	@Autowired
   private ArticleService articleService;

}

💡 권장하는 방법은 생성자 주입이다.

0개의 댓글