일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- LIST
- 쿠버네티스
- Thread
- Kubernetes
- 멀티 쓰레드
- 자바
- Docker
- 오케스트레이션
- Collection
- 도커 엔진
- container
- 스레드
- 자료구조
- 동시성
- 실전 자바 중급 2편
- 리스트
- contatiner
- 컨테이너
- 김영한
- 쓰레드
- 알고리즘
- 중급자바
- 도커
- 시작하세요 도커 & 쿠버네티스
- 인프런
- 제네릭스
- java
- 시작하세요! 도커 & 쿠버네티스
- 실전 자바 고급 1편
- 스레드 제어와 생명 주기
- Today
- Total
쌩로그
Spring에서의 DI (생성자 주입과 final) 본문
⚡ 생각대로 살지 않으면 사는대로 생각한다.
⚡ 나는 어차피 잘 될 놈이다. 이미 잘 되고 있고, 계속해서 잘 되고 있다.
별 내용은 아니다.
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
}
@Service
public class MemberService {
private final MemberRepository memberRepository;
@Autowired
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
다음과 같이 Controller와 Service가 있다고 했을 때,
필드로 지정한 private final Member~~ member~~
코드가 있다.
final
키워드를 사용할 때, 코드를 작성하면서도 음..그냥, 그런갑다...
하고 넘겼었다.
그런데 영한님의 스프링 입문강의부터 쭉 보기 시작했고 지금 입문 강의를 듣고있다.
(내가 생각하는 스프링 2대 성인 중 한명.. 한 분 더는 토비님..ㅎㅎ..)
있는 와중에 DI(Dependency Injection : 의존성 주입)에 대해서 간략히 소개하는데,
@Autowired
혹은 @Component
를 통해서 Spring Bean(스프링(컨테이너)에서 관리하는 객체))이 되고, 주입을 시켜줄 때 스프링 컨테이너에 있는 객체(Bean
)과 연결된다.
그리고 보통 스프링 컨테이너에 등록된 Bean
은 싱글톤 객체로 사용되는데,
컨트롤러는 서비스를,
서비스는 레포지토리를 필요로 한다.
만약에 각 계층에서 필요로 하는 객체를 new
연산자로 새로 객체를 생성해서 쓰다보면, 다른 곳에서도 접근이 가능해지게 됨으로, 문제가 생길 수 있다.
그래서 보통 스프링 컨테이너에서 관리하는 객체인 Bean으로 생성해서 하나의 인스턴스를 재사용하는 싱글톤으로 객체를 사용하게 되는데, 싱글톤은 하나의 객체만을 가지고 사용하는 객체다...
만약 final
을 사용하지 않는다면,
Controller는 private MemberService memberService = new MemberService();
Service는 private MemberRepository memberRepsitory = new MemberRepository();
이렇게 하거나, 이런 코드 말고도 참조 변수에 다른 인스턴스를 계속 넣을 수 있다.
그렇게 되면 인스턴스가 재생성 가능해져서 하나의 객체만 사용하는 싱글톤과는 멀어진다.
그래서 스프링 컨테이너에서 관리하는 Service
혹은 Repository
와 같은 Bean을 DI(Dependency Injection : 의존성 주입)하여 참조변수에 값을 주고, 이후에
변경 되지 못 하도록 하기위해서 final
키워드를 사용한다.
영한님 감사합니다!
-끝-
'Spring Project > Spring & Spring Boot' 카테고리의 다른 글
Transacitinal 오개념 바로잡기 (0) | 2023.11.19 |
---|---|
Spring Controller 계층에서 파일 입력받기 (3) | 2023.11.19 |
Mockito로 Test작성 시 given.willReturn에 void 적용할 때 (0) | 2023.07.23 |
Mapper를 사용할 때 필드명을 바꿔주는 것이 좋다. (0) | 2023.06.21 |
final 키워드 (feat. 스프링 DI(의존성 주입) & 필드 변수 생성자주입) (0) | 2023.05.04 |