๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

โญ Personal_Study97

๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ 1. ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ ์‹œ์ž‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ํ’€, ๋„คํŠธ์›Œํฌ ์†Œ์ผ“ ๋“ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹œ์ ์— ํ•„์š”ํ•œ ์—ฐ๊ฒฐ์„ ๋ฏธ๋ฆฌ ํ•ด๋‘๊ณ , ์ข…๋ฃŒ ์‹œ์ ์— ์—ฐ๊ฒฐ์„ ๋ชจ๋‘ ์ข…๋ฃŒํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋ ค๋ฉด ๊ฐ์ฒด์˜ ์ดˆ๊ธฐํ™”์™€ ์ข…๋ฃŒ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค ์˜ˆ์ œ ์ฝ”๋“œ // NetworkClient.java public class NetworkClient { private String url; public NetworkClient() { System.out.println("์ƒ์„ฑ์ž ํ˜ธ์ถœ, url = " + url); connect(); call("์ดˆ๊ธฐํ™” ์—ฐ๊ฒฐ ๋ฉ”์‹œ์ง€"); } public void setUrl(String url) { this.url = url; } // ์„œ๋น„์Šค ์‹œ์ž‘์‹œ ํ˜ธ์ถœ public void connect() { .. 2023. 1. 10.
์˜์กด๊ด€๊ณ„ ์ž๋™ ์ฃผ์ž… ์˜์กด๊ด€๊ณ„ ์ž๋™ ์ฃผ์ž… 1. ๋‹ค์–‘ํ•œ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… ๋ฐฉ๋ฒ• ์ƒ์„ฑ์ž ์ฃผ์ž…(constructor) โœ” ์ˆ˜์ •์ž ์ฃผ์ž…(setter) ํ•„๋“œ ์ฃผ์ž… ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ ์ฃผ์ž… 1. ์ƒ์„ฑ์ž ์ฃผ์ž… ์ƒ์„ฑ์ž ํ˜ธ์ถœ ์‹œ์ ์— ๋”ฑ 1๋ฒˆ๋งŒ ํ˜ธ์ถœ๋˜๋Š” ๊ฒƒ ๋ณด์žฅ โœ” ๋ถˆ๋ณ€, ํ•„์ˆ˜ ์˜์กด๊ด€๊ณ„์— ์‚ฌ์šฉ // OrderServiceImpl.java @Component public class OrderServiceImpl implements OrderService{ // final -> ๋ฐ˜๋“œ์‹œ ๊ฐ’์„ ํ• ๋‹นํ•ด์ค˜์•ผํ•œ๋‹ค.(ํ•„์ˆ˜, ๋ถˆ๋ณ€) private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired // ์ƒ์„ฑ์ž๊ฐ€ ํ•œ ๊ฐœ๋งŒ ์žˆ์„ ๊ฒฝ์šฐ ์ƒ๋žตํ•ด๋„ ๋œ๋‹ค. p.. 2023. 1. 9.
ComponentScan ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ์ปดํฌ๋„ŒํŠธ ์Šค์บ” & ์˜์กด๊ด€๊ณ„ ์ž๋™์ฃผ์ž… ๋งค๋ฒˆ @Bean์ด๋‚˜ XML ํŒŒ์ผ๋กœ ์Šคํ”„๋ง ๋นˆ์„ ์ง์ ‘ ๋“ฑ๋กํ•ด์ฃผ๋ฉด ๋งค์šฐ ๋ฒˆ๊ฑฐ๋กœ์›€ โœ” ์ปดํฌ๋„ŒํŠธ ์Šค์บ”: ์„ค์ • ์ •๋ณด๊ฐ€ ์—†์–ด๋„ ์ž๋™์œผ๋กœ ์Šคํ”„๋ง๋นˆ์„ ๋“ฑ๋กํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ โœ” ์˜์กด ๊ด€๊ณ„ ์ž๋™ ์ฃผ์ž…: @Autowired package hello.core; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.FilterType; @Configuration @ComponentScan( excludeFilters = @ComponentS.. 2023. 1. 7.
Singleton Container Singleton Container ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ & ์‹ฑ๊ธ€ํ†ค ์ผ๋ฐ˜์ ์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์—ฌ๋Ÿฌ ๊ณ ๊ฐ์ด ๋™์‹œ์— ์š”์ฒญ์„ ํ•œ๋‹ค! ์Šคํ”„๋ง ์—†๋Š” ์ˆœ์ˆ˜ํ•œ DI์ปจํ…Œ์ด๋„ˆ public class SingletonTest { @Test @DisplayName("์Šคํ”„๋ง ์—†๋Š” ์ˆœ์ˆ˜ํ•œ DI์ปจํ…Œ์ด๋„ˆ") void pureContainer() { AppConfig appConfig = new AppConfig(); // 1. ์กฐํšŒ: ํ˜ธ์ถœ ํ•  ๋–„๋งˆ๋‹ค ๊ฐ์ฒด ์ƒ์„ฑ MemberService memberService1 = appConfig.memberService(); // 2. ์กฐํšŒ: ํ˜ธ์ถœ ํ•  ๋–„๋งˆ๋‹ค ๊ฐ์ฒด ์ƒ์„ฑ MemberService memberService2 = appConfig.memberService(); // ์ฐธ์กฐ๊ฐ’์ด ๋‹ค๋ฅด๋‹ค //.. 2023. 1. 6.
์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ & Bean ์กฐํšŒ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ & ๋นˆ ์กฐํšŒํ•˜๊ธฐ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext ๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ผ ํ•œ๋‹ค. ApplicationContext๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ ๊ณผ์ • 1. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋Š” ๊ตฌ์„ฑ ์ •๋ณด๋ฅผ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.(AppConfig) 2. ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋ก ๋นˆ ์ด๋ฆ„์€ ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ง์ ‘ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฃผ์˜: ๋นˆ ์ด๋ฆ„์€ ํ•ญ์ƒ ๋‹ค๋ฅธ ์ด๋ฆ„์„ ๋ถ€์—ฌ ํ•ด์•ผ ํ•œ๋‹ค. 3. ์Šคํ”„๋ง ๋นˆ ์˜์กด๊ด€๊ณ„ ์„ค์ • - ์ค€๋น„ 4. ์Šคํ”„๋ง ๋นˆ ์˜์กด๊ด€๊ณ„ ์„ค์ • - ์™„๋ฃŒ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์„ค์ •.. 2023. 1. 5.
์ œ์–ด์˜ ์—ญ์ „(IoC) & ์˜์กด์„ฑ ์ฃผ์ž…(DI) ์ œ์–ด์˜ ์—ญ์ „(IoC) & ์˜์กด์„ฑ ์ฃผ์ž…(DI) ์ œ์–ด์˜ ์—ญ์ „ ์ œ์–ด์˜ ์—ญ์ „(IoC): ํ”„๋กœ๊ทธ๋žจ์˜ ์ œ์–ด ํ๋ฆ„์„ ์ง์ ‘ ์ œ์–ดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์™ธ๋ถ€์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ public class OrderServiceImpl implements OrderService { // private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); private final DiscountPolicy discountPolicy = new RateDiscountPolicy(); } ๊ธฐ์กด์—๋Š” ํด๋ผ์ด์–ธํŠธ ๊ตฌํ˜„ ๊ฐ์ฒด๊ฐ€ ์Šค์Šค๋กœ ํ•„์š”ํ•œ ์„œ๋ฒ„ ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ, ์—ฐ๊ฒฐ ์‹คํ–‰ํ–ˆ๋‹ค. -> ๊ตฌํ˜„ ๊ฐ์ฒด๊ฐ€ ์Šค์Šค๋กœ ํ”„๋กœ๊ทธ๋žจ์˜ ์ œ์–ด ํ๋ฆ„์„ ์กฐ์ •ํ•จ ํ—ˆ๋‚˜ ์ด๋ ‡๊ฒŒ ํ•  ๊ฒฝ์šฐ 1. ํ• ์ธ ์ •์ฑ…์„ ๋ณ€๊ฒฝํ•  ๋•Œ ํด.. 2023. 1. 1.