DevBoi

[Spring] DI 구현 예제 및 Spring 역할 이해 본문

Develop/[Spring]

[Spring] DI 구현 예제 및 Spring 역할 이해

HiSmith 2022. 2. 21. 23:52
반응형

저번 포스팅에서 DI에 대한 작업은 Spring. 에서 DI 컨테이너가 지원해준다고 했다.

좀 더 상세히, 그리고 내가 구현해서 한번 어떻게 동작하는 지 살펴보자

 

우선 Program이란 클래스가 있다.

해당 클래스에서는 Exam,ExamConsole이라는 인터페이스를 구현하고 있는 구현체를 사용하여, 간략하게 테스트 코드를 작성한다.

 

 

이런식으로 사용한다.

ExamConsole은 두가지의 구현체를 가진다. 인라인과 그리드 물론 둘다 출력은 잘 된다.

 

 

ExamConsole exam이라는 녀석에 대한 사용을

중간에 exam = Grid 로 바꿔도 잘 동작한다. 그러면 결국은  이 구현체를 바꿀때마다 소스코드 작업이 이뤄져야 한다는 것이다.

예를 들면 어떤 소스던 어떤 로직이던 특정 부분에서 구현체에 대한 변경을 하려면 다시 소스수정을 하고 배포를 해야한다.

 

 

그래서 결국 console에 주입해주는 저 과정을 소스 코드가 아닌,

외부 파일 혹은 스프링의 DI 컨테이너를 통해서 주입 받아야 더 유연하고 확장성이 있는 소스코드를 만들수가 있다는 것이다.

 

지금 저 코드는 강력한 결합도를 가지고 있다.(console에 주입된 객체를 변경할때 소스코드로 변경하고있기 때문이다.)

 

자 그러면 이 작업을 스프링이 해주는 것을 살펴보자.

 

해당 객체 생성 및 set하는 함수를 , Spring 3버전대의 플러그인을 설치하여,

이렇게 컨피규레이션 파일을 생성하면, xml의 레퍼런스 타입이 생성이 된다.

우선 해당 빈을 두개를 생성한다.

bean의 id는 객체 이름이라고 생각하면되고, 이름이 같을수 있기 때문에 패키지 명까지 명시, 그리고 

Examconsole에서 setExam하는 부분이 있다. 해당 부분은 프로퍼티로 별도 빈의 태그 안에 name,ref 항목을 추가해서 작성해준다.

name은, set메소드에서 사용하는 명이다.

예를 들어서 setMemberId 면, name에는 MemberId가 오는 것이다.

그리고 해당 메소드에 들어갈 빈의 id를 ref에 넣어준다. 이렇게 되면, 부품을 조립하는 빈의 생성까지 완료가 되는 것이다.

 

반응형

'Develop > [Spring]' 카테고리의 다른 글

[Spring] DI 관련 예제  (0) 2022.02.23
[Spring] DI 관련 ApplicationContext 설정  (0) 2022.02.23
[Spring] IOC 란?  (0) 2022.02.21
[Spring] DI란?  (0) 2022.02.21
[Spring] 인터페이스와 느슨한 결합력  (0) 2022.02.21