/ SPRING

Spring 개발일지(5) - 의존성 주입(DI)

Spring 개발일지는 여러 절로 구성되어 있습니다.


설명하기에 앞서

안녕하세요. 풀스택 개발자를 위해 달려나가는 김준호 입니다.
이번 블로그 내용에서는 Spring DI(Dependecy Injection)을 알아볼 예정입니다.
천천히 시간을 가지면서 이해해보도록 합시다. 그러면 시작해보도록 하죠!


DI(Dependecy Injection)란

의존 하는 객체를 Spring Container 혹은 외부에 넘겨주는 것이며 우리 말로는 의존성 주입이라고 의미합니다. 이렇게 생성된 객체들은 Container를 통해 한번에 불러올 수 있다는 장점이 있습니다.

간단히 살펴본 것으로써 이해하기는 힘든 의미인 것은 사실입니다. 왜 객체를 외부에 넘겨주는 작업을 하며, 새로운 개념을 배워야 하는 것일까요? 그래도 한번 새로운 예제를 보면서 개념을 이해하다보면 이러한 부분 떄문에 DI를 사용하는구나… 라고 공감하실 수 있습니다. 그러면 살펴보시죠!


DI를 위한 기초 작업[패키지 분리]

기존에 우리가 쓰던 프로젝트를 이용하여 실습해보도록 하죠!! 없으신 분들은 아래 내용을 참고하셔도 좋고, 직접 하고 싶으시다면 여기를 참고해주시기 바랍니다.

자.. 저번 시간에는 가상으로 회원가입을 만들었으며, 이러한 회원가입은 상상의 나래를 펼쳐서 만들어보았습니다. DataBase에 넣지도 않았으며, 값의 입력도 없었었죠??
지금도 Database는 사용하지 않을 것이지만, 그래도 일정한 틀이 있어야 하기 떄문에 VO도 만들어 보고, 값을 Store도 해보겠습니다.
VO에 대해 알아보고 싶은 분은 여기를 클릭해주세요

그전에 기능들을 Divide하기 위해 패키지를 나누어서 설정해보도록 하겠습니다. 이것은 차 후의 프로젝트에 적응을 하기 위한 necessary point입니다!!

DI의존주입

패키지를 생성하기 위해 src/main/java에 오른쪽 마우스 누르시고 New -> Package 을 누릅니다.

DI의존주입

패키지 명은 Service를 입력하고 선택합니다.
참고로 Service 패키지는 DataBase와 연동하여 처리를 할 때 자주 사용하는 패키지의 의미를 뜻합니다.

DI의존주입 DI의존주입

그리고 우리가 만들었던 Register.java 파일을 Service 패키지로 Move 합시다.

DI의존주입

F2를 눌러서 이름 변경을 해봅시다. 이름은 Register.java -> RegisterService.java로 바꾸도록 하죠.

DI의존주입

자.. 일단 기존에 있는 코드들의 기초적인 공사는 끝난 거 같습니다. 그러면 VO를 만들고 Service를 수정하여 좀 더 깊게 들어가보도록 하죠.


예제로 확인하는 Spring DI

DI의존주입

VO를 만들기 위하여 New-> Class를 클릭합니다.

DI의존주입

RegisterVO.java 파일을 만들어 줍시다.

간단하게 회원가입에 필요한 정보들을 적었습니다.

DI의존주입

그리고, DAO Package도 만들고, RegisterDAO.java로 적어주신다음에 Next 눌러주세요

RegisterDAO.java를 다음과 같이 작성해주세요. join 메소드를 호출 하면 리스트에 추가하는 아주 간단한 소스코드 입니다.

그리고 Service를 구현해 봅시다. RegisterService 에서는 실제로 값이 들어갈 수 있는지 체크만 하고, DAO를 불러오는 역할을 하는 클래스입니다. 아래 코드를 확인해볼까요??

코드 설명을 하자면 간단히 아이디가 있는지 확인하고, DAO를 호출하는 형태입니다. 현재 코드에서 주의 깊게 볼 부분은 RegisterService 생성자 부분인데요. 파라미터 부분에 registerDAO 객체를 가져오게 되는데요.

RegisterDAO.java를 가져오는 부분이 제일 중요합니다. 이 객체는 Bean에서 꺼내오기 때문에 해당 Bean을 정의해주는 Xml 파일을 확인해봅시다.

맨 처음에 registerDAO 객체를 먼저 생성합니다. 생성된 객체를 registerService Bean을 생성 할 때 constructor-arg 코드를 이용해 registerDAO 객체를 주입합니다.

현재 보고 계신 부분이 DI 부분입니다!!

코드를 계속 보시고 이해하실 때 까지 살펴봐주시기 바랍니다. 기초이자 제일 중요한 부분입니다.!!

ApplicationContext.xml 에서 RegisterService 객체를 불러와서 join() 메소드를 호출하고 print() 메소드를 호출합니다.


코드리뷰 및 요약

생성된 bean 객체를 다른 bean 객체에 주입시키기 위하여 constructor-arg를 이용합니다.

RegisterService(RegisterDAO registerDAO) {
   this.registerDAO = registerDAO;
}

생성자에 DAO bean 객체를 주입합니다.


마무리

아주 간단하지만 복잡하게 느껴질 수 있는 DI(Dependecy Injection) 의존성 주입을 쉽게 배워보았습니다. Spring에 가장 많은 부분을 차지하고 있으며, 모든 것은 이 부분이 기초로 되어 나아가집니다.
저도 항상 구글링을 하는 사람으로써 언제나 남들의 글을 끝까지 보는 것은 아주 힘들다고 생각합니다. 기초가 없으신 분들은 이러한 힘든 작업 뿐 아니라 직접 따라하면서 제가 한 부분들을 스스로 해주셔야 자기의 것으로 만들어 지기 때문에 귀찮으시더라도 한번 쯤 해보는 습관들이시는 것 어떠세요?!!