본문 바로가기

Web/Spring

[ Spring ] ② DI와 IoC

# 1. 의존성 주입하기

(1) 의존성 주입(DI, Dependency Injection)이란?

  • 클래스의 연관 관계를 개발자가 직접 코딩을 통해 컴포넌트(클래스)에 부여하는 것이 아니라 컨테이너가 연관 관계를 직접 규정하는 것
  • 코드에서 직접적인 연관 관계가 발생하지 않으므로 각 클래스들의 변경이 자유로워짐.

 

(2) 의존성 주입을 해야하는 이유

  • 기존의 자바 코드 구현의 문제점 : 자바 코드에서 직접 객체를 생성하는 것(tightly coupled)은 복잡한 문제를 일으킴. 다른 클래스의 변경 사항이 연속적으로 다른 부분에 영향을 미치는 것은 좋은 방법이 아님. 
  • 장점
    • 클래스들 간의 의존관계 최소화 -> 코드 단순화
    • 유지 및 관리가 쉬워짐
    • 기존 구현 방법은 개발자가 직접 코드 안에서 객체의 생성과 소멸을 제어했지만, 의존성 주입은 객체의 생성, 소멸과 객체 간의 의존 관계를 컨테이너가 제어 => 제어의 역전(IoC, Inversion of Control)

 

(3) 스프링의 의존성 주입 방법

  1. 생성자에 의한 주입
  2. setter에 의한 주입

 

 

# 2. 의존성 주입 실습하기

(1) 주입하는 방법

  • XML 파일 생성
  • JAVA에서 xml 파일을 읽어 들여 빈 생성

 

cf) XML이란?

  • XML(eXtensive Markup Language); 다른 마크업 언어를 만드는데 사용되는 다목적 마크업 언어
  • XML 이용하기; DTD, XML 스키마(XSD)
    • DTD란? (Document Type Definition) XML 문서의 구조 및 해당 문서에서 사용할 수 있는 적법한 요소와 속성을 정의합니다. DTD는 엔티티를 정의할 수 있으며, 빠른 개발을 위한 내부 DTD를 사용할 수 있습니다.
    • DTD 문법: <!DOCTYPE 루트요소 DTD식별자 [ 선언1 선언2 ... ]>

 

(2) setter를 이용한 주입

...더보기

1. xml을 이용한 의존성 주입 - setter

2. 자바 코드에서 빈 사용

 

(3) 생성자를 이용한 주입

 

(4) <bean> 태그에 사용되는 여러가지 속성들

속성이름 설명
id 빈 객체의 고유 이름으로, 빈 id를 이용해 빈에 접근합니다.
name 객체의 별칭입니다
class 생성할 클래스입니다. 패키지 이름까지 입력해야 합니다.
constructor-arg 생성자를 이용해 값을 주입할 때 사용합니다.
property setter를 이용해 값을 주입할 때 사용합니다.
lazy-init
  • 빈 생성을 톰캣 실행 시점이 아닌 해당 빈 요청 시 메모리에 생성할 수 있습니다.
  • true, false, default 세가지 값을 지정할 수 있습니다.
  • 설정하지 않거나 false로 설정 시 톰캣 실행 시 빈이 생성됩니다.
  • true로 설정 시 해당 빈 사용시 빈이 생성됩니다.

 

References

  1. 자바 웹을 다루는 기술
  2. DTD 개요, link 

'Web > Spring' 카테고리의 다른 글

[ Spring ] ⑥ 스프링 애너테이션 기능  (0) 2019.08.12
[ Spring ] ⑤ 스프링 JDBC 기능  (0) 2019.08.02
[ Spring ] ④ 스프링 MVC 기능  (0) 2019.08.01
[ Spring ] ③ AOP  (0) 2019.08.01
[ Spring ] ① Spring Framework 시작하기  (0) 2019.08.01