๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT/Spring

[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(๊ฐ์ฒด ์ง€ํ–ฅ ์›๋ฆฌ ์ ์šฉ - ์Šคํ”„๋ง์œผ๋กœ ์ „ํ™˜ํ•˜๊ธฐ)

by YeonBu 2023. 10. 25.
728x90

/* ์ด ๊ธ€์€ ๊น€์˜ํ•œ๋‹˜์˜ ๊ฐ•์˜๋ฅผ ๋ณด๊ณ  ์ •๋ฆฌํ•˜๋ ค๊ณ  ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

   ๊ฐœ์ธ์ ์ธ ๊ณต๋ถ€๋ฅผ ์œ„ํ•ด ์˜ฌ๋ฆฌ๋Š” ๊ธ€์ด๋ฏ€๋กœ ์ค‘๊ฐ„ ์ค‘๊ฐ„ ์ฝ”๋“œ๋Š” ์ƒ๋žต๋˜์—ˆ์Šต๋‹ˆ๋‹ค. */

 

 

์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

์Šคํ”„๋ง ์ž…๋ฌธ์ž๊ฐ€ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด๊ฐ€๋ฉด์„œ ์Šคํ”„๋ง์˜ ํ•ต์‹ฌ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ณ , ์Šคํ”„๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ™•์‹คํžˆ ๋‹ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ณ , ์„ฑ์žฅํ•˜๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ณด์„ธ์š”! ๐Ÿ“ข

www.inflearn.com

 

 

 

 

์Šคํ”„๋ง์œผ๋กœ ์ „ํ™˜ํ•˜๊ธฐ

 

AppConfig

 

@Configuration
public class AppConfig {

    @Bean
    public MemberService memberService() {
        return new MemberServiceImpl(memberRepository());
    }

    @Bean
    public OrderService orderService() {
        return new OrderServiceImpl(memberRepository(), discountPolicy());
    }

    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }

    @Bean
    public DiscountPolicy discountPolicy() {
        return new RateDiscountPolicy();
    }

}

 

โ—พ ์ „์—๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ AppConfig๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ง์ ‘ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  DI๋ฅผ ํ•ด์คฌ๋Š”์ง€๋งŒ, ์ด์ œ๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ†ตํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

โ—พ AppConfig์— ์„ค์ •์„ ๊ตฌ์„ฑํ•œ๋‹ค๋Š” ๋œป์˜ `@Configration`์„ ๋ถ™์—ฌ์ฃผ๊ณ  ๊ฐ ๋ฉ”์„œ๋“œ์— `@Bean`์„ ๋ถ™์—ฌ์ค€๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋œ๋‹ค.

 

 

๐Ÿ’ก ๊ถ๊ธˆ์ฆ1

: @Configuration์˜ ์—ญํ• ?

 

 โ—พ ๊ตฌ์„ฑ ํด๋ž˜์Šค : `@Configuration` ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ€์—ฌ๋œ ํด๋ž˜์Šค๋Š” ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์„ฑ์ •๋ณด๋ฅผ ๋‹ด๊ณ ์žˆ๋Š” ํด๋ž˜์Šค ๋ผ๋Š” ๋œป์ด๋ฉฐ, ์ด ํด๋ž˜์Šค ๋‚ด๋ถ€์—๋Š” ๋นˆ(bean) ๊ฐ์ฒด์˜ ์ •์˜์™€ ๊ตฌ์„ฑ ์„ค์ •์ด ํฌํ•จ๋œ๋‹ค.

 โ—พ ๋นˆ ์ •์˜ : ํด๋ž˜์Šค ๋‚ด์—์„œ `@Bean` ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นˆ ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•œ๋‹ค. `@Bean` ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ€์—ฌ๋œ ๋ฉ”์„œ๋“œ๋Š” ํ•ด๋‹น ๋ฉ”์„œ๋“œ์˜ ๋ฐ˜ํ™˜๊ฐ’์ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๋นˆ์œผ๋กœ ๊ด€๋ฆฌ๋˜์–ด์•ผ ํ•จ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ  `@Configuration` ํด๋ž˜์Šค ๋‚ด์—์„œ ์ •์˜๋œ ๋นˆ๋“ค์€ ์‹ฑ๊ธ€ํ†ค ์Šค์ฝ”ํ”„๋กœ ์ƒ์„ฑ๋œ๋‹ค.

 

 

๐Ÿ’ก ๊ถ๊ธˆ์ฆ2

: @Bean์ด๋ž€?

 

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

 โ—พ ๋นˆ ์ด๋ฆ„ : ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„์ด ๋นˆ์˜ ์ด๋ฆ„์ด ๋œ๋‹ค. But, `name`์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฆ„์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Œ.

 

 

 

 

MemberApp

 

public class MemberApp {

    public static void main(String[] args) {

//        AppConfig appConfig = new AppConfig();
//        MemberService memberService = appConfig.memberService();

        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
        MemberService memberService = applicationContext.getBean("memberService", MemberService.class);

        Member memberA = new Member(1L, "memberA", Grade.VIP);
        memberService.join(memberA);

        Member findMember = memberService.findMember(1L);

        System.out.println("new Member = " + memberA.getName());
        System.out.println("find Member = " + findMember.getName());

    }

}

 

