Home > Spring > πŸƒ[Spring] 빈(Bean)을 λ“±λ‘ν•˜λŠ” 방법.

πŸƒ[Spring] 빈(Bean)을 λ“±λ‘ν•˜λŠ” 방법.
Spring Framework

πŸƒ[Spring] 빈(Bean)을 λ“±λ‘ν•˜λŠ” 방법.

1️⃣ @Configuration μ–΄λ…Έν…Œμ΄μ…˜.

@Configuration μ–΄λ…Έν…Œμ΄μ…˜μ€ Spring Frameworkμ—μ„œ μžλ°” 기반의 μ„€μ • 클래슀λ₯Ό μ •μ˜ν•  λ•Œ μ‚¬μš©ν•˜λŠ” μ–΄λ…Έν…Œμ΄μ…˜μž…λ‹ˆλ‹€.

이 μ–΄λ…Έν…Œμ΄μ…˜μ΄ 뢙은 ν΄λž˜μŠ€λŠ” μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— μ˜ν•΄ 빈 μ •μ˜λ₯Ό μ œκ³΅ν•˜λŠ” 클래슀둜 μΈμ‹λ˜λ©°, 일반적으둜 λ©”μ„œλ“œλ₯Ό 톡해 λΉˆμ„ μƒμ„±ν•˜κ³ , 이λ₯Ό μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— λ“±λ‘ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.

1. @Configuration의 μ£Όμš” κΈ°λŠ₯.

1. μžλ°” 기반 μ„€μ • 클래슀.

  • @Configuration μ–΄λ…Έν…Œμ΄μ…˜μ€ μžλ°” μ½”λ“œλ‘œ μŠ€ν”„λ§ 섀정을 관리할 수 μžˆλ„λ‘ ν•΄μ€λ‹ˆλ‹€.
  • 전톡적인 XML 기반 μ„€μ • λŒ€μ‹ , μžλ°” 클래슀λ₯Ό μ‚¬μš©ν•΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 섀정을 κ΄€λ¦¬ν•˜κ³ , λΉˆμ„ μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2. 빈 μ •μ˜.

  • @Configuration μ–΄λ…Έν…Œμ΄μ…˜μ΄ 뢙은 클래슀 λ‚΄μ—μ„œ μ •μ˜λœ λ©”μ„œλ“œμ— @Bean μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜λ©΄, ν•΄λ‹Ή λ©”μ„œλ“œκ°€ λ°˜ν™˜ν•˜λŠ” 객체가 μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— 빈으둜 λ“±λ‘λ©λ‹ˆλ‹€.
  • 이 λ°©μ‹μœΌλ‘œ 객체의 생성과 μ΄ˆκΈ°ν™” 과정을 μ„€μ •ν•˜κ³  관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

3. 싱글톀 보μž₯.

  • @Configuration이 뢙은 ν΄λž˜μŠ€λŠ” 기본적으둜 싱글톀 λΉˆμ„ 보μž₯ν•©λ‹ˆλ‹€.
  • 즉, 이 클래슀 λ‚΄μ—μ„œ μ •μ˜λœ λΉˆμ€ μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆ λ‚΄μ—μ„œ ν•œ 번만 μƒμ„±λ˜κ³ , λ‹€λ₯Έ κ³³μ—μ„œ ν•΄λ‹Ή λΉˆμ„ μš”μ²­ν•  λ•Œ λ™μΌν•œ μΈμŠ€ν„΄μŠ€κ°€ λ°˜ν™˜λ©λ‹ˆλ‹€.
  • μ΄λŠ” ν΄λž˜μŠ€κ°€ @Configuration이 μ•„λ‹Œ 일반 클래슀일 κ²½μš°μ™€ μ°¨λ³„ν™”λ˜λŠ” μ€‘μš”ν•œ νŠΉμ„±μž…λ‹ˆλ‹€.

2. μ˜ˆμ‹œ.

λ‹€μŒμ€ @Configuration μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜μ—¬ μžλ°” 기반으둜 λΉˆμ„ λ“±λ‘ν•˜λŠ” μ˜ˆμ‹œμž…λ‹ˆλ‹€.

