제어의 역전(IoC)

권태형·2023년 3월 15일
0

지식정리

목록 보기
31/72
post-thumbnail

프레임워크와 라이브러리의 가장 큰 차이점을 제어의 역전(IoC)라고 하였다. 제어하는 것은 개발자의 역할이라고 생각하지만, 프레임워크를 쓰게 되면 프레임워크의 틀안에서 개발자의 짜둔 어플리케이션 코드를 호출하게 된다. 따라서 제어하는 역할이 프레임워크가 가지게 되어 제어의 권한이나 흐름이 개발자가아닌 프레임워크가 가지게 되어 제어의 역전이라 부르게 될 것이다.

그렇다면 정확히 제어 역전(Ioc)의 정의나 개념은 어떻게 될까?

제어의 역전(IoC)이란?

IoC는 Inversion of Control의 약자로 영문 직역 자체가 "제어의 역전(반전)"이다.

제어의 역전은 기존의 개발 방식에서 개발자가 직접 제어 흐름을 제어하는 것이 아니라, 외부의 프레임워크나 라이브러리가 제어 흐름을 대신하게 되는 것을 말한다.

IoC의 구현방법

IoC를 구현하는 방법은 여러 가지가 있지만, 주로 아래와 같은 방법들을 사용한다고 한다.

  • Factory Pattern
    객체 생성을 전담하는 팩토리 클래스를 두어 객체를 생성하는 방식
    팩토리 클래스를 사용하여 객체를 생성하면, 객체 생성에 대한 책임이 팩토리 클래스로 이전되므로 IoC가 구현된다.

  • Template Method Pattern
    객체 생성 과정을 추상화하여, 하위 클래스에서 구체적인 구현을 담당하는 방식
    하위 클래스에서 구현하는 부분에 대한 제어의 역전이 이루어지므로 IoC가 구현된다.

  • Service Locator Pattern
    객체 생성 및 관리를 위한 서비스 위치자 패턴
    서비스 로케이터 클래스는 객체 생성 및 관리에 대한 책임을 가지며, 클라이언트는 서비스 로케이터를 통해 필요한 객체를 가져오게 된다.
    따라서 서비스 로케이터 클래스가 객체의 생성과 관리를 담당하므로, 제어의 역전이 이루어져 IoC가 구현된다.

  • Dependency Injection (DI)
    객체 생성 및 관리에 대한 책임을 IoC 컨테이너가 가지며, 필요한 객체를 직접 생성하거나 외부에서 주입받는 방식
    DI는 생성자 주입, 속성 주입, 메소드 주입 등 다양한 방식으로 이루어질 수 있다.

장단점

제어의 역전을 사용하면 아래와 같은 장단점을 가질 수 있다.

장점

  • 코드의 유연성과 재사용성이 증가한다.
    IoC 컨테이너를 사용하면 의존성을 관리하기 쉬워져 코드 변경이 쉬워진다.

  • 테스트의 용이성이 증가된다.
    의존성 주입을 통해 테스트용 객체를 쉽게 만들 수 있으므로 테스트 코드를 작성하는 데 있어서도 도움이 된다.

  • 결합도가 낮아져 유지보수가 용이해진다.
    의존성을 관리하는 작업이 자동화되어 객체 간의 결합도가 낮아져 유지보수가 용이해진다.

  • 객체간의 의존성 관리를 통해 개발 시간을 단축시킬 수 있다.

단점

  • 의존성 주입이 많아질수록 코드의 가독성이 떨어질 수 있다. 코드의 복잡성이 증가할 수 있다.

  • IoC 컨테이너가 복잡해질수록 초기 설정과 성능 이슈가 발생할 수 있다.

  • IoC 컨테이너를 사용하면 일부 개발자는 어떤 객체가 어떻게 생성되는지에 대한 이해를 잃을 수 있다.


참고자료(출처)
IoC구현 방법 - DI관리 포스팅
velog 포스팅 [Spring] DI, IoC 정리
코드연구소 포스팅 [Spring] IoC,DI, 스프링 컨테이너(Container), 스프링 빈(Bean)이란?
썸네일이미지 출처 castingn

profile
22년 12월 개발을 시작한 신입 개발자 ‘권태형’입니다. 포스팅 하나하나 내가 다시보기 위해 쓰는 것이지만, 다른 분들에게도 도움이 되었으면 좋겠습니다. 💯컬러폰트가 잘 안보이실 경우 🌙다크모드를 이용해주세요.😀 지적과 참견은 언제나 환영합니다. 많은 댓글 부탁드립니다.

0개의 댓글