DI (Dependency Injection, 의존성 주입)

  • 빈(Bean) 설정파일에서 의존 관계의 정보만 추가해주면 조립은 Spring Framework가 해준다.

  • @Autowired 어노테이션으로 Bean을 자동 주입 가능

  • 인터페이스를 사용하여 객체 간의 결합력을 낮춘다.

  • 높은 재사용성, 변경에 민감하지 않고 독립적인 테스트가 가능하다.

 

의존성을 주입하는 방법

등록된 빈을 사용하기 위한 Spring Framework의 DI 방법은 생성자 주입, 수정자 주입, 필드 주입 3가지가 있다.

여기서 생성자 주입과 필드 주입을 볼 것이다.

 

생성자 주입 (Constructor Injection)

단일 생성자인 경우에는 @Autowired 어노테이션 조차 붙이지 않아도 되지만 2개 이상의 생성자인 경우에는 어노테이션을 붙여주어야 한다.

@Controller
public class HelloController {

	private HelloService helloService;

	@Autowired
	public HelloController(HelloService helloService) {
		this.helloService = helloService;
	}

}

 

필드 주입 (Field Injection)

필드 주입은 간단하다. 필드에 @Autowired 어노테이션을 붙여주면 자동으로 의존성 주입이 된다.

편리하기 때문에 많이 접할 수 있다.

@Controller
public class HelloController {

	@Autowired
	private HelloService helloService;

}

 

왜 생성자 주입을 권장할까?

  • A가 B를 다시 B가 A를 순환 참조하는 것을 방지할 수 있다.

  • 필드를 final로 선언할 수 있기 때문에 실행 중에 객체가 변하는 것을 막을 수 있고, 오류를 사전에 방지할 수 있다.

  • 의존관계가 실행중에 동적으로 변경하는 경우는 거의 없음므로 생성자 주입을 권장한다.

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

[Spring] DAO 와 DTO  (0) 2020.12.25
[Spring] Spring MVC 구조  (0) 2020.12.25
[Spring] MyBatis 란?  (0) 2020.12.15
[Spring] Maven 과 Gradle  (0) 2020.12.13
[Spring] Spring Framework 와 Spring Boot  (0) 2020.12.13

+ Recent posts