@Configuration
public class AppConfig {
    
    @Bean
    public UserService userService() {
        return new UserService(userRepository());
    }
    
    @Bean
    public UserRepository userRepository() {
        return new UserRepository();
    }
}

3. μ„€λͺ….

  • @Confifuration
    • AppConfig ν΄λž˜μŠ€κ°€ μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ„€μ • ν΄λž˜μŠ€μž„μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
    • 이 ν΄λž˜μŠ€λŠ” μŠ€ν”„λ§ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λΉˆμ„ μ •μ˜ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.
  • @Bean
    • 이 μ–΄λ…Έν…Œμ΄μ…˜μ΄ 뢙은 λ©”μ„œλ“œλŠ” μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— λΉˆμ„ λ“±λ‘ν•©λ‹ˆλ‹€.
    • userService와 userRepository λ©”μ„œλ“œλŠ” 각각 UserService와 UserRepository 객체λ₯Ό λ°˜ν™˜ν•˜λ©°, 이 객체듀은 μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— μ˜ν•΄ 빈으둜 κ΄€λ¦¬λ©λ‹ˆλ‹€.

4. @Configuration의 νŠΉμ§•.

1. 싱글톀 관리.

  • @Configuration μ–΄λ…Έν…Œμ΄μ…˜μ΄ 뢙은 클래슀 λ‚΄μ—μ„œ μ •μ˜λœ λΉˆλ“€μ€ 기본적으둜 μ‹±κΈ€ν†€μœΌλ‘œ κ΄€λ¦¬λ©λ‹ˆλ‹€.
  • 즉, μ—¬λŸ¬ 번 μš”μ²­ν•˜λ”λΌλ„ λ™μΌν•œ μΈμŠ€ν„΄μŠ€κ°€ λ°˜ν™˜λ©λ‹ˆλ‹€.
  • μŠ€ν”„λ§μ΄ λ‚΄λΆ€μ μœΌλ‘œ ν”„λ‘μ‹œ 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ 빈의 싱글톀 속성을 보μž₯ν•©λ‹ˆλ‹€.

2. λͺ¨λ“ˆν™”λœ μ„€μ •.

  • @Configuration을 μ‚¬μš©ν•˜λ©΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 섀정을 μ—¬λŸ¬ μžλ°” 클래슀둜 λ‚˜λˆ„μ–΄ λͺ¨λ“ˆν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 이λ₯Ό 톡해 μ„€μ • 파일이 컀지더라도 κ΄€λ¦¬ν•˜κΈ° 쉽고, μœ μ§€λ³΄μˆ˜μ„±μ΄ ν–₯μƒλ©λ‹ˆλ‹€.

3. λ‹€λ₯Έ μ„€μ • 파일과 톡합.

  • @Configuration ν΄λž˜μŠ€λŠ” λ‹€λ₯Έ μ„€μ • νŒŒμΌμ΄λ‚˜ XML 파일과 함꼐 μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 이둜 인해 κΈ°λ³Έ XML 기반 섀정을 μ μ§„μ μœΌλ‘œ μžλ°” 기반 μ„€μ •μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 것이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

5. @Configuration과 @Component의 차이.

@Configurationκ³Ό @ComponentλŠ” λͺ¨λ‘ μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— λΉˆμ„ 등둝할 수 μžˆλŠ” μ–΄λ…Έν…Œμ΄μ…˜μ΄μ§€λ§Œ, κ·Έ λͺ©μ κ³Ό κΈ°λŠ₯μ—λŠ” 차이가 μžˆμŠ΅λ‹ˆλ‹€.

  • @Configuration
    • 주둜 μ„€μ • ν΄λž˜μŠ€μ— μ‚¬μš©λ©λ‹ˆλ‹€.
    • 이 ν΄λž˜μŠ€λŠ” @Bean μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•΄ λΉˆμ„ μ •μ˜ν•˜κ³ , μ»¨ν…Œμ΄λ„ˆμ— 등둝할 μ—¬λŸ¬ λΉˆμ„ ν•œκ³³μ—μ„œ κ΄€λ¦¬ν•©λ‹ˆλ‹€.
    • 이 λΉˆλ“€μ€ 주둜 μ‹±κΈ€ν†€μœΌλ‘œ κ΄€λ¦¬λ˜λ©°, ꡬ성 μš”μ†Œλ“€μ˜ 관계λ₯Ό μ„€μ •ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • @Component
    • 일반적으둜 단일 λΉˆμ„ μžλ™μœΌλ‘œ 등둝할 λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.
    • ν΄λž˜μŠ€μ— @Componentλ₯Ό 뢙이면 μŠ€ν”„λ§μ΄ μžλ™μœΌλ‘œ ν•΄λ‹Ή 클래슀λ₯Ό μŠ€μΊ”ν•˜μ—¬ 빈으둜 λ“±λ‘ν•©λ‹ˆλ‹€.
    • 보톡 νŠΉμ • 역할을 ν•˜λŠ” κ°œλ³„ 클래슀λ₯Ό 빈으둜 등둝할 λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.

