ํผ๋๋ก ๋์๊ฐ๊ธฐ
Dev.toBackend
์๋ฌธ ์ฝ๊ธฐ
Global Access Point ํ๋ณด๋ฅผ ํตํ ๋จ์ผ ์ธ์คํด์ค ๋ณด์ฅ ์ค๊ณ
๐น LLD Series #1: Singleton Design Pattern
AI ์์ฝ
Context
Logger๋ Database Connection๊ณผ ๊ฐ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ญ์์ ์ํ๋ฅผ ๊ณต์ ํด์ผ ํ๋ ๊ฐ์ฒด์ ์ค๋ณต ์์ฑ์ ๋ฐฉ์งํ ํ์์ฑ ๋๋. ๋ฌด๋ถ๋ณํ ์ธ์คํด์ค ์์ฑ์ผ๋ก ์ธํ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น์ ๋ฆฌ์์ค ๊ด๋ฆฌ์ ๋ณต์ก์ฑ ํด๊ฒฐ์ด ํต์ฌ ๊ณผ์ .
Technical Solution
- Private Constructor ์ค์ ์ ํตํ ์ธ๋ถ ํด๋์ค์ ์ง์ ์ ์ธ ์ธ์คํด์ค ์์ฑ ์ฐจ๋จ
- Static Instance ๋ณ์๋ฅผ ํ์ฉํ์ฌ ํด๋์ค ๋ ๋ฒจ์์ ๋จ ํ๋์ ๊ฐ์ฒด ์ํ ์ ์ง
- Public Static Method(getInstance)๋ฅผ ์ ๊ณตํ์ฌ ์ ์ญ์ ์ผ๋ก ๋์ผํ ์ธ์คํด์ค์ ์ ๊ทผํ๋ ์ง์ ์ ์ค๊ณ
- Lazy Initialization ๋ฐฉ์์ ์ ์ฉํ์ฌ ์ค์ ๊ฐ์ฒด ์์ฒญ ์์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ ์ต์ ํ ๊ตฌ์กฐ
- Multithreaded ํ๊ฒฝ์ Race Condition ๋ฐฉ์ง๋ฅผ ์ํ Synchronization ๋๋ Double-Checked Locking ๋์ ๊ฒํ ํ์
์ค์ฒ ํฌ์ธํธ
1. ์์ฑ์๋ฅผ private์ผ๋ก ์ ์ธํ์ฌ ์ธ๋ถ ์ ๊ทผ์ ์์ ํ ์ฐจ๋จํ๋๊ฐ
2. Multithreaded ํ๊ฒฝ์์ ์ธ์คํด์ค๊ฐ ์ค๋ณต ์์ฑ๋ ๊ฐ๋ฅ์ฑ์ ์๋๊ฐ
3. Singleton ์ ์ฉ ์ Unit Test์ ๋ ๋ฆฝ์ฑ์ ์ ํดํ๋ Tight Coupling์ด ๋ฐ์ํ์ง ์๋๊ฐ