반응형
일주일 회고 (개선할 점)
1. 오류 해결 후, 문제가 발생한 지점과 해결한 방법 기록.
2. 구현할 때 여러 가지 방법 중에서 해당 방법을 선택한 이유 기록.
(각 방법들의 장단점, 선택한 방법이 더 적합한 이유)
3. 매일 간략히 공부했던 것들 키워드 기록
필수 키워드
DI (Dependency Injection, 의존성 주입)
- 객체를 직접 생성하지 않고, 객체를 외부에서 생성하여(spring 프레임워크) 사용하려는 주체 객체에게 주입시켜주는 방식.
- 장점
- 의존성으로부터 격리시켜 코드 테스트에 용이하다.
- DI를 통하여, 불가능한 상황을 Mock과 같은 기술을 통하여 안정적으로 테스트 가능하다.
- 코드를 확장하거나 변경할 때 영향을 최소화한다.
- 순환 참조를 막을 수 있다.
@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를 적용하지 않은 경우
-
- controller에서 service 객체를 만들어 호출
- service에서 repository 객체를 만들어 호출
- IOC를 적용한 경우
- repository에서 ‘생성자’를 이용해 단 한 번만 객체 생성. 모든 곳에서 재사용.
- service에서 ‘생성자’를 이용해 단 한 번만 객체 생성. 모든 곳에서 재사용. repository 객체를 주입 받음.
- 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 |