DI

의존성 주입

하나의 객체가 다른 객체에게 의존성을 제공하는 기술이다. DI는 객체간의 의존성과 결합도를 줄이고 코드의 재활용성을 높인다. 이때 필요한 객체를 직접 생성하는 것이 아니라 외부에서 생성된 객체가 내부로 주입되어 사용되게 된다.

따라서 의존성을 사용하기 위해서는 container에 반드시 객체가 미리 생성되어있어야 한다.

 

Spring IoC

객체(Bean)의 생성, 소멸, 의존관계 등을 Spring container가 자동으로 관리한다. 이를 통해 객체 간의 결합도가 최소화되어 유지보수가 향상되게 된다.

IoC의 방법

1. 의존성 검색 - 컨테이너가 생성한 객체를 클라이언트가 검색하여 사용한다.

2. 의존성 주입 - 컨테이너가 의존관계를 통해 필요한 곳에 자동으로 주입한다.

 

이 글에서는 2번째 방법인 의존성 주입에 대해 다룬다.

 

spring 에서의 의존성 주입 방법

 

- Bean 생성

1. XML 설정파일에 빈을 생성하거나

2. Annotation 사용하여 생성한다.

- 컨테이너가 객체간의 의존관계에 따라 필요한 객체를 주입하는 방법

Constructoer Ingection, Setter method Injection, Field Injection이 있다.

 

 

Annotation

@의 형태로 특별한 기능을 표현한다. spring에서는 DI, Bean 등록, 탐색 등에 사용된다.

클래스, 메소드, 필드 선언에서 사용된다. 컴파일 과정에서 annotation 정보로 코드가 자동생성된다.

사용목적

어플리케이션이 커질수록 XML 설정 작업이 복잡하지는 단점을 Annotatioin으로 보완가능하다. 또 java source 필요한 곳에 어노테이션을 사용하여 코드의 가독성을 향상시키며 사용법이 간단하다.

spring에서 annotation 설정방법.

 

Bean 등록 Annotation

@Component - Spring이 Bean으로 등록하는 가장 기본적인 annotation이다. @Component가 붙으면 해당 클래스를 빈으로 등록한다.

@Component보다 좀 더 구체화한 Annotation들이 있다.

@Controller - 웹의 요청과 응답을 처리하는 클래스

@Service - 비즈니스 로직을 가지는 클래스에 넣어주는 anntation이다.

@Repository - 파일이나 데이터베이스를 처리하는 클래스에 넣어준다.ex) DAO

 

DI Annotation

@Autowired

생성자, 맴버함수, (주로)맴버변수 위에 설정한다.

@Inject로 대체 가능

spring container는 Bean으로 생성된 객체 중 같은 타입의 객체를 찾아서 맴버변수에 자동으로 주입한다.

ex)

@Repository <!--Spring container가 BoardDAO를 Bean으로 객체를 등록한다.-->

public class BoardDAO { }

 

@Autowired <!--Spring container가 BoardDAO bean찾아서 자동으로 주입시켜준다.-->

BoardDAO boardDAO;

 

Spring CURD Project with Annotation

1. 기존 JSP Project 다운로드 및 import

2. 새 Spring MVC 프로젝트 생성

3. web.xml : UTF-8 encoding filter 추가

4. Library dependency 추가 (MySQL Connector, Spring-jdbc)

5. root-context.xml 파일에 jdbcTemplate bean 등록

6. BoardVO class 생성(getters & setters)

7. BoardDAO class 생성(CRUD method)

8. BoardService interface 생성

9. BoardServiceImpl class 생성

10. BoardController class 생성

11. JSP Pages 작성

12. Tomcat을 이용한 local 테스트

 

+ Recent posts