일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Inside Of Me
- 기타
- 데이터베이스
- 슬픔의 후에
- 인덱스
- 신입
- IT
- 핑거스타일
- 천공의 시간
- 말 더듬
- 레이디스코드
- 개발자
- I'm fine thank you
- db
- oracle
- 러블리즈
- 악보
- 아이유
- 오라클
- DBMS
- 6학년 8반 1분단
- DBMS 구성요소
- 장범준
- SQL 처리
- nginx
- 오라클 아키텍처
- 니가 참 좋아
- 스위트라떼
- 봄 사랑 벚꽃 말고
- index
취미로 음악을 하는 개발자
[Spring] 의존 주입 (DI, Dependency injection) 본문
DI, Dependency Injection
: 프로그래밍에서 구성요소 간의 의존 관계가 소스 코드 내부가 아닌 외부의 설정파일을 통해 정의되는 방식. 코드 재사용을 높여 소스 코드를 다양한 곳에 사용할 수 있으며, 모듈간의 결합도도 낮출 수 있다. 계층, 서비스 간에 의존성이 존재하는 경우 Spring 프레임워크가 서로 연결시켜 줌.
* 예시로 설명하기 위해 강의 자료에 있던 소스를 사용했습니다. (인프런)
ex) 어린이들 장난감에 건전지가 일체형인 '자동차' 장난감과 분리해서 나오는 '로봇' 장난감 두 가지가 있다고 가정. (이것에만 초점을 두고 본다.)
// 일체형 장난감 (실제 코드에서 NormalBattery가 Battery를 상속받아서 구현됨)
// 분리형 장난감
위 소스에서 자동차 장난감은 battery 객체를 직접 생성자에서 초기화 시켜주고, 로봇 장난감은 setter 함수를 통해서 초기화 시켜준다.
이 때, 로봇 장난감의 경우는 new로 객체를 초기화한 것이 아니라 setter라는 외부 함수를 이용하여 생성되었는데 이를 "주입"한다고 표현합니다.
자바 코드로는 위처럼 나타났는데 Spring에서는 어떻게 될까요?
- DI 설정 방법, applicationContext.xml
<bean id="battery" class="패키지.Battery" ></bean>
<bean id="robotToy" class="패키지.ElectronicCarToy">
<constructor-arg ref="battery" ></constructor-arg>
</bean>
- <constructor-arg ref=참조할 객체></constructor-arg>
: 생성자 파라미터가 ref에 해당되는 객체를 참조한다.
resources에 들어간 xml 파일에 bean 객체로 위와 같이 설정해준다.
// MainClass
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationContext.xml");
ElectronicRobotToy robotToy = ctx.getBean("robotToy", ElectronicRobotToy.class);
위와 같이 나타낼 수 있다.
// 다양한 의존 객체 주입 방법
1) 생성자
xml 파일 설정은 위에서 했던 것과 같다.
2) Container 이용
: 위에서 했던 방식과 같다
-> GenericXmlApplicationContext 클래스를 통해 getBean()메소드 사용
3-1) Setter 이용
// applicationContext.xml
위에서 property 태그에 있는 name은 임의로 지정한 것이며 setter 함수에서 그 다음에 오는 이름으로 name에 값을 넣되 첫 자는 소문자로 바꿔서 넣는다. value는 setter에 파라미터로 들어온 값을 입력해준다.
3-2) List 이용
property 태그에서 name 설정하는 것은 위와 같다. 대신 여기에서 value 값은 List안에 들어갈 값을 지정해준다.
3-3) Map 이용
Map으로 setter하는 방법은 entry태그로 key값과 value값을 정해주며 아래부분처럼 value값을 객체로 참조할 수도 있다.
필자는 아직 정리하면서 이해하는 중이기 때문에 새로운 걸 깨닫는대로 업데이트할 예정이다.
'공대인 > Spring[Boot]' 카테고리의 다른 글
[Spring] 생명주기 (Life Cycle) (0) | 2019.05.23 |
---|---|
[Spring] 의존 객체 자동 주입 (0) | 2019.05.22 |
[Spring] Spring 설정 파일 분리 (0) | 2019.05.21 |
[Spring] 프로젝트 생성 (0) | 2019.05.20 |
[Spring] 준비 및 프로젝트 생성 (0) | 2019.05.20 |