[Spring] IoC와 DI

봉성은·2025년 4월 1일
0

스프링(Spring)

목록 보기
1/4
post-thumbnail

1. IoC

  • IoC(Inversion of Control), 즉 제어 역전은 스프링의 핵심적 기능으로서 객체의 생명주기를 관리하고 DI(Dependency Injection), 즉 의존성 주입을 통해 각 서비스들 간의 의존성을 맞춰준다.
  • 객체의 생성과 생명주기 관리를 개발자가 아닌 프레임워크가 담당함으로써 코드의 결합도를 낮춰 유지보수가 쉬워진다.

2. DI

  • DI(Dependency Injection)란?

    • IoC를 구현하는 방법 중 하나로, 객체 간의 의존성을 외부에서 주입하는 방식이다.
  • 의존성 주입 방식

    • 생성자 주입 (Constructor Injection)
      생성자의 호출 시점에 1회 호출되는 것이 보장되므로 주입받은 객체가 변하지 않거나 반드시 객체의 주입이 필요한 경우에 사용

      @Service
       public class TodoService{
      	private final TodoRepository todoRepository;
      
        	@Autowired
        	public TodoService(TodoRepository todoRepository){
        		this.todoRepository = todoRepository
        	}
       } // 주입 함수 명 == 메인 함수 명
      @Service
       @RequiredArgsConstructor
       public class TodoService{
       	private final TodoRepository todoRepository;
       } //초기화되지 않은 final 필드나, @NonNull이 붙은 필드에 대해 생성자를 생성
    • 세터(Setter Injection) 주입
      생성자 주입과는 달리 주입받는 객체가 변경될 가능성이 있을 때 사용

      @Service
       public class TodoService{
       	private TodoRepository todoRepository;
      
       	@Autowired
       	public void setTodoRepository(TodoRepository todoRepository) {
      		this.todoRepository = todoRepository;
          }
       } // 주입 함수 명 ≠ 메인 함수 명
    • 필드 주입 (Field Injection)
      코드가 간결해지는 대신 외부에서 접근이 불가능필드의 객체를 수정할 수 없어서 잘 사용하지 않음

      @Service
       public class TodoService{
      	 @Autowired
       	 private TodoRepository todorepository;
      }



profile
안녕하세요

0개의 댓글