6. κ²°λ‘ .

  • @Configuration μ–΄λ…Έν…Œμ΄μ…˜μ€ μžλ°” 기반의 μ„€μ • 클래슀λ₯Ό μ •μ˜ν•˜λŠ” 데 μ‚¬μš©λ˜λ©°, μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ—μ„œ 관리될 λΉˆμ„ λ“±λ‘ν•˜λŠ” μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€.
  • 이λ₯Ό 톡해 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 섀정을 λ”μš± λͺ…ν™•ν•˜κ³  λͺ¨λ“ˆν™”λœ λ°©μ‹μœΌλ‘œ 관리할 수 있으며, XML 기반 섀정을 λŒ€μ²΄ν•˜κ±°λ‚˜ λ³΄μ™„ν•˜λŠ” μš©λ„λ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.
  • Configuration 클래슀 λ‚΄μ˜ λ©”μ„œλ“œλŠ” λΉˆμ„ μ •μ˜ν•˜κ³  이λ₯Ό μ»¨ν…Œμ΄λ„ˆμ— λ“±λ‘ν•˜μ—¬, μŠ€ν”„λ§ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ™μž‘μ„ μ œμ–΄ν•˜λŠ” μ€‘μš”ν•œ κΈ°λŠ₯을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.

2️⃣ @Bean μ–΄λ…Έν…Œμ΄μ…˜

@Bean μ–΄λ…Έν…Œμ΄μ…˜μ€ Spring Frameworkμ—μ„œ λ©”μ„œλ“œ μˆ˜μ€€μ—μ„œ μ‚¬μš©λ˜λ©°, ν•΄λ‹Ή λ©”μ„œλ“œκ°€ λ°˜ν™˜ν•˜λŠ” 객체λ₯Ό μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— 빈(Bean)으둜 λ“±λ‘ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.

이 μ–΄λ…Έν…Œμ΄μ…˜μ€ 주둜 μžλ°” 기반의 μ„€μ • 클래슀(@Configuration)μ—μ„œ μ‚¬μš©λ˜λ©°, 빈의 생성 및 μ΄ˆκΈ°ν™”λ₯Ό λ‹΄λ‹Ήν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.

1. @Bean μ–΄λ…Έν…Œμ΄μ…˜μ˜ μ£Όμš” κΈ°λŠ₯.

1. μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— 빈 등둝.

  • @Bean μ–΄λ…Έν…Œμ΄μ…˜μ΄ 뢙은 λ©”μ„œλ“œκ°€ λ°˜ν™˜ν•˜λŠ” κ°μ²΄λŠ” μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— μ˜ν•΄ κ΄€λ¦¬λ˜λŠ” 빈으둜 λ“±λ‘λ©λ‹ˆλ‹€.
  • 이 λΉˆμ€ μŠ€ν”„λ§ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ˜μ‘΄μ„± μ£Όμž…(Depency Injection, DI)을 톡해 λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2. λ©”μ„œλ“œ 호좜 μ‹œ 빈 λ°˜ν™˜.

  • @Bean λ©”μ„œλ“œλŠ” μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ—μ„œ ν˜ΈμΆœλ˜μ–΄ ν•΄λ‹Ή λ©”μ„œλ“œκ°€ λ°˜ν™˜ν•˜λŠ” 객체λ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.
  • 이 λΉˆμ€ μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ—¬λŸ¬ 번 μš”μ²­λ˜λ”λΌλ„ 기본적으둜 μ‹±κΈ€ν†€μœΌλ‘œ κ΄€λ¦¬λ©λ‹ˆλ‹€.(즉, λ™μΌν•œ μΈμŠ€ν„΄μŠ€κ°€ λ°˜ν™˜λ¨).

