본문 바로가기

Wanna be a Programmer/Spring Framework

스프링 프레임워크 및 DI(Dependency Injection)패턴

 

스프링(Spring)

 

- 스프링의 정의

- 기업환경에서  필요로 하는 기능을 제공하는 경량의 프레임워크

- J2EE가 제공하는 다수의 기능을 지원

- DI(Dependency Injection), AOP(Aspect Oriented Programming) 지원

 

- 스프링의 특징

1. 경량 컨테이너

  - 자바 객체를 담고 있는 컨테이너 (모든 객체를 스프링이 생성하여 컨테이너에 저장)

  - 자바 객체의 생성 및 소멸과 같은 라이프 사이클 관리

  - 스프링으로부터 필요한 객체를 가져와 사용

 

2. DI(Dependency Injection) 패턴 지원

  - 설정 파일(xml) 또는 어노테이션을 통해 객체 간 의존 관계 설정

  - 객체는 직업 의존하고 있는 객체를 생성하거나 검색할 필요 없음

 

3. AOP(Aspect Oriented Programming) 지원

  - 관점 지향 프로그래밍(문제를 바라보는 관점을 기준으로 삼는다)

  - 공통 관심 사항을 구현한 코드를 핵심 로직을 구현한 코드에 삽입

(메소드들이 일을 하기 위한 공통적인 사항을 일괄적으로 처리)

  - 어플리케이션 전반에 걸쳐 필요한 기능인 트랜젝션이나 보안 등

 

4. POJO(Plain Oid Java) 지원

  - 스프링 컨테이너에 저장된 자바 객체는 특정 인터페이스를 구현하거나 클래스를 상속받지 않고도 사용 가능

 

5. 트랜잭션 처리를 위한 일관된 방법 적용

  - 트랜잭션 : 하나의 작업에 대한 일관성을 가지는 데이터 베이스 작업의 단위

    (CRUD를 각각이 아닌 해당 작업에 대한 전체적인 작업 단위로 생각)

 

 

Dependency Injection 패턴

 

- 객체를 생성할 때 new 키워드를 통해서 생성하면, 추후의 클라이언트의 요구사항이 변경됬을경우, 대부분의 소스를 수정해야 한다. But, 스프링 프레임워크를 적용하여 xml 파일에서 설정만 해주면 외부 설정 파일(xml)에서 연관 관계에 있는 객체(DTO)를 넣어주기 때문에 의존 객체를 찾기 위한 코드가 불필요하다.

 

즉, 외부설정에서 객체를 찾아서 사용하기 때문에 코드내의 의존 관계를 맺는 코드 생성을 할 필요가 없다.

 

의존(Dependency)하는 객체를 외부설정에서 삽입(Injection)하기 때문에 DI패턴이라고 함.

 

 

1. 생성자를 통한 객체 생성

  - xml에서 <constructor-arg> 태그를 이용

<bean id="객체명" class="클래스명(패키지까지 포함)">

<constructor-arg value="홍길동"/>

<constructor-arg value="30" type="int"/>

<constructor-arg value="서울시 송파구"/>

</bean> 

 

2. 프로퍼티를 통한 설정

  - DTO객체의 setter 메소드를 이용하여 필요한 객체를 생성하고, xml에서 <property>태그를 사용 값을 받는다.

<bean id="객체명" class="클래스명">

<property name="name" value="홍길동"/>

<property name="age" value="30"/>

<property name="address" value="서울시 송파구"/>

</bean>

 

3. XML 네임스페이스를 이용한 프로퍼티 설정

  - xml에서 xmlns:p=http://www.springframework.org/shcema/p"를 이용하여 객체 생성

<bean id="객체명" class="클래스명"

        p:name="홍길동"

    p:age="30"

    p:address="서울시 송파구"/>