티스토리 뷰
반응형
필자도 한때 프로젝트를 뛰면서 생각없이 기간내에 처리하기 위해
@Autowired 를 이용한 의존주입을 남발하여 사용해왔고,
지금도 자연스럽게 이를 사용해왔습니다.
(사실 Spring을 처음 접할 때 그렇게 쓰라고 가르쳤었음...)
생성자를 이용하는 것이 이점이 있음을 알고 있었지만
간편함에 빠진 오래된 버릇을 고치기란 쉽지 않았습니다.
그래서 신규로 하는 프로젝트에는 이런것들을 없애고자 @Autowired 를 완전 지양하도록 하려고 합니다.
이미 @Autowired 의 사용은 공식문서 그리고 Spring팀에서 지양을 권고해왔습니다.
단점들이 너무 명확했기에...
- 불확실한 참조
- 코드 변이의 가능성
- 순환참조의 가능성 (컴파일 시 검출 불가)
- 단일책임의 원칙 위반 가능성
장점은 남발하기 편하다? ㅋㅋㅋ
@Service
public class LoginService implements UserDetailsService {
@Autowired private LoginRepository loginRepository;
...
@Autowired 를 통한 필드 주입은 위와 같습니다.
자 그럼 이러한 단점들을 커버해주는 것이 생성자를 사용하는 것인데
대부분 생성자를 작성하는 것이 귀찮을 수 있습니다.
그러나 요즘 개발툴들은 생성자를 쉽게 작성해주기도 하고
@RequiredArgsConstructor 어노테이션으로 깔끔하게 작성 할 수도 있습니다.
Lombok 어노테이션 사용
@Service
@RequiredArgsConstructor
public class LoginService implements UserDetailsService {
private final LoginRepository loginRepository;
...
생성자 작성
@Service
public class LoginService implements UserDetailsService {
private final LoginRepository loginRepository;
public LoginService(LoginRepository loginRepository) {
this.loginRepository = loginRepository;
}
...
몸에 자연스럽게 익혀진 것을 바꾸는 것이 쉽진 않지만
바꾸려는 시도만으로도 큰 변화라고 생각합니다.
좋은 방향으로 개발하는 것이 우리에겐 더 좋은 결과를 가져다 주니까요.
참고블로그
반응형
'Java > SpringBoot&Spring' 카테고리의 다른 글
[SpringBoot] 정적리소스 cache control 설정. (2) | 2024.03.29 |
---|---|
[SpringBoot] H2 DB 연결해서 JPA 사용하기 (0) | 2024.03.20 |
[Java] Reflection을 이용하여 Map<> 동적 key값 처리하기 (0) | 2024.01.16 |
[Java] Optional의 ifPresent 활용하기 (1) | 2024.01.10 |
[SpringBoot] Jasypt로 프로퍼티 암호화하기. (0) | 2024.01.09 |
댓글