TIL

[TIL] 20240118 Spring Ioc, DI

yjyj0101 2024. 1. 18. 22:52

1. IoC(제어의 역전)

메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것

장점 : 객체 간의 결합도를 줄이고 유연한 코드를 작성 및 가독성 및 코드 중복, 유지 보수가 편해짐

  • 강한 결합 : controller -> service -> repository
  • 의존성 주입 후 : repository -> service -> controller

 

출처 : https://velog.io/@calaf/Spring-IoC-DI

 

2. DI(의존성 주입)

객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식

장점 : 모듈 간의 결합도가 낮아지고 유연성이 높아짐

 

  • 방법
    1. 필드
      @RestController
      public class PostController {
      
      	@Autowired
          private PostService postService;    
      }

    2. 메서드 : setter
      public class A {
          private B b;
          
          public void setB(B b) {
              this.b = b;
          }
      }
    3. 생성자 : New 생성자
      public class A {
          private B b;
          
          public A(B b) {
              this.b = b;
          }
      }
생성자 주입방식을 선호하는 이유
  • NullPointerException의 발생을 막는다.
  • 불변성 활용가능(final로 선언)
  • SRP 단일 책임 원칙을 지킬 수 있도록 유도한다.