3. μžλ°” 기반 μ„€μ • 지원.

  • @Bean μ–΄λ…Έν…Œμ΄μ…˜μ€ μžλ°” 기반의 μ„€μ • 클래슀(@Configuration)μ—μ„œ μ‚¬μš©λ˜μ–΄, XML 섀정을 λŒ€μ²΄ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 이λ₯Ό 톡해 객체 κ°„μ˜ κ΄€κ³„λ‚˜ μ΄ˆκΈ°ν™” 과정을 ν”„λ‘œκ·Έλž˜λ° λ°©μ‹μœΌλ‘œ μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2. μ˜ˆμ‹œ μ½”λ“œ

  • λ‹€μŒμ€ @Bean μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜λŠ” κ°„λ‹¨ν•œ μ˜ˆμž…λ‹ˆλ‹€.
@Configuration
public class AppConfig {
    
    @Bean
    public UserService userService() {
        return new UserService(userRepository());
    }
    
    @Bean
    public UserRepository userRepository() {
        return new UserRepository();
    }
}

3. μ„€λͺ….

  • @Configuration
    • 이 ν΄λž˜μŠ€κ°€ μŠ€ν”„λ§ μ„€μ • 클래슀둜 μ‚¬μš©λ¨μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
    • 이 클래슀 μ•ˆμ— λΉˆμ„ μ •μ˜ν•˜λŠ” λ©”μ„œλ“œκ°€ ν¬ν•¨λ©λ‹ˆλ‹€.
  • @Bean
    • 각 λ©”μ„œλ“œκ°€ λ°˜ν™˜ν•˜λŠ” 객체λ₯Ό μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— 빈으둜 λ“±λ‘ν•©λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, userService() λ©”μ„œλ“œλŠ” userService 객체λ₯Ό λ°˜ν™˜ν•˜λ©°, 이 κ°μ²΄λŠ” μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— μ˜ν•΄ 빈으둜 κ΄€λ¦¬λ©λ‹ˆλ‹€.

4. 빈의 생λͺ…주기와 관리.

  • 싱글톀 관리
    • 기본적으둜 μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλŠ” @Bean으둜 λ“±λ‘λœ λΉˆμ„ μ‹±κΈ€ν†€μœΌλ‘œ κ΄€λ¦¬ν•©λ‹ˆλ‹€.
    • 즉, μ—¬λŸ¬ κ³³μ—μ„œ 같은 λΉˆμ„ μš”μ²­ν•˜λ”λΌλ„ λ™μΌν•œ μΈμŠ€ν„΄μŠ€κ°€ λ°˜ν™˜λ©λ‹ˆλ‹€.
  • μŠ€μ½”ν”„ λ³€κ²½ κ°€λŠ₯
    • @Bean μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•  λ•Œ μŠ€μ½”ν”„λ₯Ό 지정할 수 μžˆμŠ΅λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, 빈이 μš”μ²­λ  λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ 객체λ₯Ό λ°˜ν™˜ν•˜λŠ” ν”„λ‘œν† νƒ€μž… μŠ€μ½”ν”„λ‘œ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • μ΄λŠ” @Scope μ–΄λ…Έν…Œμ΄μ…˜μ„ ν•¨κ»˜ μ‚¬μš©ν•˜μ—¬ μ„€μ •ν•©λ‹ˆλ‹€.

