의존성 주입 DI
public class Dog {
Animal animal = new Animal();
public void bark(){
animal.dog();
}
}
의존이란 어떤 클래스의 처리 내용이 다른 클래스의 내용이 변경됨에 따라 달라지는 관계를 뜻한다.
Dog 클래스에서는 Animal 클래스에 정의되어있는 메서드를 사용하기 위해 Animal의 객체를 생성(new)한 다음 Animal의 dog메서드를 호출하고 있다. 이를 Dog 클래스가 Animal에 의존한다고 표현한다. Animal의 dog 메서드의 내용이 달라지면 Dog 클래스의 bark 메서드의 내용 또한 달라지게 된다.
의존성 주입(DI)이란 프로그래밍에서 구성요소 간 의존관계가 소스코드 내부가 아닌 외부의 설정파일 등을 통해 정의되게 하는 디자인 패턴 중 하나이다. 컴파일 시가 아닌 스프링 프레임워크가 서로 연결시켜주므로 객체 간의 결합도를 느슨하게 할 수 있다. 유연성과 코드 재사용성이 높아진다.
스프링에서 외부설정 파일(xml)을 통해 객체를 주입하는 방법에 대해서 설명하겠다.
- 주입방법1 : 생성자
<!-- Fruits fruits = new Fruits(); -->
<bean id="fruits" class="com.test.Fruits"></bean>
스프링에서는 xml파일을 통해 객체 생성 및 관리를 한다. xml에서 생성자를 통해 객체를 주입하는 방법은 다음과 같다. 기본적으로 아무런 프로퍼티를 설정해주지 않으면 기본 생성자 호출한다.
<!-- Fruits mango = new Fruits("mango", "sweet"); -->
<bean id="mango" class="com.test.Fruits">
<constructor-arg>
<value>mango</value>
</constructor-arg>
<constructor-arg value="sweet"></constructor-arg>
</bean>
이는 자바 소스 코드 내부에서 new 객체 생성과 같은 역할을 한다. id는 변수명이 되고 class는 객체를 생성해주는 클래스 경로이다.
- 주입방법2 : setter
<bean id="mango" class="com.test.Fruits">
<property name="name" value="mango"></property>
<property name="taste" value="sweet"></property>
<property name="price" value="5000"></property>
</bean>
setter를 통해 주입하는 방법이다. name은 setName 앞에 set을 빼고 대문자를 소문자로 바꾼 이름을 자동으로 인식한다.
댓글