티스토리 뷰

반응형

 

 

 



 

 

SpringBoot

 

 

 

필자도 한때 프로젝트를 뛰면서 생각없이 기간내에 처리하기 위해 

@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;
    }
    ...

 

 

 

 

몸에 자연스럽게 익혀진 것을 바꾸는 것이 쉽진 않지만

바꾸려는 시도만으로도 큰 변화라고 생각합니다.

좋은 방향으로 개발하는 것이 우리에겐 더 좋은 결과를 가져다 주니까요.

 

 

 

 



 

 

 

 

 

 

 

 

참고블로그
 

@Autowired vs @RequiredArgsConstructor vs @Resource 차이점

이전에 국비 교육을 들을 때 의존성 주입을 하면 @Autowired 혹은 @Resource 이 2개의 어노테이션을 사용했었다. 최근에 의존성 주입을 할 때 위 2개의 어노테이션 말고 @RequiredArgsConstructor 가 더 실용적

backendcode.tistory.com

 

 

반응형
댓글
반응형
최근에 올라온 글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday