* 객체 의존성이란?
: A 객체가 B 객체를 참조하고 있다면 A 객체는 B 객체에 의존성을 가진다. (ex. 일체형 배터리)
public class A {
public static void main(String[] ars) {
B b = new B(); // new 메서드를 통해 객체를 "직접생성"하여 B를 참조하고 있다. == B를 의존하고 있다.
b.fun();
}
}
* 객체 의존성을 가지는 것의 문제점?
(1) 객체명 변경 또는 객체 메소드명등의 변경이 일어날 때, 그 객체를 의존하고 있는 다른 객체들까지 변경되어야 한다.
B 객체명이 C로 바뀌면 B를 참조하고 있던 A도 코드를 수정해야 하는것..
(2) Unit Test가 어렵다.
* 의존성 주입(DI - Dependency Injection) 이란?
: Framework에 의하여 객체의 의존성이 주입되는 설계 패턴
필요한 객체를 직접 생성하지 않고 외부(xml 파일 등에서 생성된 객체를 사용하는 것
* 의존성 주입의 장점
(1) 가독성과 코드 재사용 향상
(2) 종속성 감소
(3) 소스 확장성 및 유지보수에 용이
* 의존성 주입 방법
마틴파울러가 정의한 의존성 주입(DI) 패턴은 3가지가 있다.
(1) 생성자를 통한 전달
<bean id="studentDao" class="ems.member.dao.StudentDao"></bean>
<bean id="registerService" class="ems.member.service.StudentRegisterService">
<constructor-arg ref="studentDao"></constructor-arg>
</bean>
(2) Setter()를 통한 전달
<bean id="dataBaseConnectionInfoDev" class="ems.member.DataBaseConnectionInfo">
<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:xe" />
<property name="userId" value="scott" />
<property name="userPw" value="tiger" />
</bean>
(3) 멤버 변수를 통한 전달
-> 현재는 생성자를 통한 의존성 주입을 가장 추천한다.
결론 !!
의존성 주입은 참조가 필요한 객체에 대한 실체정보를 외부에서(config.xml, root-context 등) 관리하여 사용하는 것이고, 이렇게 사용하게 되면 모듈간의 결합도가 낮아져서 유연한 변경이 가능하다.
@Autowired 어노테이션을 이용해서
<constructor>나 <property>태그 없이 자동 주입으로 bean을 찾아줄 수도 있다.
스프링 어플리케이션에서 객체의 의존관계를 설정할때 XML이나 자바 코드 설정을 통해 빈을 정의하고 의존 관계를 정의할수도 있지만 @Autowired를 통한 자동 의존주입을 이용할수도 있습니다.
- 참고 사이트
https://private.tistory.com/39
'프로그래밍 > Spring Framework' 카테고리의 다른 글
[Spring] 스프링 AOP이란? - 적용방법 | 관점지향 프로그래밍 | AOP 어노테이션 (0) | 2022.05.12 |
---|---|
[Spring] VO와 DTD의 차이란? (Value Object / Data Transfer Object) (0) | 2020.08.14 |
[Spring] Mybatis 연동 시 오류 해결방법 (3) | 2020.07.26 |
[Spring] 스프링 게시판 예제 (3) - DB연동 + View단 출력 (0) | 2020.07.25 |
[Spring] Maven 빌드, 인스톨 시 fatal 오류 해결법 (0) | 2020.07.25 |