Spring Boot

[Spring Boot] ์˜์กด์„ฑ ์ฃผ์ž…ํ•  ๋•Œ ํ•„๋“œ์ฃผ์ž… vs ์ƒ์„ฑ์ž ์ฃผ์ž…?

์šฐ์ฃผ๋ฌผ๊ณ ๊ธฐ 2025. 5. 3. 14:54
๋ฐ˜์‘ํ˜•

์Šคํ”„๋ง์—์„œ๋Š” ์ƒ์„ฑ์ž ์ฃผ์ž…์ด ๊ฐ€์žฅ ๊ถŒ์žฅ๋จ.

๋ฐ”๋กœ ์˜ˆ์ „ ํฌ์ŠคํŒ…์—์„œ

 

@RequiredArgsConstructor
@Service
public class UserService {

    private final UserRepository userRepository;
}

 

์ด ์˜ˆ์ œ๋ฅผ ๊ฐ–๊ณ  ์™”์—ˆ๋Š”๋ฐ, ์ด๊ฑด ์ƒ์„ฑ์ž ์ฃผ์ž…์œผ๋กœ DIํ•ด์ฃผ๋Š” ์žฅ๋ฉด์ž„.

โ€‹

์ด๊ฑธ ํ•„๋“œ ์ฃผ์ž…์œผ๋กœ ํ•œ๋‹ค๋ฉด?

 

@Autowired
private UserRepository userRepository;

 

์ด๋ ‡๊ฒŒ ๋จ.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฌธ์ œ์ ์ด

์ผ๋‹จ userRepository๊ฐ€ final์ด ์•„๋‹ˆ๋ผ์„œ ๋ถˆ๋ณ€์„ฑ์ด ๊นจ์ง

๊ทธ๋ฆฌ๊ณ  ์Šคํ”„๋ง์ด ์ž๋™์œผ๋กœ ๋„ฃ์–ด์ฃผ๋‹ˆ๊นŒ ์˜์กด์„ฑ ์ฃผ์ž…์ด ใ…‡ใ„ท์„œ ๋๋Š”์ง€ ์•ˆ๋ณด์ž„


์™œ ์ƒ์„ฑ์ž ์ฃผ์ž…์ด ๋” ์ข‹์„๊นŒ? ๐Ÿ’‰

 

1. ๋ถˆ๋ณ€์„ฑ ๋ณด์žฅ (final ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ˆ๊นŒ)

final์ด ๋ถ™์–ด์„œ ์ค‘๊ฐ„์— ์‹ค์ˆ˜๋กœ ๋ฐ”๊พธ๋Š” ์ผ๋„ ์•ˆ์ƒ๊ธฐ๊ณ , ์•ˆ์ •์ ์ธ ์ฝ”๋“œ๊ฐ€ ๋จ.

์ฐธ๊ณ ๋กœ ํ•„๋“œ ์ฃผ์ž…์‹œ (@Autowired) final๋ชป๋ถ™์ž„

โ€‹

2. ์ˆœํ™˜ ์ฐธ์กฐ ๋ฌธ์ œ ์žก์„ ์ˆ˜ ์žˆ์Œ

ํ•„๋“œ ์ฃผ์ž…์€, ๋จผ์ € ๋นˆ ์ƒ์„ฑํ•˜๊ณ , ์ฃผ์ž…ํ•˜๋ ค๋Š” ๋นˆ์„ ์ฐพ์•„์„œ ์ฃผ์ž…ํ•จ.

๊ทผ๋ฐ ์ƒ์„ฑ์ž ์ฃผ์ž…์€ ๋จผ์ € ์ƒ์„ฑ์ž์˜ ์ธ์ž์— ์‚ฌ์šฉ๋˜๋Š” ๋นˆ์„ ์ฐพ๊ฑฐ๋‚˜ ๋นˆ ํŒฉํ† ๋ฆฌ์—์„œ ๋งŒ๋“ฆ.

= ์ƒ์„ฑ์ด ๋จผ์ €๊ฐ€ ์•„๋‹ˆ๋ผ, ์ฃผ์ž…ํ•˜๋ ค๋Š” ๋นˆ ์ฐพ๋Š”๊ฒŒ ๋จผ์ €์ž„.

โ€‹

๋”ฐ๋ผ์„œ ์‚ฌ์ „์— ์ˆœํ™˜ ์ฐธ์กฐ ๋ฐฉ์ง€ ์œ„ํ•ด์„œ ์ƒ์„ฑ์ž ์ฃผ์ž… ์“ฐ๋Š”๊ฒŒ ์ข‹

โ€‹

3. ๋ช…ํ™•ํ•œ ์ฃผ์ž… ๊ตฌ์กฐ

UserRepository๊ฐ€ ์—†์œผ๋ฉด ์ด ํด๋ž˜์Šค๋Š” ๋™์ž‘ ์ž์ฒด๊ฐ€ ์•ˆ ๋ผ”๋ผ๋Š” ๊ฑธ

์ƒ์„ฑ์ž ์‹œ๊ทธ๋‹ˆ์ฒ˜์—์„œ ๊ฐ•์ œํ•˜๊ณ  ๊ฐ€์‹œ์ ์œผ๋กœ ๋“œ๋Ÿฌ๋‚ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒŒ ํ•ต์‹ฌ ํฌ์ธํŠธ

๋ผ๊ณ  ์ฑ—์ง€ํ”ผํ‹ฐ๊ฐ€ ๋งํ•ด์คŒ

 

์˜ˆ๋ฅผ๋“ค์–ด

 

@RequiredArgsConstructor
@Service
public class BlogService {

    private final BlogRepository blogRepository;

    public Article save(AddArticleRequest request) {
        return blogRepository.save(request.toEntity());
    }
}

์ด ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ 

์•„ ์ด ํด๋ž˜์Šค๋Š” BlogRepository๊ฐ€ ์—†์œผ๋ฉด ์ƒ์„ฑ ์ž์ฒด๊ฐ€ ์•ˆ๋˜๋Š”๊ตฌ๋‚˜. ๊ผญ ํ•„์š”ํ•˜๊ตฌ๋‚˜.

๋ผ๊ณ  ํ•œ๋ˆˆ์— ๋ณด๊ณ  ๋А๋ผ๋ฉด๋˜๋Š”๊ฑฐ์ž„.

 

public BlogService(BlogRepository blogRepository) {
    this.blogRepository = blogRepository;
}

์š” ์ƒ์„ฑ์ž ํ•˜๋‚˜๋งŒ ๋งŒ๋“ค์–ด์ง€๋Š”๊ฑฐ์ž„

(@NoArgsConstructor๋‚˜ @AllArgsConstructor๊ฐ€ ์—†์œผ๋‹ˆ๊นŒ)

 

 

 

 

๋ฐ˜์‘ํ˜•