fastcampus java 강의를 보면서 정리를 한 것입니다.
Spring IoC의 핵심

의존성 하나 이상의 오브젝트로 실행 되는데, 오브젝트들 간에 함께 의존하고 있음

Di 예제

public Main(){
  public static void main(String []args){
    B b = new B(true);
    A a = new A(b);
    a.println();
  }
}

객체가 객체를 의존하고 있으면, 코드 유지보수가 어려워짐

디커플링 할수록 간결하게 변화함

코드에서 관계를 맺어주는것이 아니다.

의존성을 상위 코드에서 생성하여 객체를 주입하므로 a 에서는 B에 의존하는 값을 가지고 있지 않아도된다.

이것을 framework 화 한것이 IoC Container

  • 설정을 보고 관계를 눈으로 미리 볼수 있다.

  • 비지니스 로직만 집중할 수 있음 .

  • 테스트를 더 쉽게 가능하다.

  • 생성자 주입 / setter 주입

    생성자 주입

    객체가 생성될때 만들어짐

    public class A{
      private B b;
        public void setB(B b){
        this.b=b;
      }
      ...
    }
    <bean id="a" class="kr.co.fastcampus.cli.di.A">
      <constructor-arg ref="b"/>
    </bean>
    <bean id="b" class="kr.co.fastcampus.cli.di.B">
      <constructor-arg value="true"></constructor-arg>
    </bean>

    Setter 주입

    코드가 돌다가 객체가 언제든지 관계가 재설정이 되었을 때

    <bean id="a" class="kr.co.fastcampus.cli.di.A">
      <property name="b" ref="b"/>
    </bean>
    <bean id="b" class="kr.co.fastcampus.cli.di.B">
      <constructor-arg value="true"></constructor-arg>
    </bean>

circulate Dependency

상호 참조 dependecy 서로 참조를 하게 되면 stack overflow가 발생할수 있음.

https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-dependencies

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

Bean Scope  (0) 2020.02.11
ClassPath Scanning and Managed Components  (0) 2020.02.08
Customizing the Nature of a Bean  (0) 2020.02.01
Spring-Core  (0) 2020.01.19
SpringCore - IoC Container(1)  (0) 2020.01.19

+ Recent posts