TIL

[WIL] 220724-220731

항성 2022. 7. 31. 20:08
반응형

 

일주일 회고 (개선할 점)

1. 오류 해결 후, 문제가 발생한 지점과 해결한 방법 기록.

2. 구현할 때 여러 가지 방법 중에서 해당 방법을 선택한 이유 기록.

    (각 방법들의 장단점, 선택한 방법이 더 적합한 이유)

3. 매일 간략히 공부했던 것들 키워드 기록

 

필수 키워드

DI (Dependency Injection, 의존성 주입)

  • 객체를 직접 생성하지 않고, 객체를 외부에서 생성하여(spring 프레임워크) 사용하려는 주체 객체에게 주입시켜주는 방식.
  •  장점
    1. 의존성으로부터 격리시켜 코드 테스트에 용이하다.
    2. DI를 통하여, 불가능한 상황을 Mock과 같은 기술을 통하여 안정적으로 테스트 가능하다.
    3. 코드를 확장하거나 변경할 때 영향을 최소화한다.
    4. 순환 참조를 막을 수 있다.
@RestController

public class MyController {
    private MyService service = new MyService(); // DI가 없을 때. 객체를 생성하여 얻음

    @RequestMapping("/welcome")
    public String welcome() {
        return service.retrieveWelcomeMessage();
    }
}
@Component
public class MyService {
    public String retrieveWelcomeMessage(){
       return "Welcome to InnovationM";
    }
}

@RestController
public class MyController {

    @Autowired
    private MyService service; // DI가 있을 때. annotation으로 객체를 얻는다.

    @RequestMapping("/welcome")
    public String welcome() {
        return service.retrieveWelcomeMessage();
    }
}

 

 

IOC (Inversion Of Control, 제어의 역전)

  • 일반적으로 자바 프로그램에서는 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 직접 생성(new)하고 조작한다. (객체를 직접 생성하여 메서드 호출)
  • IOC가 적용된 경우, 사용자가 직접 객체를 생성하지 않고, 사용자의 제어권을 다른 주체(spring 프레임워크)에게 넘김. 이를 IOC라고 부름.
  • 사용하는 객체는 사용할 객체가 어떻게 만들어졌는지는 알 필요 없음
  • 스프링에서는 모든 의존성 객체를 스프링이 실행될 때 만들어주고, 필요한 곳에 주입.
  • Spring IOC 컨테이너 : 스프링이 생성한 객체인 Bean을 모아둔 통.

  • IOC를 적용하지 않은 경우

    1. controller에서 service 객체를 만들어 호출
    2. service에서 repository 객체를 만들어 호출

 

  • IOC를 적용한 경우

 

  1. repository에서 ‘생성자’를 이용해 단 한 번만 객체 생성. 모든 곳에서 재사용.
  2. service에서 ‘생성자’를 이용해 단 한 번만 객체 생성. 모든 곳에서 재사용. repository 객체를 주입 받음.
  3. controller에서 service를 주입 받음.

 

Bean

  • DI를 사용하기 위해서는 객체 생성이 우선되어야 했다. 스프링 프레임워크가 이 객체를 생성해줌. 이 객체를 Bean이라고 부름.
  • 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트.
  • 간단히 말하면 스프링이 생성해주는 객체.
  • (스프링이 IOC 방식으로 관리하는 오브젝트)
반응형

'TIL' 카테고리의 다른 글

[TIL] 220826-220828  (0) 2022.08.27
[TIL] 220801-220807  (0) 2022.08.07
[WIL] 220711-220717  (0) 2022.07.17