스프링의 핵심 IOC, DI, AOP

SeungMin·2023년 6월 12일
0

IOC(Inversion Of Control) 제어역전

IoC란 사용할 객체를 직접 생성하지 않고 객체의 생명주기 관리를 외부에 위임하는 것을 말한다. 여기서 '외부'란 Spring Container 또는 IoC 컨테이너를 의미한다. 즉, 객체의 관리를 컨테이너에 맡겨 객체의 제어권이 넘어간 것을 제어역전이라고 부른다.

DI(Dependency Injection) 의존성 주입

의존성 주입이란 제어 역전의 방법중 하나로, 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식을 의미한다.

스프링에서 의존성을 주입받는 방식은 3가지가 있다.

  • 생성자를 통한 의존성 주입
  • 필드 객체 선언을 통한 의존성 주입
  • setter 메서드를 통한 의존성 주입

생성자를 통한 의존성 주입

@RestController
public class DIController{
	MyService myService;
    
    @Autowired
    public DIController(MyService myService) {
    	this.myService = myService;
    }
}

필드 객체 선언을 통한 의존성 주입

@RestController
public class DIController{
	@Autowired
	MyService myService;
}

setter 메서드를 통한 의존성 주입

@RestController
public class DIController{
	MyService myService;
    
    @Autowired
    public void setMyService(MyService myService) {
    	this.myService = myService;
    }
}

스프링에서는 생성자를 통해 의존성을 주입받는 방식을 권장하고 있다.
그 이유에 대해서는 다른 블로그 포스팅을 참고했다.
https://mangkyu.tistory.com/125

AOP(Aspect-Oriented Programing) 관점지향 프로그래밍

AOP는 어떤 기능을 개발할때 핵심기능(비즈니스 로직)과 부가기능(로깅)으로 나누고, 핵심기능인 비지니스 로직에서 반복되는 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화해 삽입하는 방식을 AOP라고 한다. 즉 부가기능을 모듈화해서 개발자는 핵심기능인 비즈니스 로직을 구현하는 데만 집중할 수 있게 도와주는 것이다.

스프링은 AOP기능을 디자인 패턴 중 하나인 프록시 패턴을 통해 제공하고 있다.

profile
Backend

0개의 댓글