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

โญ Personal_Study/Spring10

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.
SOLID (์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ 5๊ฐ€์ง€ ์›์น™) SOLID ์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ 5๊ฐ€์ง€ ์›์น™ SRP: ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ (single responsibility principle) OCP: ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™ (Open/closed principle) LSP: ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ (Liskov substitution principle) ISP: ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™ (Interface segregation principle) DIP: ์˜์กด๊ด€๊ณ„ ์—ญ์ „ ์›์น™ (Dependency inversion principle) 1. SRP: ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ ํ•œ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค ํ•˜๋‚˜์˜ ์ฑ…์ž„์ด๋ผ๋Š” ๊ฒƒ์€ ๋ชจํ˜ธํ•˜๋‹ค. ํด ์ˆ˜ ์žˆ๊ณ , ์ž‘์„ ์ˆ˜ ์žˆ๋‹ค. ๋ฌธ๋งฅ๊ณผ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค. ์ค‘์š”ํ•œ ๊ธฐ์ค€์€ ๋ณ€๊ฒฝ์ด๋‹ค. ๋ณ€๊ฒฝ์ด ์žˆ์„ ๋•Œ ํŒŒ๊ธ‰ ํšจ๊ณผ๊ฐ€ ์ ์œผ๋ฉด ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์ž˜ ๋”ฐ.. 2022. 12. 31.