Skip to content

Latest commit

ย 

History

History
60 lines (35 loc) ยท 3.96 KB

File metadata and controls

60 lines (35 loc) ยท 3.96 KB

์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•(@Component, @Bean)

๐Ÿ”— ์ถœ์ฒ˜ : https://dev-coco.tistory.com/69

Bean์ด ๋ญ˜๊นŒ?

๋จผ์ € Bean์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ(=IoC ์ปจํ…Œ์ด๋„ˆ)์— ๋Œ€ํ•ด ์•Œ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

์ž๋ฐ” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋™์ž‘์„ ์ œ๊ณตํ•˜๋Š” ๊ฐ์ฒด๋“ค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์ด๋•Œ, ๊ฐ์ฒด๋“ค์€ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์„œ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•˜์—ฌ ๋™์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

์ด๋ ‡๊ฒŒ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๊ฐ์ฒด์˜ ์˜์กด์„ฑ์ด๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

์Šคํ”„๋ง์—์„œ๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๊ฐ์ฒด๋“ค์„ ์ƒ์„ฑํ•˜๋ฉด ๊ฐ์ฒด๋ผ๋ฆฌ ์˜์กด์„ฑ์„ ์ฃผ์ž…(DI)ํ•˜๋Š” ์—ญํ• ์„ ํ•ด์ฃผ๋ฉฐ, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋กํ•œ ๊ฐ์ฒด๋“ค์„ ๋นˆ(Bean)์ด๋ผ๊ณ  ํ•œ๋‹ค.

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— Bean์„ ๋“ฑ๋กํ•˜๋Š” 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•

1. ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ •

์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ ์‚ฌ์šฉ์ž ํด๋ž˜์Šค๋ฅผ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ํด๋ž˜์Šค ์„ ์–ธ๋ถ€ ์œ„์—@Component ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

@Controller, @Service, @Repository๋Š” ๋ชจ๋‘ @Component๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ํ•ด๋‹น ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ๋“ฑ๋ก๋œ ํด๋ž˜์Šค๋“ค์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜์–ด ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋ฉ๋‹ˆ๋‹ค.

2. ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์ง์ ‘ ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋ก

์ˆ˜๋™์œผ๋กœ ์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•˜๋ ค๋ฉด ์ž๋ฐ” ์„ค์ • ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. XML๋กœ ์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ, ์ตœ๊ทผ์—๋Š” ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•จ

์„ค์ • ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  @Configuration ์–ด๋…ธํ…Œ์ด์…˜์„ ํด๋ž˜์Šค ์„ ์–ธ๋ถ€ ์œ„์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํŠน์ • ํƒ€์ž…์„ ๋ฆฌํ„ดํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ , @Bean ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ์ฃผ๋ฉด ์ž๋™์œผ๋กœ ํ•ด๋‹น ํƒ€์ž…์˜ ๋นˆ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

MemberRepository๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๊ณ , MemoryMemberRepository๊ฐ€ ๊ตฌํ˜„์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— MemoryMemberRepository๋ฅผ new ํ•ด์ค€๋‹ค.

@Bean ์–ด๋…ธํ…Œ์ด์…˜์˜ ์ฃผ์š” ๋‚ด์šฉ

  • @Configuration ์„ค์ •๋œ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅ
  • ๋ฉ”์†Œ๋“œ์˜ ๋ฆฌํ„ด ๊ฐ์ฒด๊ฐ€ ์Šคํ”„๋ง ๋นˆ ๊ฐ์ฒด์ž„์„ ์„ ์–ธํ•จ
  • ๋นˆ์˜ ์ด๋ฆ„์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„, @Bean(name="name")์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
  • @Scope๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด ์ƒ์„ฑ์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Œ
  • @Component ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด @Configuration ์—†์ด๋„ ๋นˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ์Œ
  • ๋นˆ ๊ฐ์ฒด์— init(), destroy() ๋“ฑ ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์†Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ @Bean์—์„œ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ
  • ์–ด๋…ธํ…Œ์ด์…˜ ํ•˜๋‚˜๋กœ ํ•ด๊ฒฐ๋˜๋Š” 1๋ฒˆ ๋ฐฉ๋ฒ•์ด ๊ฐ„๋‹จํ•˜๊ณ  ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์ง€๋งŒ, ์ƒํ™ฉ์— ๋”ฐ๋ผ 2๋ฒˆ ๋ฐฉ๋ฒ•๋„ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ํ•œ๋‹ค.
    • 1๋ฒˆ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋‹ค MemberRepository๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ƒํ™ฉ์ด ์ƒ๊ธฐ๋ฉด 1๋ฒˆ ๋ฐฉ๋ฒ•์€ ์ผ์ผ์ด ๋ณ€๊ฒฝํ•ด์ค˜์•ผ ํ•˜์ง€๋งŒ, 2๋ฒˆ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค๋ฅธ๊ฑด ๊ฑด๋“ค์ผ ํ•„์š” ์—†์ด@Configuration์— ๋“ฑ๋ก๋œ @Bean๋งŒ ์ˆ˜์ •ํ•ด์ฃผ๋ฉด ๋˜๋ฏ€๋กœ, ์ˆ˜์ •์ด ์šฉ์ด

๋“ฑ๋ก๋œ ์Šคํ”„๋ง ๋นˆ์„ @Autowired๋กœ ์‚ฌ์šฉํ•˜๊ธฐ

์Šคํ”„๋ง ๋ถ€ํŠธ์˜ ๊ฒฝ์šฐ @Component, @Service, @Controller, @Repository, @Bean, @Configuration ๋“ฑ์œผ๋กœ ๋นˆ๋“ค์„ ๋“ฑ๋กํ•˜๊ณ  ํ•„์š”ํ•œ ๊ณณ์—์„œ @Autowired๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ ์ฃผ์ž…์„ ๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ 

๋“ฑ๋ก๋œ ๋นˆ์„ ์‚ฌ์šฉํ•˜๋Š” 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•

{% content-ref url="3-field-setter.md" %} 3-field-setter.md {% endcontent-ref %}