IoC / DI

가수왕·2022년 12월 9일
0

Spring

목록 보기
2/4

0. 개요

저번 포스팅에서 Spring 구조 혹은 특징 4가지를 언급했다.
POJO, IoC/DI, AOP, PSA 오늘은 IoC/DI에 관해 다뤄볼 예정이다.

1. IoC란

IoC란 Inversion of Control 제어의 역전이란 뜻이다. 한글로 풀어도 잘 이해가지 않는다.
결론부터 말하면 의존성 주입의 제어권을 우리가 아닌 Spring에서 담당한다는 말이다.

이전까지는 만들어놓은 클래스가 필요할 때 new를 이용해 메소드 내에서 객체를 생성해 사용했다.
하지만 Spring은 클래스를 바탕으로 객체를 미리 생성해 놓고 필요한 곳에 의존성을 주입해 메소드 안에서 객체를 생성하지 않고도 사용할 수 있게 해준다.

객체 간 연결관계를 런타임시 결정한다.

IoC의 구현 방법 중 하나가 DI(Dependency Injection)이다. DL(Dependency Lookup / 필요할 때 만들어진걸 찾아서 쓴다.)이라는 방법도 있다.

IoC는 객체간 결합도를 느슨하게 한다.(loose coupling)

2. DI

dependency Injection 즉, 의존성을 주입한다는 뜻이다.
DI는 Setter, 생성자를 이용할 수 있다.
DL과 다른점은 더 편하다는 것이다. DL은 다음과 같은 번거로움이 있다.
DL은 객체를 찾아 오는 코드도 하나하나 작성해야 한다. 또한 JNDI를 사용하지 않으면 관련 코드를 객체 내에서 일일이 수정 해야하고, Lookup한 객체를 필요한 타입으로 Casting해줘야한다. 또한 예외처리도 직접 다 해야한다.
하지만 DI는 컨테이너가 직접 의존 구조를 Object에 설정하기 때문에 객체를 찾는 자바 코드가 필요없다. 또한 객체가 컨테이너의 존재 여부를 알 필요가 없다.
여기서 말하는 컨테이너란 무엇일까?

3.IoC Container

  • 라이프사이클 관리
  • 의존성 관리
  • 쓰레드 관리
  • 기타 애플리케이션 실행에 필요한 환경
  • 비즈니스 로직 외에 부가적인 기능들에 대해서 독립적으로 관리
  • 서비스 객체를 사용하기 위해 Factroy, Singleton패턴을 직접 구현하지 않아도 됨
    Factory 패턴: 컨트롤러에 필요한 서비스 객체를 만들어서 반환해줌 이전까지는 컨트롤러가 직접 서비스에 접근해 싱글톤인지 확인하고 아니면 생성 이 과정이었음
  • Bean(객체)Factory, ApplicationContext(BeanFactory의 하위 클래스)가 있음. ApplicationContext사용을 권장 둘 다 Bean 등록, 생성, 조회, 반환 하지만 ApplicationContext에 Spring의 각종 서비스를 추가로 제공

0개의 댓글