본문 바로가기
Spring/Spring의 IoC

IoC와 DI

by 융디's 2024. 6. 12.
728x90
IoC와 DI

IoC와 DI

Container

인스턴스의 생명 주기를 관리
  • 예시
    • bean container : 빈 객체의 생성 ~ 소멸까지 생명 주기 관리
    • jsp container : jsp 객체의 생성 ~ 소멸까지 생명 주기 관리
    • sevlet container : servlet 객체의 생성 ~ 소멸까지 생명 주기 관리

IoC(Inversion of Control)

제어의 역전으로, 프로그램의 흐름을 개발자가 아닌 프로그램이 제어하는 것
  • 제어 : IoC Container가 직접 객체를 생성하여 코드를 제어한다.
    • 객체의 생명 주기나 메서드의 호출을 직접 제어(=관리) 한다.
  • 역전 : 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리한다.
  • IoC가 그럼 왜 필요할까?
    • 개발자가 직접 객체를 생성하고, 관계 및 의존성을 직접 제어 → 코드 수정이 많다
    • 역할과 관심을 분리하여 응집도를 높이고, 결합도를 낮추어 이에 따라 변경에 유리한 코드를

    작성할 수 있도록 하기 위해!

    ⇒ 할리우드 법칙 (Don`t call us, We`ll call you)

    • 우리가 호출하는 것이 아닌 호출 당하기를 기다린다.
  • IoC를 구현하는 방법에는 다양한 방법이 있지만 대표적으로 DI가 있다.

DI(Dependency Injection)

의존성의 주입으로, 클래스 사이의 의존 관계를 Bean 설정 정보를 바탕으로 컨테이너가 자동으로 연결해 주는 것, 즉 외부에서 객체를 생성하고 주입하는 방식
  • 의존성
    • 한 클래스가 바뀔 때 다른 클래스가 영향을 받는다. → 의존 관계
    public class MemberController{
    	private MemberService memberService;
    	
    	public MemberController(){
    			// memberService() 객체가 변할 시 MemberController도 변한다!
    			this.memberService = new memberService();
    	}
    }
  • 주입
    • 의존성을 외부에서 주입해 준다.

< DI에서 자주 사용되는 용어 >

  • 의존 객체(Dependency)
    • 객체 간의 관계 중 하나
    • MemberController 객체가 MemberService객체를 사용하는 경우,
      MemberController 객체가 MemberService객체에 의존하고 있다.
  • 의존 주입(Dependency Injection)
    • 객체 간의 의존 관계를 설정하는 방법
    • 외부에서 의존 객체를 생성자, setter, field 등을 통해 주입하는 방법
  • 인잭션(Injection)
    • 생성된 Bean에 필요한 의존 객체를 주입한다.
  • Bean
    • 스프링에서 DI를 사용하기 위해 생성되는 객체
  • BeanFactory
    • Spring에서 Bean을 생성하고 관리하는 Container
  • ApplicationContext
    • BeanFactory를 상속한 Spring Container
    • 다양한 기능을 제공
  • @Component
    • Spring에서 Bean을 생성하기 위한 애노테이션 중 하나
    • 해당 클래스를 Bean으로 등록
  • @Qualifier
    • 같은 타입의 Bean이 여러 개 있을 경우, 어떤 Bean을 사용할지 결정하는 용도로 사용
  • @Autowired
    • 자동으로 Bean을 주입하는 기능

728x90

'Spring > Spring의 IoC' 카테고리의 다른 글

Bean의 의존성 주입  (0) 2024.06.16
Bean  (0) 2024.06.15