java study preview 1-3/ IOC

서동희·2023년 10월 13일
0
post-thumbnail

Inversion of Control 제어의 역전

여기서 제어라는건 "객체에 대한 주도권을 가지고 있다"라고 생각하셔도 될 것 같다

• 프로그램의 제어 흐름을 직접 제어하는 것이 아니라, 외부에서 관리하는 것

• 객체의 생성과 소멸, 그리고 객체간의 의존관계를 설정하는 행위

-  모두 프레임워크가 대신 해준다 : 주도권이 역전됨 → 제어의 역전

-  프레임워크가 흐름을 주도하면서 개발자가 만든 어플리케이션 코드를 사용한다.

• 이렇게 IoC가 일어나는 공간을 IoC 컨테이너라고 부른다.

우리가 라이브러리를 사용하는 경우, 자신의 코드가 대부분의 작업을 수행하게 되지만 도움이 필요한 곳이 몇 군데 있습니다. 따라서 몇 가지 다른 라이브러리들을 연결하면 코드가 함께 실행됩니다. 그림을 그리거나 소리를 재생하는 것과 같은 특정 작업에 대한 도움을 받기 위해 라이브러리 중 하나를 호출합니다. 그런 다음 코드가 제어를 재개하고 수행 중인 작업을 계속 수행합니다.

반면에 프레임워크를 사용할 때는 프레임워크가 대부분의 작업을 수행하고 자신의 코드를 삽입하는 특정 위치가 있습니다. 따라서 프레임워크는 리소스를 할당하고 호출되는 시점을 결정하면서 진행됩니다. 그리고 우리가 작성한 애플리케이션별 로직이 필요할 때 프레임워크는 우리의 코드를 호출하여 작업을 수행하고, 우리의 코드는 프레임워크에 제어를 다시 반환합니다. 이것이 바로 inversion of control입니다.

어플리케이션의 제어 책임이 프로그래머에서 프레임워크로 위임되므로, 개발자는 핵심 비즈니스 로직에 더 집중할 수 있다는 장점이 있다.

가령 예를 들어 직장에 차를 몰고 가는 것은 내가 차를 제어하는 것이다.
직접 차를 운전하는 대신 운전 기사를 고용한다면 이것을 제어의 역전이라고 한다. 차를 직접 운전할 필요가 없고 운전자가 운전하게 함으로써 본업에 집중할 수 있는 것을 말한다

IOC의 주요 이점:

유연성 증가: 애플리케이션의 각 부분이 독립적으로 개발되고 테스트될 수 있으므로 유연성이 향상됩니다.

재사용성 증가: 컴포넌트들 간의 의존성이 낮아지고, 재사용이 더 쉬워집니다.

테스트 용이성: 의존성 주입을 통해 모의(mock) 객체를 사용하여 테스트하기 용이해집니다.

관리의 편의성: 컨테이너가 컴포넌트의 라이프사이클을 관리하고, 의존성을 해결하므로 관리가 편리해집니다.

객체지향 원칙이 잘지켜짐

객체를 관리해주는 프레임워크와 내가 구현 하고자 하는 부분으로 역할과 관심을 분리해 응집도를 높이고 결합도를 낮추며, 이에 따라 변경에 유연한 코드를 작성 할 수 있는 구조가 될 수 있기 때문에 제어를 역전한 것이다.

IoC와 DI

IoC는 DI(Dependency Injection)과 밀접한 관련이 있다. DI는 IoC 원칙을 실현하기 위한 여러 디자인패턴 중 하나이다. IoC와 DI 모두 객체간의 결합을 느슨하게 만들어 유연하고 확장성이 뛰어난 코드를 작성하기 위한 패턴이다.

profile
백엔드개발자

0개의 댓글