💡 스프링의 핵심 가치 : 
어플리케이션 개발에 필요한 기반을 제공해서, 
개발자가 비즈니스 로직 구현에만 집중할 수 있게 하자!
  1. 제어 역전 (IoC, Inversion of Control)
- keyword : 제어권
- meaning : 객체 관리 제어권을 스프링 컨테이너(or IoC 컨테이너)에게 위임한다.

: 기존 자바의 개발 방식과 달리, 객체의 생명주기외부에 위임한다. : 여기에서 외부란, 스프링 컨테이너 또는 IoC 컨테이너를 의미한다.

: 제어의 역전을 통해 의존성 주입(DI), 관점 지향 프로그래밍(AOP) 등이 가능해진다.

  1. 의존성 주입 (DI)
- keyword : IoC의 방법
- how : (1) 생성자 (2) 필드 객체 선언 (3) setter 

(1) 생성자를 통한 주입 : spring 최신 버전의 경우 private final 로 넣을 수 있다.

@RestController
public class RegistrationController {

  private final RegistrationService registrationService;
	
	public RegistrationController(RegistrationService registrationService) {
     this.registrationService = registrationService;
  }

}

(2) 필드 객체 선언 : @AutoWired를 통해 맴버 객체로 선언한다.

@RestController
public class RegistrationController {

  @AutoWired
  private RegistrationService registrationService;

}