어제 커뮤니티에서 글을 보다가 어떤분이 본인 포트폴리오를 평가해달라며 올린 글을 보게 되었다.

그 글에는 수많은 고수들의 댓글이 달려있었는데, 대부분이 단기간이고 비전공자인데 이정도 수준이면 대단하다.. 뭐 이런 이야기였던것 같다. 물론 그중에는 혼자 한것이 맞냐 이런 의심을 품고 이것저것 물어보는 사람도 있었다.

그 댓글들을 보다가 의문이 들었다.

 

 

댓글 : 왜 @Inject를 쓰셨어요?? @Autowired와 @Inject의 차이는 알고 쓰신건가요?

작성자 : @Inject를 쓰는게 더 좋다는 글을 어디선가 봐서요..

 

 

곰곰히 생각해보니까 둘이 하는 역할은 비슷한것 같은데 어떤 차이점이 있고 어떤 어노테이션을 쓰는것이 좋은걸까 하는 생각이 들었다. 추가로 @Resource도 생각해보게 되었다.

 

 

 

@Autowired

type기반으로 DI를 해주는 어노테이션. 오토와이어드는 스프링 프레임워크에서 제공하는 어노테이션이다. 혹시나 프레임워크를 바꾸어 작업할 일이 생기면 사용할 수 없다. 빈생성시 싱글톤으로 생성하는 것이 디폴트값이기 때문에 같은타입으로 여러개 빈을 만들때 적합하지 않다. @Qualifier("이름")을 사용하면 이름을 찾아서 주입해줄 수 있긴 하다.

 

 

@Resource

name기반으로 DI를 해주는 어노테이션. 리소스는 자바에서 제공하는 어노테이션(JSR-250)이다. 이름으로 주입을 해주기 때문에 같은 타입의 빈을 여러개 만들때 유리하다.

 

 

@Inject

type기반으로 DI를 해주는 어노테이션. 인젝트는 자바에서 제공하는 어노테이션(JSR-330)이다. 타입기반으로 주입을 해준다.

 

 

 

 

@Autowired는 스프링 프레임워크에서 제공하기 때문에 아무래도 프레임워크에 종속적인 성격이 있을 것이다.

@Inject는 자바에서 제공하는 어노테이션이기 때문에 프레임워크에 상관없이 사용할 수 있다. 오토와이어드가 의존성을 확실하게 보장해주기 때문에 더 유리하다는 글도 꽤 있었는데 상황에 맞게 사용하는게 좋은것 같다. 

'이런저런 생각' 카테고리의 다른 글

MVC에서 Interface의 사용이유  (0) 2020.05.15

+ Recent posts