의존성 주입 방법

yesrin·2023년 11월 3일

Spring

목록 보기
17/18

의존성 주입의 3가지 방법
1. 생성자 주입(Constructor Injection)
2. 필드 주입(Field Injection)
3. 수정자 주입(Setter Injection)

출처: https://dev-coco.tistory.com/70 [슬기로운 개발생활:티스토리]

생성자 주입(Constructor Injection) 방식

private SqlSessionTemplate sm;

생성자 주입은 생성자를 통해 의존성을 주입하는 방식입니다.
이것은 일반적으로 Spring에서 권장되는 주입 방법 중 하나이며, 코드의 테스트 가능성을 높이고 더 좋은 의존성 주입을 지원합니다.
생성자 주입은 클래스의 의존성을 외부에서 주입하므로 코드의 결합성을 낮추고 테스트하기 쉽게 만듭니다.

필드 주입(Field Injection) 방식

@Autowired SqlSessionTemplate sm;

필드 주입은 필드 레벨에서 의존성 주입을 수행하는 방법이며, 주로 필드에 직접 의존성을 주입하는 방식입니다.
이것은 Spring Framework에서 지원되는 주입 방법 중 하나이지만, 몇 가지 단점이 있습니다.
필드 주입은 테스트 가능성이 떨어지며, 코드의 결합성을 높이고 테스트하기 어렵게 만들 수 있습니다.

@Autowired
public MyClass(SqlSessionTemplate sm) {
this.sm = sm;
}

Autowired 단점
코드가 간결하지만, 외부에서 변경하기 힘들다.
프레임워크에 의존적이고 객체지향적으로 좋지 않다.


일반적으로 생성자 주입을 사용하는 것이 더 좋은 방법이며, Spring Framework에서는 의존성 주입을 위한 생성자 주입을 권장합니다.
생성자 주입을 사용하면 코드의 품질과 테스트 가능성을 향상시킬 수 있습니다.

SpringBoot에서는 @Autowired 방식을 권장한다고 한다.


그럼 @Autowired와 Resource 중에 어떤걸 사용하는게 나을까?

ChatGPT 답변

Spring Boot 프로젝트에서 BoardService를 주입하는 방법으로 @Resource와 @Autowired 중에서 선택하는 것은 개발자의 기호 및 프로젝트의 요구 사항에 따라 다릅니다. 그러나 일반적으로 @Autowired 어노테이션을 사용하는 것이 더 널리 권장되고 사용되는 방법입니다.

여기에 @Autowired를 사용하는 이유와 장점이 있습니다:

스프링 프레임워크의 특정 어노테이션: @Autowired는 스프링 프레임워크에 내장된 어노테이션으로, 스프링에서 빈을 주입하기 위한 공식적인 방법입니다. @Autowired를 사용하면 스프링의 의존성 주입 관리를 원활하게 활용할 수 있습니다.

코드의 가독성 및 명확성: @Autowired를 사용하면 빈을 주입하는 부분이 명확하게 표시되므로 코드의 가독성이 향상됩니다. 또한 @Autowired를 사용하면 빈의 타입을 기반으로 의존성을 주입하므로 이름 충돌 등의 문제가 발생하기 어렵습니다.

테스트 용이성: @Autowired를 사용한 의존성 주입은 테스트 코드에서 더 쉽게 목(mock) 빈을 주입하고 단위 테스트를 수행하는 데 도움이 됩니다.

Spring Boot에서 널리 사용되는 방식: Spring Boot 프로젝트에서는 주로 @Autowired를 사용하는 것이 널리 통용되고 있으며, Spring Boot의 자동 구성 기능과 잘 통합됩니다.

@Resource를 사용하는 경우에도 의존성 주입은 가능하지만, @Autowired를 사용하는 것이 일반적이며, 코드의 명확성과 가독성을 높이는 데 도움이 됩니다. 따라서 Spring Boot 프로젝트에서는 @Autowired 어노테이션을 선호하는 것이 좋습니다.

강사님이 요즘은 Resource를 사용을 많이 한다고 하셨는데 한번 더 알아봐야 겠다.

@Autowired를 사용하는게 가장 적절한 방법으로 보인다.

profile
안녕하세요! 틀린 정보는 댓글 달아 주세요.

0개의 댓글