제어의 역전과 의존성 주입

김태현·2023년 3월 1일
0

스프링부트

목록 보기
1/2

제어의 역전(IoC)이란?

IoC(Inversion of Controll)를 더 잘 이해하기 위해서 먼저 프레임워크와 라이브러리의 차이를 알아야 합니다.
프로그래밍을 처음 배우면서 의미가 헷갈리고 의미만으로 정확한 뜻을 이해하기 어려웠습니다.

라이브러리

먼저 라이브러리는 애플리케이션을 개발하는데 사용되는 데이터 또는 프로그래밍 코드입니다.
개발에 자주 사용되고 필요한 것들을 미리 구현해 놓은 도구라고 정리할 수 있을것 같습니다. 즉 재사용이 가능한 기능을 미리 구현해놓고 필요한 곳에서 호출하며 사용하도록 만들어진 집합입니다.

자바에서 지원하는 대표적인 라이브러리는 다음과 같습니다.

java.lang

  • Objenct, String, StringBuffer, Math 등
  • 가장 기본이 되는 라이브러리로 생략이 가능합니다.

java.util

  • Date, Calender, List, Set, Map 등
  • import로 불러와야 사용 가능합니다.

java.io

  • File, Buffer 등

프레임워크

프레임워크는 라이브러리를 포함하는 개념입니다. 프레임워크 위에 개발자가 작성한 애플리케이션의 코드가 올라가고, 애플리케이션에서 라이브러리를 호출할 수 있습니다.
애플리케이션 개발 시 필수적인 코드, DB 연동과 같은 기능들을 위해 뼈대를 제공하고, 이러한 뼈대 위에서 개발자가 코드를 작성하여 애플리케이션을 개발합니다.
앱/서버의 구동, 메모리 관리 등의 부분을 프레임워크과 관리하며 개발자는 프레임워크의 방식대로 클래스와 메서드를 구현하게 됩니다.
대표적인 프레임워크는 다음과 같습니다.

  • Java - Srping
  • Python - Django, Flask
  • Ruby - Ruby on Rails

제어의 역전

이처럼 프레임워크와 라이브러리의 가장 큰 차이는 "제어흐름이 어디에 있는가?" 입니다.
프레임워크는 IoC 개념이 적용되어 있습니다. 프레임워크에게 프로그래밍 전반의 흐름을 넘겨 개발자는 작성하는 코드에서 신경써야 하는 부분이 줄어들게 됩니다. Srping 을 사용하게 되면 스프링 컨테이너가 프로그램의 제어 흐름을 담당하게 됩니다.

의존관계 주입(DI)이란?

의존관계

의존관계란 말을 처음 들었을 때 크게 와닿지 않았습니다. 의존관계는 A라는 코드가 변할때 B라는 코드에 영향을 주면 A와 B는 의존관계에 있다고 할 수 있습니다.
new 연산자를 통해 A와 B 객체의 의존관계 만들어준다면 두 객체는 강하게 결합되어 있는 상태입니다. A클래스의 코드가 변할때마다 B클래스의 생성자를 변경해주어야 하고, 코드의 변경이 많을 때는 유연성이 떨어질수 밖에 없습니다.

의존관계 주입

DI는 의존관계를 외부에서 주입해주는 것을 의미합니다. Spring 에서는 DI를 담당하는 "DI컨테이너"가 존재합니다. 스프링 DI컨테이너가 애플리케이션 실행 시점에 필요한 객체를 생성하고 주입해주는 역할을 합니다.

profile
안녕하세요. Java&Spring 기반 백엔드 개발자 김태현입니다.

0개의 댓글