로운's 기술노트

[항해 5기] 3주차 Week I Learned (DI/IoC/Bean) 본문

항해99_'22.01~04

[항해 5기] 3주차 Week I Learned (DI/IoC/Bean)

로운's 2022. 1. 30. 02:25

[이번 주차의 테마는 '숙련']

 

 이번 일주일(1/21~1/27)은 2주차에 비해 더 힘들다고 느끼지 못했음에도 불구하고, 지금까지의 항해 기간 중 체감상 가장 짧았다. 아마 주특기 입문으로 해야 할 일이 많아서 그렇지 않았나 추측한다. 

아직 만족할 만한 성장을 이루진 못했지만, 조급해하지 않고 내 페이스대로 항해에 참여하고자 한다.

 

■ DI(Dependency Injection)란?

: 의존성 주입(or 의존관계 주입)은 필요한 객체를 직접 생성하는 것이 아닌 외부로부터 필요한 객체를 받아서 사용하는 것이다. 아래의 경우, 'A2객체인 부품(Dependency)에 B객체인 부품을 조립(Injection)한다'라고 해석 하면 좀 더 이해가 쉬울 수 있다.

 

ㅇ 예제

  • A1은 객체가 생성될 때 B객체도 같이 직접 생성
  • A2는 객체가 생성되어도 외부 B객체(Dependency)를 주입(Injection)하는 형식
  • A2같은 방식이 DI라고 볼 수 있음

 

ㅇ DI의 장점

1) 의존성이 줄어든다.
  : 의존한다는 것은 그 의존대상의 변화에 취약하다는 것이다.(대상이 변화하였을 때, 이에 맞게 수정해야함) DI로

    구현하게 되었을 때, 주입받는 대상이 변하더라도 그 구현 자체를 수정할 일이 없거나 줄어들게됨.
2) 재사용성이 높은 코드가 된다.
  : 기존에 BurgerChef 내부에서만 사용되었던 BurgerRecipe을 별도로 구분하여 구현하면, 다른 클래스에서 재사용할

   수가 있다.
3) 테스트하기 좋은 코드가 된다.
  : BurgerRecipe의 테스트를 BurgerChef 테스트와 분리하여 진행할 수 있다.
4) 가독성이 높아진다.
  : BurgerRecipe의 기능들을 별도로 분리하게 되어 자연스레 가동성이 높아진다.

 

 

■ IoC(Inversion of Control)란?

 : '제어의 역전'이라고도 하며, 기존 사용자가 모든 작업을 제어하던 것을 컨테이너에게 위임하여 객체의 생성부터 생명주기 등 모든 객체에 대한 제어권이 넘어간 것을 의미한다. 이때 제어권을 위임받은 컨테이너가 IoC컨테이너이다.

 

ㅇ IoC 컨테이너

1) IoC 컨테이너는 객체의 생성을 책임지고, 의존성을 관리한다.
2) POJO의 생성, 초기화, 서비스, 소멸에 대한 권한을 가진다.
3) 개발자들이 직접 POJO를 생성할 수 있지만 컨테이너에게 맡긴다.

 

 

 

■ Bean이란?

 : IoC컨테이너에 등록되어 관리되는 객체를 빈(Bean)이라고 한다.

  스프링에서는 스프링이 제어권을 갖고 직접 생성하고, 의존관계를 부여하는 오브젝트를 의미하며, 이러한 경우 빈의

  등록은 XML, 자바 코드(애너테이션)을 통해 할 수 있다.

 

ㅇ 주요 속성

1) class(필수): 정규화된 자바 클래스 이름
2) id: bean의 고유 식별자
3) scope: 객체의 범위 (sigleton, prototype)
4) constructor-arg: 생성 시 생성자에 전달할 인수
5) property: 생성 시 bean setter에 전달할 인수
6) init method와 destroy method

 

 

 

 

[출처]

https://cjw-awdsd.tistory.com/10

https://tecoble.techcourse.co.kr/post/2021-04-27-dependency-injection/

https://dog-developers.tistory.com/12

https://developer-pi.tistory.com/83

https://gmlwjd9405.github.io/2018/11/10/spring-beans.html

 

 

 

Comments