javaboiii의 Spring

Spring - 의존성 주입

javaboiii 2024. 10. 2. 11:58

Spring

객체 생성(new)을 컨테이너로 대신할거다
== IoC의 핵심
== Spring 사용하는 이유

"의존성"
 : 어떤 코드를 수행할 때에 필요한 다른 부분의 코드 내용이 있는가?
 (라이브러리, .jar)
 "주입"
  : 필요한 다른 부분의 코드 내용을 추가하는 것

의존성 주입 == DI(Dependency Injection)


아이폰은 워치에 대해 의존성을 갖는다
이런 경우 해당 변수를 멤버변수에 두면 용이합니다.

[의존성 주입(DI) 방법  == 멤버 변수에 메모리를 줄 수 있는 방법]

1. 생성자 주입 - <constructor-arg ref="" > : CI(constructor injection)  
의존 주입 대상 생성자 먼저 호출
생성자 호출
의존 주입을 해야 하는게 하나라도 없으면 안나옴
데이터가 없거나 데이터를 볼 수 있는 라이센스가 없거나
제한적인 상황일 땐 생성자 주입을 씀 
웹에선 드물게 사용됨 

<!-- 생성자 주입 : 무엇을 넣을 건지만 넣으면 됨-->
<bean class="test.IPhone" id="apple">
    <constructor-arg ref="aw" />
    <constructor-arg value="1234" />
</bean> 
<bean class="test.GalaxyPhone" id="samsung">
    <constructor-arg ref="gw" />
</bean>
<bean class="test.AppleWatch" id="aw" />
<bean class="test.GalaxyWatch" id="gw"/>



2. Setter 주입 - <property name="" ref="" > : SI(Setter Injection)
기본생성자 먼저 호출
의존 주입 대상 setter 호출
의존 주입 대상에 문제가 생겨도 나옴
에러가 잘 안남
웹 개발을 할 때에는 사용자의 입장에선 프로그램이 종료되는 것이
가장 불편한 상황이기 때문에 setter주입을 많이 씀

<!-- setter 주입 : setter를 호출해야하기 때문에 어떤 값을 넣을건지 작성해야함 -->
<bean class="test.IPhone" id="apple">
    <property name="watch" ref="aw"></property>
    <property name="num" value="1234"></property>
</bean>
<bean class="test.GalaxyPhone" id="samsung">
    <property name="watch" ref="gw"></property>
</bean>
<bean class="test.AppleWatch" id="aw" />
<bean class="test.GalaxyWatch" id="gw"/>


보편적으로 생성자 주입보다는 setter 주입을 사용하는 경우가 많음

ref = 객체 주입
value = 값을 주입
컨테이너가 객체의 생명주기와 스코프(예: 싱글톤, 프로토타입 등)를 기억함 == 싱글톤 패턴 유지
내가 주입을 몇개 했냐를 가지고도 알맞은 생성자를 주입

로그에 객체 생성이 출력됐다는건
setter를 호출했다는 뜻임

'javaboiii의 Spring' 카테고리의 다른 글

Spring - SpringFramework구조의 흐름  (1) 2024.10.07
Spring - 개념 복습 / 어노테이션  (0) 2024.10.04
Spring - 컨테이너  (0) 2024.10.02
Spring - Spring Framwork 구조  (1) 2024.10.02
Spring - Spring Framwork 정의  (2) 2024.10.02