5. @Bean 과 @Component의 차이

  • @Bean
    • @Bean은 λ©”μ„œλ“œ μˆ˜μ€€μ—μ„œ μ‚¬μš©λ˜λ©°, ν•΄λ‹Ή λ©”μ„œλ“œκ°€ λ°˜ν™˜ν•˜λŠ” 객체λ₯Ό 빈으둜 λ“±λ‘ν•©λ‹ˆλ‹€.
    • 주둜 사바 μ„€μ • ν΄λž˜μŠ€μ—μ„œ μ‚¬μš©λ˜μ–΄ μˆ˜λ™μœΌλ‘œ λΉˆμ„ μ •μ˜ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.
    • 이λ₯Ό 톡해 κ°œλ°œμžκ°€ 객체 생성 λ‘œμ§μ„ λͺ…μ‹œμ μœΌλ‘œ μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • @Component
    • @ComponentλŠ” 클래슀 μˆ˜μ€€μ—μ„œ μ‚¬μš©λ˜λ©°, μŠ€ν”„λ§μ΄ ν•΄λ‹Ή 클래슀λ₯Ό μŠ€μΊ”ν•˜μ—¬ μžλ™μœΌλ‘œ 빈으둜 λ“±λ‘ν•˜κ²Œ ν•©λ‹ˆλ‹€.
    • κ°œλ°œμžκ°€ λ³„λ„μ˜ λ©”μ„œλ“œ 없이 클래슀 자체λ₯Ό 빈으둜 λ“±λ‘ν•˜λŠ” μžλ™ 빈 등둝 λ°©μ‹μž…λ‹ˆλ‹€.
    • @Service, @Repository, @Controller도 @Component의 νŠΉμˆ˜ν™”λœ ν˜•νƒœμž…λ‹ˆλ‹€.

6. μΆ”κ°€ κΈ°λŠ₯

@Bean νŒŒλΌλ―Έν„°

  • 이름 지정
    • @Bean μ–΄λ…Έν…Œμ΄μ…˜μ€ 이름을 λͺ…μ‹œμ μœΌλ‘œ 지정할 수 μžˆμŠ΅λ‹ˆλ‹€. 기본적으둜 λ©”μ„œλ“œ 이름이 빈 이름이 λ˜μ§€λ§Œ, @Bean(name = "customName")κ³Ό 같이 빈 이름을 λͺ…μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€.
@Bean(name = "custromUserService")
public UserService userService() {
    return new UserService(userRepository());
}

μ˜μ‘΄μ„± 관리

  • @Bean λ©”μ„œλ“œλŠ” λ‹€λ₯Έ λΉˆμ„ μ˜μ‘΄μ„±μœΌλ‘œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μœ„μ˜ μ˜ˆμ‹œμ—μ„œ userService() λ©”μ„œλ“œλŠ” userRepository() λ©”μ„œλ“œμ—μ„œ λ°˜ν™˜λœ UserRepository λΉˆμ„ μ‚¬μš©ν•©λ‹ˆλ‹€.
  • μ΄λŸ°ν•œ λ°©μ‹μœΌλ‘œ 빈 κ°„μ˜ μ˜μ‘΄μ„±μ„ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

7. κ²°λ‘ 

  • @Bean μ–΄λ…Έν…Œμ΄μ…˜μ€ μŠ€ν”„λ§μ—μ„œ μžλ°” 기반으둜 λΉˆμ„ μ •μ˜ν•˜κ³ , μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— 등둝할 λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.
  • 주둜 μ„€μ • 클래슀(@Configuration) λ‚΄μ—μ„œ μ‚¬μš©λ˜λ©°, ν”„λ‘œκ·Έλž˜λ° λ°©μ‹μœΌλ‘œ 객체의 생성과 섀정을 κ΄€λ¦¬ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.
  • 이 μ–΄λ…Έν…Œμ΄μ…˜μ€ μˆ˜λ™μœΌλ‘œ λΉˆμ„ μ •μ˜ν•  λ•Œ μ‚¬μš©λ˜λ©°, XML 섀정을 λŒ€μ²΄ν•˜κ±°λ‚˜ λ³΄μ™„ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.
  • @Componentμ™€λŠ” 달리 빈 생성 λ‘œμ§μ„ 더 λͺ…ν™•ν•˜κ²Œ μ œμ–΄ν•  수 μžˆλŠ” 점이 νŠΉμ§•μž…λ‹ˆλ‹€.