IoC(제어의 역전)

Moondy·2022년 5월 13일
0

개념 (Spring 기준)

  • 프로그램의 제어권을 framework가 가져가는 것
  • IoC 개념을 채용한 프레임워크는 스프링 외에 많지만, 대표적인 것이 Spring이므로 Spring 기준으로 설명하겠다
  • 개발자가 비즈니스 로직 관련 코드를 작성하면 프레임 워크의 컨테이너가 자동으로 객체의 라이프사이클 관리
    • 개발자가 설정(xml, annotation등)만 하면 framework의 Container가 알아서 처리한다
    • 객체의 라이프 사이클이란
      • 생성 → 의존성 설정 → 초기화 → 소멸
  • DI보다 상위의 개념이라고 볼 수 있다.

Spring 컨테이너 종류

  • Bean Factory
    • Bean의 라이프 사이클 관리
    • 처음으로 getBean()이 호출된 시점에서야 빈을 생성(Lazy Loading)
  • Application Context
    • Bean을 등록, 생성, 조회, 반환 관리하는 기능은 BeanFactory와 같음
    • BeanFactory 인터페이스를 상속받아 추가 기능을 제공함
    • 추가 기능
      • 국제화가 지원되는 텍스트 메세지를 관리
      • 이미지 같은 파일 자원을 로드할 수 있는 포괄적인 방법 제공
      • 리스너로 등록된 빈에게 이벤트 발생을 알려줌
    • 컨텍스트 초기화 시점에 모든 싱글톤 빈을 미리 로드한 후 애플리케이션 가동 후에는 Bean을 지연없이 얻을 수 있음 (미리 생성해놔 즉시 사용 가능)
    • Bean Factory와 비슷하지만 더 기능이 많기 때문에 더 많이 사용

장점

  • 개발자는 객체 관리에 덜 신경쓸 수 있게 되어 비즈니스 로직에만 집중
  • DI와 더불어 약한 결합을 통해 객체간 의존관계를 쉽게 변경하고 유연한 코드 작성 가능
  • 코드의 재사용성 높임
  • 유지보수성 높임

싱글 톤 패턴

  • 스프링 컨테이너 → 별도로 설정하지 않으면 모든 컨테이너 안의 빈(Bean) 객체는 딱 하나 생성되어 계속 재사용됨
  • 자원 낭비를 막기 위해 (자세한 것은 Object Pool 참고)
profile
DevOps를 살짝 찍먹하는 BackEnd 개발자

0개의 댓글