재밌고 어려운 IT를 이해해보자~!

Dependency Injection(의존 주입) 본문

코리아IT핀테크과정

Dependency Injection(의존 주입)

언제나즐거운IT 2024. 2. 27. 09:59

의존 주입에 들어가기에 앞서

 

팩토리 패턴 != 싱글톤 패턴 이다.


예시 코드에서, 싱글톤 유지 X

 

증프 코드에서는, 싱글톤 유지 O

 

[ IoC를 배울때에 함께 알아야하는 개념 ]

1) DI 란?

- Dependency Injection
- 의존 주입

 

개발자 -> 컨테이너(Spring 프레임워크)
1. 객체를 생성(new) 및 관리(호출시 해당 객체 메서드 수행)
2. 의존 주입

 

의존성 이란 ?
- 어떤 메서드를 수행할때에
- 다른 객체를 미리 new 해야하는 상황
1. 생성자 주입(Constructor Injecttion)

- 2번 방식보다 더 강제성이 짙음
- 생성자 주입 할떄에 에러가 발생하면 해당 객체는 생성 X == 필수적일때에 사용하는 방식

생성자 주입 전 xml

applicationContext.xml
<beans>
	<bean class = "test.IPhone" />
	<bean class = "test.GalaxyPhone" />
</beans>

 

생성자 주입 후 xml

<beans>
	<bean class="test.IPhone" />
		<constructor-args="applWatch" /> // 생성자 주입태그
	</bean>

	<bean class="test.AppleWatch" id="applWatch" lazy-init="true"/> //xml을 통해 new 한 애플워치가 사용된다.
	<bean class="test.GalaxyWatch" id="galaxyWatch" lazy-init="true" />
	<bean class=test.GalaxyPhone" />
		<constructor-args= "galaxyWatch" /> // 생성자 주입태그 --> 워치에
	</beans>
</beans>

2. Setter 주입(Setter Injection)
1번 방식보다 덜 강제적임
기본 생성자 + setter 를 활용하므로 기본 생성자를 반드시 필요로함

applicationContext.xml

<beans>
	<bean class="test.TestBean">
		<property name="testList" >
			<list>
				<value>홍길동</valeu>
				<value>임꺽정</value>
				<value>아무무</value>
			</list>
		</property>
		<property name="testMap" >
			<map>
				<entry>
					<key><value>홍길동</value></key>
					<key><value>미드</value></key>
				</entry>
				<entry>
					<key><value>임꺽정</value></key>
					<key><value>원딜</value></key>
				</entry>
				<entry>
					<key><value>아무무</value></key>
					<key><value>정글/value></key>
				</entry>
			</map>
		</property>
	</bean>
</beans>


나의 메서드를 사용할때 다른객체를 사용하는것 -> 의존성

 

서로 교체할수있게 interfatce 지정
해당 interface맞춰준 후에
넣고싶은 생성자? ref ? 넣으면 된다.

게임 캐릭터
무기 없을수 있음
==> 2번 방식 주입

카트라이더
자동차없이는 캐릭터도 없다
==> 1번 방식 주입

'코리아IT핀테크과정' 카테고리의 다른 글

xml, annotation(@)  (4) 2024.02.28
스프링 설치  (0) 2024.02.27
스프링 프레임워크, Bean태그, 결합도  (2) 2024.02.26
CKEditor [TEAM PROJECT]  (0) 2024.02.21
네이버 로그인 API [TEAM PROJECT]  (0) 2024.02.21
Comments