[Spring] IoC / DI

Max·2022년 3월 22일
0

Spring

목록 보기
2/7
post-thumbnail

IoC - Inversion of Controller

제어의 역전


객체에 대한 제어권이 컨테이너로 역전

프로그램을 실행하는데 필요한 객체에 해단 생성, 변경이 개발자가 직접하는 것이 아닌 프로그램을 구동하는 컨테이너가 직접 관리하는 것을 말함

Spring는 IoC를 통해 필요한 객체의 생성부터 생명주기까지 객체에 대한 관리를 직접함

장점

  • 개발자가 객체 관리에 신경을 안쓰고 다른 부분에 집중할 수 있음
  • 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있게 하여 가독성, 코드 증복, 유지보수를 편하게 할 수 있음

Spring IoC Container

Spring에서 관리하는 객체를 Bean(빈)이라고 하며 Bean(빈)을 관리한다는 의미로 컨테이너를 Bean Factory라고 함

  • 역할

    1. 객체의 생명주기와 의존성 관리
    2. VO(DTO / POJO) 객체의 생성, 초기화, 소멸 등의 처리 담당
    3. 개발자가 직접 객체를 생성할 수 있지만 컨테이너에 권한을 줘서 소스 코드 구 현 시간을 단축



DI - Dependency Injection

의존성 주입


어떤 객체에 스프링 컨테이너가 다른 객체와 의존성을 맺어주는 행위

IoC의 핵심 기술이라고 할 수 있으며 사용하는 객체를 직접 생성하여 만드는 것이 아니라 컨테이너가 빈의 설정 정보를 읽어와 자동으로 해당 객체에 연결하는 것

의존성을 받게 되면 객체 수정시 소스 코드의 수정을 최소화 할 수 있음

장점

  • 개발자가 작성해야 할 코드가 단순해짐
  • 각 객체 간의 종속 관계 해소 가능

Spring DI 종류


1. Constructor Injection (생성자 주입)

  • 생성자를 통해서 의존 관계를 연결
  • XML설정 파일에서 Bean 하위 요소에 <constructor-arg>를 인자의 개수만큼 추가해야 함

<bean id = "불러올 객체 이름" class = "클래스 풀 네임">
	<constructor-arg index = "0" value = "OOO"/>
    <constructor-arg index = "OOO" ref = "OOO"/>
</bean>

<bean id = "student" class = "com.kh.spring.person.model.vo.student">
	<constructor-arg index = "0" value = "홍길동"/>
    <constructor-arg index = "0" ref = "money"/>
</bean>
<bean id = "money" class = "com.kh.spring.wallet.model.vo.Wallet"/>

2. Setter Injection (setter 메소드 주입)

  • Setter 메소드를 통해 의존 관계를 연결
  • <property>태그에서 의존 관계를 주입할 필드 값을 name 속성에 지정해야 함

<bean id = "객체 이름" class = "클래스 풀 네일">
	<property name = "name" value = "OOO"/>
    <property name = "name" ref = "OOO"/>
</bean>

<bean id = "student" class = "com.kh.spring.person.model.vo.student">
	<property name = "name" value = "홍길동"/>
    <property name = "wallet" ref = "money"/>
</bean>
<bean id = "money" class = "com.kh.spring.wallet.model.vo.Wallet"/>



**수정해야 될 부분들이 있으면 댓글로 알려주세요**

ref :



profile
co_der

0개의 댓글

관련 채용 정보