본문 바로가기
개발자 전향 프로젝트

[Spring] DI가 뭐길래? IOC 는 또 뭐고? <쉬운 개념 정리>

by 샘오리 2022. 3. 19.
728x90
반응형

우리가 일상생활에서 가장 많이 쓰는 휴대기기인 스마트폰.

이 스마트폰의 배터리는 분리형과 일체형으로 나눌 수 있다.

 

지금은 일체형이 훨씬 더 보편적인 반면 과거에는 분리형이 압도적으로 많았다. 

그때는 분리형이었기 때문에 배터리에 문제가 생기면 그 고장 난 배터리만

새 배터리로 갈아끼우면 해결 됐다.

 

반면 요즘 쓰는 일체형 스마트폰 같은 경우 배터리가 고장 나면 사실상 액정부터 해서 다 바꿔야 한다.

왜냐면 일체형이라는 것은 결국 한몸이라는 뜻이고 분리할 수 없는 사이를 의미하기 때문이다.

이를 조금 유식한 말로 결합력이 높다고 할 수도 있다. 

 

물론 요즘 배터리가 좋아져서 고장도 거의 안나고 어쩌다 고장 나도 스마트폰을 금방 교체하는 추세이기 때문에

괜찮지만, 잦은 변경 및 업데이트가 일어나는 개발 세계에서는 어떤 프로그램이 일체형이라서

뭐 하나 고치려면 싹 뜯어서 엎어야 한다는 건 용납될 수 없는 말일 것이다. 

 

그래서 개발자들이 머리를 굴려서 가져온 방법이 최대한 분리형 배터리처럼 결합력을 낮추는 작전이었다.

 

바로 이 개념이 스프링의 DI를 이해하는데 아주 중요한 개념이 된다.

Dependency Injection을 뜻하는 DI 또한 부품을 유연성 있게 필요에 따라서 뗐다 붙였다 하면서

고장 났을 때나 뭔가 바꿔야 할 때 그것만 갈아 끼우면 되는 장점 즉, 유지보수의 용이성을 높인 개념이다.

 

그러면 자바의 OOP(객체지향)와 무슨 차이인가? 하시는 분들도 계실 것이다.

자바는 클래스가 있고 객체가 있다. 아무리 OOP를 활용하여 한 클래스에서 외부 클래스들을 호출하고

선언한 객체와 메소드를 당겨와도 그 객체의 생성과 흐름 즉, Life Cycle(생명주기) 은 모두 작업자에 의해 결정되고

클래스 내부에서 일어난다.

 

하지만 스프링에서는 이 제어권을 스프링한테  맡겨 놓는 것이다. 

한마디로 커피샵 주인이 매니저 한명을 고용해서 대신 운영하게끔 하는 것이다. (짬 때리는 것)

 

이렇게 제어권이 넘어간 것을 제어역전, 즉,  IOC (Inversion of Control)라고 한다.

이 IOC개념을 탑재한 컨테이너가 스프링의 IOC 컨테이너가 되는 것이고 이 IOC 컨테이너를 통해 DI가 일어나게 된다.

그럼 DI가 뭔지는 알겠으나 그거 어떻게 일어나는 건데?라고 궁금해 할 수 있다.

 

그것은 XML 설정파일을 만들고 Bean을 그 안에 생성해줌으로써 외부에서 제어의 흐름을 관리하는 것인데 자세하고 구체적인 것은 다음 DI 사용법에서 다루기로 하겠다.

 

 

728x90
반응형