์ธํ๋ฐ ๊น์ํ๋์ ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ ๊ฐ์ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ฑํ ๊ธ์
๋๋ค. ์ง๊ธ๊น์ง ๋ค์ํ ๋น ์ค์ฝํ์ ๋ํด ์์๋ณด์๋ค. ๊ฐ๋ฐ์๋ ์ดํ๋ฆฌ์ผ์ด์
์ ํน์ฑ์ ๋ฐ๋ผ ์ ์ ํ ๋น ์ค์ฝํ๋ฅผ ์ ํํด์ผ ํ์ง๋ง, ํ๋กํ ํ์
๋น๊ณผ ์ฑ๊ธํค ๋น์ ํจ๊ป ์ฌ์ฉํ ๋๋ ์ฃผ์ํด์ผ ํ ์ ์ด ์๋ค. ๋จผ์ ์๋์ ๊ฐ์ด ๋์ํ๋ ํ๋กํ ํ์
๋น์ด ์๋ค๊ณ ๊ฐ์ ํ์. 1. ํด๋ผ์ด์ธํธ A๊ฐ ์คํ๋ง ์ปจํ
์ด๋์ ํ๋กํ ํ์
๋น์ ์์ฒญํ๋ค. 2. ์คํ๋ง ์ปจํ
์ด๋๊ฐ ํ๋กํ ํ์
๋น ์ธ์คํด์ค(PrototypeBean@x01)๋ฅผ ์์ฑํด์ ๋ฐํํ๋ค. PrototypeBean@x01.count: 0 3. ํด๋ผ์ด์ธํธ A๊ฐ addCount()๋ฅผ ํธ์ถํ์ฌ count ํ๋๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค. PrototypeBean@x01.count: 1 ์์ ๊ฐ์ ์ํฉ์์, ํด..
์ธํ๋ฐ ๊น์ํ๋์ ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ ๊ฐ์ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ฑํ ๊ธ์
๋๋ค. 1. ๋น ์ค์ฝํ๋? ๋น ์ค์ฝํ๋, ๋น์ด ์์ฑ๋์ด ์๋ฉธ๋๊ธฐ๊น์ง์ ๋ฒ์๋ฅผ ์๋ฏธํ๋ค. ์ง๊ธ๊น์ง๋ ์คํ๋ง ์ปจํ
์ด๋๊ฐ ๋ฐ ๋ ์คํ๋ง ๋น์ด ์์ฑ๋๊ณ , ์คํ๋ง ์ปจํ
์ด๋๊ฐ ์ข
๋ฃ๋ ๋ ํจ๊ป ์๋ฉธํ๋ค๊ณ ๋ฐฐ์ ๋ค. ํ์ง๋ง ์ดํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ๋ค ๋ณด๋ฉด ๋ค์ํ ์ค์ฝํ๋ฅผ ๊ฐ์ง ๋น์ด ํ์ํด์ง๋ค. ์๋ฅผ ๋ค์ด, ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ํด ๋ก๊ทธ๋ฅผ ์ฐ์ผ๋ ค๋ฉด ์์ฒญ์ด ๋ค์ด์ฌ ๋ ๋น์ ์์ฑํ๊ณ , ์์ฒญ์ด ์ข
๋ฃ๋๋ฉด ๋น์ ์๋ฉธ์์ผ์ผ ํ๋ค. ์ด์ฒ๋ผ ๋น์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ์ฑ๊ธํค๊ณผ ๋ค๋ฅด๊ฒ ์ ์ดํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์, ์คํ๋ง ์ปจํ
์ด๋์์๋ ๋ค์ํ ๋น ์ค์ฝํ๋ฅผ ์ง์ํ๋ค. ๋น ์ค์ฝํ์๋ ๋ค์๊ณผ ๊ฐ์ ์ข
๋ฅ๊ฐ ์๋ค. ์ฑ๊ธํค: ์คํ๋ง ์ปจํ
์ด๋๊ฐ ์์ํ ๋ ์์ฑ๋์ด ์ข
๋ฃ๋ ๋ ์๋ฉธ๋๋, ์คํ..
์ธํ๋ฐ ๊น์ํ๋์ ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ ๊ฐ์ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ฑํ ๊ธ์
๋๋ค. 1. ์ด๊ธฐํ ์์
์ ํ์์ฑ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ปค๋ฅ์
์ ์ฐ๊ฒฐ์ ์ค์ ํ๋ ๋ฐ ์ค๋ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์, ์ ํ๋ฆฌ์ผ์ด์
์๋ฒ์ DB ์ฌ์ด์ ์ปค๋ฅ์
์ ๋ฏธ๋ฆฌ ์์ฑํด๋๋ค. ๊ทธ๋ฆฌ๊ณ DB ์ฐ๊ฒฐ ์์ฒญ์ด ์ค๋ฉด ์ฐ๊ฒฐํด๋์๋ ์ปค๋ฅ์
์ ๋น๋ ค์ฃผ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค. ์ด ์ปค๋ฅ์
์ ๋ณดํต ์ ํ๋ฆฌ์ผ์ด์
์ด ์์๋๋ ์์ ์ ์์ฑ๋๊ณ , ์ ํ๋ฆฌ์ผ์ด์
์ด ์ข
๋ฃ๋ ๋ ํจ๊ป ์ข
๋ฃ๋๋ค. ๋๋ฌธ์ ์ด๊ธฐํ์ ์ข
๋ฃ ์์
์ด ํ์ํ๋ค. ๐ก์ด๊ธฐํ ์์
์ ์์ฑ์์์ ์งํํ๋ฉด ์๋๋ ์ด์ ? ์์ฑ์๋ ์ด๋ฆ ๊ทธ๋๋ก ๊ฐ์ฒด ์์ฑ์ ์ํ ๋ฉ์๋์ด๋ค. ์์ฑ์๋ ์ด๊ธฐํ ์์
๋ณด๋จ ๊ฐ์ฒด ์์ฑ์ ์ง์คํ๋ ๊ฒ์ด SRP์ ๋ ์๋ง๊ณ , ์ ์ง๋ณด์์ ์ธ ์ธก๋ฉด์์ ์ข๋ค. ์ด๊ธฐํ ์์
์๋ ์ธ๋ถ ์ปค๋ฅ์
์ฐ๊ฒฐ ๋ฑ ๋ฌด๊ฒ๊ณ ์์ธ๋ฅผ..
์ธํ๋ฐ ๊น์ํ๋์ ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ ๊ฐ์ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ฑํ ๊ธ์
๋๋ค. ์์กด๊ด๊ณ ์ฃผ์
์ด๋, ์ ํ๋ฆฌ์ผ์ด์
์คํ ์์ ์ ์ธ๋ถ์์ ์ค์ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ์์ฑํด ํด๋ผ์ด์ธํธ์ ์ ๋ฌํ๋ ๊ฒ์ด๋ค. ์ด์ ์ ์ ์ด์ ์ญ์ ๊ณผ ํจ๊ป ์์๋ณธ ์ ์ด ์์๋ค. ๊ทธ๋ ๋ค๋ฉด ํด๋ผ์ด์ธํธ์๊ฒ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ์ด๋ป๊ฒ ์ ๋ฌํ ๊น? ํฌ๊ฒ 4๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค. 1. ์์ฑ์ ์ฃผ์
๋ง ๊ทธ๋๋ก ์์ฑ์๋ฅผ ์ด์ฉํด์ ์์กด๊ด๊ณ๋ฅผ ์ฃผ์
ํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์์ฑ์๋ฅผ ํธ์ถํ ๋, @Autowired๊ฐ ๋ถ์ด์์ผ๋ฉด ์คํ๋ง ์ปจํ
์ด๋์์๋ ๋งค๊ฐ๋ณ์์ ๊ฐ์ ํ์
์ ๋น์ ์ฐพ์ ์์ฑ์์ ๋ฃ์ด์ค๋ค. @Component public class OrderServiceImpl implements OrderService { private final DiscountPolicy discou..
์ธํ๋ฐ ๊น์ํ๋์ ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ ๊ฐ์ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ฑํ ๊ธ์
๋๋ค. 1. ์ปดํฌ๋ํธ ์ค์บ์ด๋? @Configuration public class AppConfig { @Bean public OrderService orderService() { System.out.println("call orderService()"); return new OrderServiceImpl(discountPolicy()); } @Bean public DiscountPolicy discountPolicy() { System.out.println("call discountPolicy()"); return new FixDiscountPolicy(); } } ์ง๊ธ๊น์ง๋ ์ค์ ์ ๋ณด ํ์ผ์ ๋ฑ๋กํ ์คํ๋ง ๋น์ ์ง์ ๋์ดํด..
์ธํ๋ฐ ๊น์ํ๋์ ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ ๊ฐ์ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ฑํ ๊ธ์
๋๋ค. 1. ์ฑ๊ธํค ํจํด์ด๋? ์ฑ๊ธํค ํจํด์ด๋ ๊ฐ์ฒด์ ์ธ์คํด์ค๋ฅผ ๋ฑ 1๊ฐ๋ง ์์ฑํ๋ ๊ฒ์ ๋งํ๋ค. ์์ฑ์๋ฅผ ๋ช ๋ฒ ํธ์ถํ๋๋ผ๋ ์ธ์คํด์ค๋ ๋ฑ 1๊ฐ๋ง ์์ฑ๋๊ณ , ์ธ์คํด์ค ์์ฑ ์ดํ์ ํธ์ถ๋๋ ์์ฑ์๋ ์ด์ ์ ์์ฑํด๋ ์ธ์คํด์ค๋ฅผ ๋ฐํํด์ผ ํ๋ค. ์ฑ๊ธํค ํจํด์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์์ง๋ง, ์ฃผ๋ก ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ด ๋ง์ด ์ฐ์ธ๋ค. class Singleton { private static final Singleton singleton = new Singleton(); public static Singleton getInstance(){ return singleton; } } singleton ํ๋๋ static ๋ฉค๋ฒ๋ก ์ค์ ํ์ฌ ..