-
[SpringBoot] ์ฑ๊ธํค ํจํด(singleton pattern) (feat: Spring)๐ปProgramming/SpringBoot 2024. 3. 27. 22:36
์ฑ๊ธํค ํจํด์ด๋
๋จ ํ๋์ ์ ์ผํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ฝ๋ ํจํด์ด๋ค.
๋ฉ๋ชจ๋ฆฌ ์ ์ฝ์ ์ํด ์ธ์คํด์ค๊ฐ ํ์ํ ๋ ๋๊ฐ์ ์ธ์คํด์ค๋ฅผ ์๋ก ๋ง๋ค์ง ์๊ณ ๊ธฐ์กด์ ์ธ์คํด์ค๋ฅผ ๊ฐ์ ธ์ ํ์ฉํ๋ ๊ธฐ๋ฒ์ ๋งํ๋ค.
์ฑ๊ธํค ํจํด์ด ์ ์ฉ๋ ๊ฐ์ฒด๊ฐ ํ์ํ ๊ฒฝ์ฐ๋ ๊ทธ ๊ฐ์ฒด๊ฐ ๋ฆฌ์์ค๋ฅผ ๋ง์ด ์ฐจ์งํ๋ ์ญํ ์ ํ๋ ๋ฌด๊ฑฐ์ด ํด๋์ค์ผ ๋ ์ ํฉํ๋ค.
์ฑ๊ธํค ํจํด์ ๊ตฌํ
public class SingletonService { private static final SingletonService instance = new SingletonService(); public static SingletonService getInstance() { return instance; } private SingletonService() { } public void logic() { System.out.println("์ฑ๊ธํค ๊ฐ์ฒด ๋ก์ง ํธ์ถ"); } }
1. ์ฐ์ , static ์์ญ์ ๊ฐ์ฒด๋ฅผ ๋ฑ ํ๊ฐ๋ง ์์ฑํ๋ค.
2. ์ด ๊ฐ์ฒด ์ธ์คํด์ค๊ฐ ํ์ํ ๊ฒฝ์ฐ getInstance() ๋ฉ์๋๋ฅผ ํตํด์๋ง ์กฐํํ๋๋ก ํ์ฉ -> ๊ฐ์ฒด ํ๋๋ง ์์ฑํ๊ณ ์ฌ๋ฌ ๋ณ์์ ๋ถ๋ฌ์๋ ๋๋ ค์ฐ๋๋ก ํจ.
3. ์์ฑ์๋ฅผ private์ผ๋ก ์ ์ธํ์ฌ ์ธ๋ถ์์ new ํค์๋๋ฅผ ์ฌ์ฉํ ๊ฐ์ฒด ์์ฑ์ ํ์ง ๋ชปํ๋๋ก ํ๋ค.
๊ฒฐ๊ณผ
SingletonService singletonService1 = SingletonService.getInstance(); SingletonService singletonService2 = SingletonService.getInstance(); System.out.println("singletonService1 = " + singletonService1); System.out.println("singletonService2 = " + singletonService2);
๋ฅผ ์ถ๋ ฅํด๋ณด๋ฉด,
๊ฐ์ ๊ฐ์ฒด๊ฐ ์ฌ์ฉ๋๊ณ ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ฑ๊ธํค ํจํด์ ๋จ์
1. ๋ชจ๋๊ฐ ์์กด์ฑ์ด ๋์์ง๋ค.
2. SOLID ์์น ์๋ฐฐ ์ฌ๋ก๊ฐ ๋ง๋ค.
ex. ํด๋ผ์ด์ธํธ๊ฐ ์ญํ ์ด ์๋ ๊ตฌํ ํด๋์ค์ ์์กด -> DIP ์๋ฐ, OCP ์๋ฐ.
3. TDD ๋จ์ ํ ์คํธํ๊ธฐ ์ด๋ ค์.
4. ์์ ํด๋์ค๊ฐ ์์๋ฐ๊ธฐ ์ด๋ ค์.
5. ์ ์ฐ์ฑ ๋จ์ด์ง
6. ์ฑ๊ธํค ํจํด์ ๊ตฌํํ๋ ์ฝ๋๊ฐ ๋ง์ด ํ์.
์ฑ๊ธํค ์ปจํ ์ด๋
์คํ๋ง ์ปจํ ์ด๋๋ ์ฑ๊ธํค ํจํด์ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๋ฉด์, ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์ฑ๊ธํค(1๊ฐ๋ง ์์ฑ)์ผ๋ก ๊ด๋ฆฌํ๋ค. ์ด๋ ๊ฒ ์คํ๋ง์์ ์ฑ๊ธํค์ผ๋ก ๊ด๋ฆฌ๋๋ ๊ฐ์ฒด๋ฅผ ์คํ๋ง ๋น์ด๋ผ๊ณ ํ๋ค.
์ด๋ ๊ฒ ์ฑ๊ธํค ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ์ ์ฑ๊ธํค ๋ ์ง์คํธ๋ฆฌ๋ผ๊ณ ํ๋ค.
์ด๋ ๊ฒ ์คํ๋ง์ด ์ฑ๊ธํค ํจํด์ ๋์ ๊ตฌํํด์ฃผ๋ฉด์ ๊ฐ๋ฐ์๋ ์ฑ๊ธํค ํจํด์ ์ํ ์ฝ๋๋ฅผ ์์ฑํ ํ์๊ฐ ์๊ณ , DIP, OCP, ํ ์คํธ, private ์์ฑ์์ ๋จ์ ์ ๋ณด์ํ๋ฉด์ ์ฑ๊ธํค์ ์ฌ์ฉํ ์ ์๋ค.
References
์ธํ๋ฐ - ๊น์ํ๋ ๊ฐ์
'๐ปProgramming > SpringBoot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