일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스웨거
- 스프링의 정석
- 웹개발
- emqx
- @jsonproperty
- 쇼트유알엘
- 개인프로젝트
- java
- 시큐리티
- 생성자 주입
- 데이터베이스
- Spring
- docker
- 카프카
- 스파르타코딩클럽
- JWT
- visualvm
- Spring Security
- DB
- EC2
- WEB SOCKET
- 패스트캠퍼스
- 항해99
- Kafka
- AWS
- 프로그래머스
- MYSQL
- 남궁성과 끝까지 간다
- JavaScript
- CentOS
- Today
- Total
Nellie's Blog
[TIL-231116목] 회사 업무 11개 API 개발 완료 / 생성자 주입과 필드 주입 본문
회사에서 백엔드 개발을 계속 진행했다.
필요한 API 명세가 대략 11개 정도 있었는데 폭풍 개발을 해서 완료했다. 물론 필요한 개발이 많지만 대략 필요한 것만..
팀장님께 리뷰를 받았는데,
회사에서는 보통 필드 주입으로 @Autowired 를 쓰는데 내가 쓴 생성자 주입이 뭐냐고 물어보셨다.
순간 당황해서 ,
조금 더 안전하고 , 불변 객체로 만들어서 쓰는게 권장된다고 알고 있다고 답했다.
사실 공부할 때 주입의 종류 4가지(생성자/필드/세터/일반 주입)가 뭔지 대략만 알고 있었지 사용하는 정확한 이유, 원리를 이해하진 못했다.
가장 기본적인 부분을 모른다는 것이 부끄러웠다.
그 외에 팀장님께서는 패키지 구조를 도메인 별로 구분을 해야 하는 것, ResponseDto, RequestDto 를 쓸 때의 장단점과 회사에서는 그렇게 쓰지 않는다는 것, 등을 말씀해주셨다.
전반적으로는 잘했다고 하셔서 기분이 좋았다 :)
생성자 주입과 필드 주입
생성자 주입
생성자 주입은 생성자의 호출 시점에 1회 호출 되는 것이 보장된다.
그렇기 때문에 주입받은 객체가 변하지 않거나, 반드시 객체의 주입이 필요한 경우에 강제하기 위해 사용할 수 있다.
또한 Spring 프레임워크에서는 생성자 주입을 적극 지원하고 있기 때문에, 생성자가 1개만 있을 경우에 @Autowired를 생략해도 주입이 가능하도록 편의성을 제공하고 있다.
그리고 생성자 주입은 필드/세터 주입과 다르게 final로 선언할 수 있다. 즉 , 런타임에 객체 불변성을 보장한다.
필드 주입
필드 주입을 이용하면 코드가 간결해져서 과거에 상당히 많이 이용되었던 주입 방법이다.
하지만 필드 주입은 외부에서 접근이 불가능하다는 단점이 존재하는데, 테스트 코드의 중요성이 부각됨에 따라 필드의 객체를 수정할 수 없는 필드 주입은 거의 사용되지 않게 되었다.
또한 필드 주입은 반드시 DI 프레임워크가 존재해야 하므로 반드시 사용을 지양해야 한다.
왜 이런 차이가 발생할까?
생성자 주입과 필드 주입은 빈을 주입하는 순서가 다르다!
생성자 주입은 빈 생성과 동시에 의존성 주입 (빈 생성 & 주입)
필드/세터 주입은 빈을 생성한 후에, 의존성 주입 (빈 생성 → 주입)
참고
'회고록' 카테고리의 다른 글
[TIL-231118토] Vue 공부 , @Retention 이란 (0) | 2023.11.19 |
---|---|
[TIL-231117금] 스프링 빈 라이프 사이클 / 생성자 주입과 필드 주입 차이점 (2) | 2023.11.17 |
[TIL-231115수] 회사 업무 API 개발, 쿼리 작성 (0) | 2023.11.15 |
[TIL-231114화] 회사 업무 개발 시작 (1) | 2023.11.15 |
정보처리기사 필기 결과 발표! 평균 86점으로 합격 (1) | 2023.03.21 |