Java @Autowired를 지양하는 이유

박은빈·2023년 4월 25일
0

자바

목록 보기
20/25

@Autowired란

spring에서 클래스에 대한 종속성을 자동으로 연결하는데 사용되는 주석이다.
클래스에 주입해야하는 종속성이 있는 경우 @Autowired를 사용하여 적절한 bean을 찾아 주입하도록 spring에 알릴 수 있다

@Service
public class UserService {

  @Autowired
  private UserRepository userRepository;

  // ...
}

위 처럼 UserSevice라는 클래스에 UserRepository를 주입해야할때 @Autowired를 이용하면 spring은 UserRepository유형의 bean에 대한 application context를 검색한 다음 UserService에 주입시킨다.

즉 @Autowired를 사용하면 자동 종속성 주입을 허용하여 코드의 양을 줄여주는 spring의 기능이다

@Autowired의 사용을 줄여야하는 이유

결론부터 말하자면 @Autowired를 사용하면 클래스 간의 강한 결합으로 이어질 수 있고, 순환 참조가 일어날지도 모른다. 또한 final을 붙일 수 없어서 객체의 변경이 가능해진다

@Autowired는 클래스의 종속성을 자동으로 연결한다. 이는 아주 편리한 기능이지만 해당 종속성과 밀접하게 연결되어 있음을 의미하기도 한다. 이로인해 코드의 유연성이 떨어지고 장기적인 유지 관리가 더 어려워질 수 있다.

생성자 사용

그러면 @Autowired대신에 무엇을 사용해야되냐
바로 생성자를 이용한다.

생성자를 이용할경우 다음과 같은 이점이 생긴다
1. 결합 감소 : 생성자 주입은 클래스 구현 세부 사항에서 종속 클래스를 분리하여 클래스간의 결합을 줄일 수 있다
2. 순환참조 방지 : 생성자 주입은 생성자에 필요한 인자를 먼저 확인한 후 인자에 해당하는 빈을 생성하기때문에 순환참조가 발생하는경우 여기서 막을 수 있다
3. 불변성 보장 : final 키워드를 사용할 수 있기때문에 객체의 불변성이 보장된다

@Controller
public class UserController {

  private final UserService userService;

  public UserController(UserService userService) {
    this.userService = userService;
  }

  // ...
}
profile
안녕하세요

0개의 댓글