이노베이션 캠프 WIL

3주차 WlL(DI, IoC, Bean)

mat_hoyoung 2022. 7. 10.

이번 시간에는 DI, IoC, Bean에 대해서 알아보자 먼저 위 3가지 단어들은 각각 따로 구분되는 것이아니라 연관되어 구분이 되기때문에 따로 설명하기보단 한 사이클을 통해서 알아 보도록 하자. 

 

용어 정리부터 하자면 

IOC는 Inversion of Control의 줄임말로 제어의 역전이라고 하고 

di 는 Dependency Injection으로 스프링이 다른 프레임 워크와 차별화되어 제공하는 의존 관계 주입 기능으로서, 객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식이다. di를 통해서 각 모듈 간의 결합도는 낮아지지만 유연성은 높아지는 장점이 있다. 

 

두개의 각 예시를 코드로 나타내보자면 

위에서는 클래스 a에서 사용자가 직접 객체 b를 생성한 모습이다. 

두번째로는 b라는 객체는 사용자가 생성한 것이아닌 bean을통해서 @autowired를 통해 객체를 외부에서 받는 형식이다. 

이것이 제어가 역전이 되었다는 의미를 가진 ioc라는 개념이다. 

여기서 bean이라는 것은 자바의 보통 객체가 스프링 컨테이너에 의해서 관리가 되면 그것이 스프링 빈이라는 것이다. 

 

 

  그렇다면 스프링 빈을 왜사용하는 것일까 ?

개발자는 new 연산자, 인터페이스 호출, 팩토리 호출 방식으로 객체를 생성하고 소멸하지만 이 모든것을 스프링컨테이너를 사용하게 되면 그 역할을 다 해주기 때문이다. 즉 제어 흐름을 외부에서 관리한다고 이해하면 쉽다. 

 

@bean 과 @component 의 차이점은 그럼 뭘까 ? 

@Bean

  • 외부 라이브러리를 bean으로 등록하고 싶을 때 사용
  • JavaConfig가 @Bean이 붙은 메소드를 만나면 해당 메소드를 실행하고 반환값을 BeanFactory에 Bean으로 등록
  • 기본적으로 bean의 이름과 메소드의 이름은 동일
  • @Bean(initMethodName="메소드이름")으로 Bean 이름 변경 가능

@Component

  • 사용자가 직접 생성한 클래스를 Bean으로 등록할 때 사용
  • 런타임시 @Component를 찾아 Bean으로 등록

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

di에 대해서 쉽게 이해하는 방법으로는 

한 블로그를 참고하여 보면 이해하기 쉽다. 

참고 : https://velog.io/@9sanha/%EC%8A%A4%ED%94%84%EB%A7%81-Bean-IOC-DI

 

스프링 - Bean, IOC, DI

9월 중순 스프링을 처음 접해 거의 아무것도 모르는 상태일 때 DI와 IOC에 대한 정리를 했었다. 그 때 작성했던 내용에 추가 작성!

velog.io

 

위에 내용으로 필름카메라의 예시를 통해 di에  대해 처음 스프링을 공부하는 사람들도 이해하기 쉽게 적어놨다. 

댓글