๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐ˜์‘ํ˜•

@Autowired๋ณด๋‹ค ์ƒ์„ฑ์ž ์ฃผ์ž… ๋ฐฉ์‹์„ ๋” ๋งŽ์ด ์“ฐ๋Š” ์ด์œ  ?

 

 1. ๋ถˆ๋ณ€์„ฑ(immutability) ํ™•๋ณด : ์‹ค์ˆ˜ ๋ฐฉ์ง€ ( @Autowired๋Š” ๋‚˜์ค‘์— ๊ฐ’์ด ๋ฐ”๋€Œ๋Š” ๊ฑธ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์—†๋‹ค.)

 2. ํ…Œ์ŠคํŠธ๊ฐ€ ์‰ฌ์›Œ์ง : Mock ์ฃผ์ž…ํ•˜๋ ค๋ฉด Spring context ํ•„์š” → ๋А๋ฆผ

 3. ์ˆœํ™˜ ์ฐธ์กฐ ๋ฐฉ์ง€์— ๋„์›€ : ์ƒ์„ฑ์ž ์ฃผ์ž…์€ ์ˆœํ™˜ ์ฐธ์กฐ๊ฐ€ ์žˆ์œผ๋ฉด ์• ์ดˆ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜์ง€ ์•Š์Œ → ๋ฌธ์ œ๋ฅผ ์ดˆ๊ธฐ์— ๋ฐ”๋กœ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์Œ

 

Spring ๊ณต์‹ ๋ฌธ์„œ์—๋„ ์ƒ์„ฑ์ž ์ฃผ์ž… ๋ฐฉ์‹ ๊ธฐ๋ณธ์œผ๋กœ ์“ฐ๋ผ๊ณ  ๊ถŒ์žฅํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

 

๊ทธ๋ž˜์„œ ์ž์ฃผ์“ฐ์ด๋Š” ์ง๊ฟ์ด @RequiredArgsConstructor๋‹ค.

@RequiredArgsConstructor

์ด๊ฑธ ํด๋ž˜์Šค์— ๋ถ™์ด๋ฉด,
final๋กœ ์„ ์–ธ๋œ ํ•„๋“œ๋“ค๋งŒ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” Lombok์—์„œ ์ œ๊ณตํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.

 

์˜ˆ์ œ

@RequiredArgsConstructor
public class MemberService {
    
    private final MemberRepository memberRepository;
    
    private final EmailService emailService;

    private String someTempValue; // <- ์ด๊ฑด ์ƒ์„ฑ์ž์— ํฌํ•จ๋˜์ง€ ์•Š์Œ
}

์ด๋ ‡๊ฒŒํ•˜๋ฉด ์•„๋ž˜ ์ƒ์„ฑ์ž๊ฐ€ ์ž๋™ ์ƒ์„ฑ๋œ๋‹ค.

public MemberService(MemberRepository memberRepository, EmailService emailService) {
    this.memberRepository = memberRepository;
    this.emailService = emailService;
}

์ฆ‰ DI(์˜์กด์„ฑ ์ฃผ์ž…)์‹œ ์ž์ฃผ ์“ฐ์ด๋Š” ํŒจํ„ด!

 

์ƒํ™ฉ ์“ฐ๋ฉด ์ข‹์€ ์ด์œ 
๋ถˆ๋ณ€ ๊ฐ์ฒด ์„ค๊ณ„ final ํ•„๋“œ๋งŒ ๋ฐ›๋Š” ์ƒ์„ฑ์ž๋‹ˆ๊นŒ ๊ฐ์ฒด์˜ ์ผ๊ด€์„ฑ ์œ ์ง€์— ์œ ๋ฆฌ
์Šคํ”„๋ง DI ์ƒ์„ฑ์ž ์ฃผ์ž… ๋ฐฉ์‹์œผ๋กœ final ํ•„๋“œ ์ฃผ์ž… ๊ฐ„ํŽธ

 

๋ฐ˜์‘ํ˜•