본문 바로가기
개발/Java || Spring

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

by leedonggeun 2022. 11. 2.

제어의 역전(IoC)이란?

프로그램의 흐름(객체의 생성, 소멸과 같은 생명주기 등)을 개발자(Application)가 직접 제어하는 것이 아니라 외부(프레임워크)에서 제어할 수 있도록 하는 것입니다.

이를 위해 Spring Framework에서는 Application을 구성하는 객체(Bean)를 관리하는 데에 IoC Container를 이용합니다.
이 IoC Container를 이용하여 DI, AOP가 가능해집니다.

💡 DI는 IoC를 구현하기 위한 디자인 패턴 중 하나입니다.

1. IoC의 구현

1-1. 프로그래머가 직접 제어하는 방식

public class SampleController {
    private Book book;
    
    public SampleController() {
        this.book = new Book();
    }
}

객체를 직접 생성하기 때문에 객체의 생명주기를 개발자가 핸들링해야합니다.

1-2. 프레임워크에게 위임하는 방식

public class SampleController {
    @Autowired private Book book;
}

예제에서는 Autowired 애노테이션을 통해  직접 제어하는 방식과는 다르게 프레임워크에서 제어해주기 때문에 객체의 생명주기에 개발자가 직접 개입할 필요가 없습니다. 

2. 마치며...

대학 시절부터 현재까지 웹 개발을 시작한지 그래도 꽤 오래되었는데, 최근 아직도 많이 미흡하다는 생각이 들었습니다.
"나는 왜 DI를 통해 IoC를 구현하였는가?" 라는 의문조차 갖지않고(의문을 갖지 못할 정도로 생각이 없었나보다), 그저 편하니까 사용했으나 이번 기회에 조금 더 내가 왜 이렇게 구현하는가?에 대해 생각했다는 점이 나름... 칭찬+1?

댓글