โ—พ ์ด์ „์—๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ AppConfig๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ง์ ‘ ์กฐํšŒํ–ˆ์ง€๋งŒ(์ฃผ์„ ๋ถ€๋ถ„), ์ด์ œ๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ์Šคํ”„๋ง ๋นˆ(๊ฐ์ฒด)๋ฅผ ์ฐพ์•„์•ผ ํ•œ๋‹ค.

โ—พ ์Šคํ”„๋ง ๋นˆ์€ `applicationContext.getBean()` ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

โ—พ ๊ธฐ์กด์—๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ž๋ฐ”์ฝ”๋“œ๋กœ ๋ชจ๋“  ๊ฒƒ์„ ํ–ˆ๋‹ค๋ฉด, ์ด์ œ๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๊ณ , ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋นˆ์„ ์ฐพ์•„ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค.

โ—พ ์ฝ”๋“œ๊ฐ€ ์•ฝ๊ฐ„ ๋” ๋ณต์žกํ•ด์ง„ ๊ฒƒ ๊ฐ™์€๋ฐ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ค ์žฅ์ ์ด ์žˆ๋Š”์ง€๋Š” ๋‹ค์Œ์‹œ๊ฐ„์—!

 

 

๐Ÿ’ก ๊ถ๊ธˆ์ฆ1

: ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ†ตํ•ด MemberService ๊ฐ์ฒด๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•

 

1. ApplicationContext ์ดˆ๊ธฐํ™”

 โ—พ  ApplicationContext(=์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ) ๋ฅผ ์ดˆ๊ธฐํ™” ํ•˜๋ ค๋ฉด `AnnotationConfigApplicationContext` ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 โ—พ `AppConfig.class`๋ฅผ ์ „๋‹ฌํ•˜์—ฌ `AppConfig` ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•˜๊ณ  ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค.

 

2. MemberServe ๋นˆ ๊ฐ€์ ธ์˜ค๊ธฐ

 โ—พ applicationContext๋ฅผ ํ†ตํ•ด `memberService`๋ผ๋Š” ๋นˆ ์ด๋ฆ„๊ณผ, `MemberService.class` ํƒ€์ž…์„ ์ง€์ •ํ•˜์—ฌ ๋นˆ์„ ๊ฐ€์ ธ์˜จ๋‹ค.

 โ—พ ์ด ์ž‘์—…์œผ๋กœ `MemberService` ๋นˆ์ด ์ƒ์„ฑ๋˜๊ณ  ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ด€๋ฆฌ๋œ๋‹ค.

 

.

 

 

 

 

์Šคํ”„๋ง ๋ถ€ํŠธ 3.1 ์ด์ƒ - ๋กœ๊ทธ ์ถœ๋ ฅ ์•ˆ๋˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ ์ฐธ๊ณ 

 

 

๋กœ๊ทธ๊ฐ€ ๊ฐ‘์ž๊ธฐ ์•ˆ๋‚˜์˜ต๋‹ˆ๋‹ค ใ… ใ… ใ… ใ…  - ์ธํ”„๋Ÿฐ | ์งˆ๋ฌธ & ๋‹ต๋ณ€

๊ฐ•์˜๋“ค์œผ๋ฉด์„œ ๋ผ์ด๋ธŒ ์ฝ”๋”ฉ ๊ณ„์† ์ง„ํ–‰ํ–ˆ๋Š”๋ฐ... ์–ด๋Š์ˆœ๊ฐ„ ๋ถ€ํ„ฐ ๋กœ๊ทธ๊ฐ€ ์•ˆ๋‚˜์˜ต๋‹ˆ๋‹ค ใ… ใ… ใ… ใ… [์‚ฌ์ง„][์‚ฌ์ง„]์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋กœ๊ทธ๊ฐ€ ๋‚˜์™€์•ผ ํ•˜๋Š”๋ฐ...์•„๋ž˜์ฒ˜๋Ÿผ ์‹คํ–‰ํ•ด๋„ ๋กœ๊ทธ๊ฐ€ ์•ˆ๋‚˜์˜ต๋‹ˆ๋‹ค ใ… ใ… ใ…  ๋„์™€์ฃผ

www.inflearn.com

 

 

 

 

๋ฐ˜์‘ํ˜•

'IT > Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์™€ ์Šคํ”„๋ง ๋นˆ - ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก๋œ ๋ชจ๋“  ๋นˆ ์กฐํšŒ, ์Šคํ”„๋ง ๊ธฐ๋ณธ ๋นˆ ์กฐํšŒ)  (0) 2023.10.25
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์™€ ์Šคํ”„๋ง ๋นˆ - ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ)  (0) 2023.10.25
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(๊ฐ์ฒด ์ง€ํ–ฅ ์›๋ฆฌ ์ ์šฉ - IoC, DI, ๊ทธ๋ฆฌ๊ณ  ์ปจํ…Œ์ด๋„ˆ)  (1) 2023.10.22
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(๊ฐ์ฒด ์ง€ํ–ฅ ์›๋ฆฌ ์ ์šฉ - ์ƒˆ๋กœ์šด ๊ตฌ์กฐ์™€ ํ• ์ธ ์ •์ฑ… ์ ์šฉ, ์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ 5๊ฐ€์ง€ ์›์น™ ์ ์šฉ)  (0) 2023.10.21
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(๊ฐ์ฒด ์ง€ํ–ฅ ์›๋ฆฌ ์ ์šฉ - AppConfig ๋ฆฌํŒฉํ„ฐ๋ง)  (0) 2023.10.21