inflearn logo
강의

Course

Instructor

Spring DB Part 1 - Core Principles of Data Access

Transaction - Application 1

MemberServiceV1 @RequiredArgsConstructor 질문 있습니다.

440

blackhole124

60 asked

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
스크린샷 2023-08-19 오후 6.31.36.png강사님께서 코드에서

@RequiredArgsConstructor은

final이 붙거나 @NotNull이 붙은 필드의 생성자를 자동생성해주는 롬복 어노테이션이라고 알고 있습니다.

근데, 이 코드에서 @RequiredArgsConstructor가 사용된 이유가 무엇인가요?

private final memberRepositoryV1 memberRepository;를 사용하는 이유는

싱글톤으로 코드를 작성하기 위해(즉, memberRepositoryV1이라는 하나의 객체를 사용)이라고 이해하고 있습니다.

혹시, @RequiredArgsConstructor를 사용한 이유가 싱글톤 코드를 작성하기 위한 것과 연관이 있는 것인가요?

항상 친절한 답변 감사합니다.

spring mvc spring-jdbc

Answer 2

0

y2gcoder

안녕하세요. blackhole124님, 공식 서포터즈 y2gcoder입니다.

정확히는 생성자를 통해 memberRepository를 불변으로 주입해주기 위해서입니다. 말씀하신 것과 같이 @RequiredArgsConstructor를 사용하면 final 객체를 주입 및 초기화해주는 생성자를 자동으로 만들 수 있습니다. final 필드는 초기화 후에 변경하지 않도록 하는 제약이 있기 때문에, 우리는 해당 필드가 초기화 후에 변경되지 않는 필드라고 이해할 수 있습니다. 즉 memberService 객체를 생성할 때 memberRepository를 딱 한 번 주입한 뒤, 변경하지 않고 해당 객체를 계속 사용할 목적으로 해당 생성자를 이용했습니다.

또한 스프링 컨테이너에 memberService, memberRepository 객체가 빈으로 등록되어 있고, memberService의 생성자가 위에서 보여준 @RequiredArgsConstructor로 만들어진 생성자 하나 뿐이라면, 스프링에서는 해당 생성자 위에 @Autowired를 붙인 것과 같이 동작합니다. 즉 memberService 객체를 빈으로 등록할 때 memberRepository 빈을 찾아 의존성 주입해주게 됩니다.

위의 두 가지 이유로 @RequiredArgsConstructor를 많이 이용하는 것 같습니다!

감사합니다.

1

blackhole124

안녕하세요

친절한 답변 감사합니다.

혹시, "생성자를 통해 memberRepository를 불변으로 주입해주기 위해서입니다"라고 말씀하셨는데 여기서 "불변"이란 "직접적인 접근은 불가능하고, 메소드를 통해서 변경,조회,추가 등이 가능하다"라고 이해하면 옳게 이해한 것이 맞나요?

 

0

y2gcoder

저는 불변하다는 것을 말 그대로 변하지 않는다고 이해하고 있습니다. 예를 들어 memberRepository를 한번 초기화 하고 나서는 내부의 메서드를 사용하기는 해도 객체가 변하지 않습니다. 그러면 여러 쓰레드에서 memberService에 접근해서 memberRepository 빈을 사용해도 모두 같은 빈을 사용하고 있음을 보장받을 수 있습니다.

불변성에 대해 조금 더 학습해보시면 더 잘 이해되실 거라 믿습니다!

추가로 불변 객체를 사용하는 이유에 대해 잘 정리된 글을 링크하겠습니다.

https://mangkyu.tistory.com/131

0

wogud1514

https://velog.io/@developerjun0615/Spring-RequiredArgsConstructor-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%83%9D%EC%84%B1%EC%9E%90-%EC%A3%BC%EC%9E%85

spring initialiser 어떤걸 선택해야될지 모르겠어요

0

31

2

트랜잭션 템플릿이 체크예외는 커밋하는 이유가 궁금합니다.

0

51

1

jdbc 학습하다 궁금해서 질문드려요

0

82

1

정상이체와 이체중 예외발생 차이

0

68

2

이번 강의부터가 JDBC 직접 사용 맞나요?

0

88

1

순수한 서비스 계층에 대한 의문???

0

82

2

3_4test, 4test 자동 리소스 안됨

0

58

2

데이터베이스 선택 관련 질문.

0

68

2

after 메서드 사용 유무

0

57

2

데이터베이스 접근 및 DB 락

0

54

1

@SpingBootTest, @TestConfiguration

0

56

1

Read Committed 격리 수준 사용 관련 질문

0

48

1

AopCheck Test 부분의 EnhancerBySpring 확인 법??

0

66

2

커리큘럼 관련 질문

0

76

1

서비서 계층 스프링 프레임워크 사용

0

87

1

validation(toMember)의 위치

0

83

2

데이터 계층에서 서비스 로직의 datasource를 인식하는 방법

0

165

2

member 상수 질문

0

120

2

ctrl + F6 이후로 con 인식이 안 됩니다

0

153

2

DrivenManager 와 Connection 반환에 대한 질문입니다!

0

109

1

섹션5 트랜잭션 템플릿관련 질문(이기종 DB)

0

116

1

세션1 테이블 조회결과 그림은 Redo 로그에 속하나요?

0

100

1

트랜잭션이 필요하지 않은 경우 DB 대신 파일 시스템을 사용하는 것이 더 효율적인가?

0

98

1

강의 14분쯤 Exception 질문

0

115

2