ITEM 3: Singleton
singleton ์ด๋ ์ธ์คํด์ค๋ฅผ ์ค์ง ํ๋๋ง ์์ฑํ ์ ์๋ ํด๋์ค์ด๋ค. ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ Singleton ๊ฐ์ฒด๊ฐ ์๋๋ผ๋ฉด mock ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์์ด ์ด๋ฅผ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ๋ฅผ ํ ์คํธํ๊ธฐ ์ด๋ ค์ ์ง ์ ์๋ค.
Mock ๊ฐ์ฒด๋?
์ค์ ๊ฐ์ฒด๋ฅผ ๋ค์ํ ์กฐ๊ฑด์ผ๋ก ์ธํด ์ ๋๋ก ๊ตฌํํ๊ธฐ ์ด๋ ค์ธ ๊ฒฝ์ฐ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋๋ฐ, ์ด๋ฅผ Mock ๊ฐ์ฒด๋ผ ํ๋ค.
Mock ๊ฐ์ฒด๊ฐ ํ์ํ ๊ฒฝ์ฐ.
ํ ์คํธ ์์ฑ์ ์ํ ํ๊ฒฝ ๊ตฌ์ถ์ด ์ด๋ ค์ด ๊ฒฝ์ฐ.
ํ ์คํธ๊ฐ ํน์ ๊ฒฝ์ฐ๋ ์๊ฐ์ ์์กด์ ์ธ ๊ฒฝ์ฐ.
์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ
public static final ํ๋ ๋ฐฉ์
private ์์ฑ์๋ public static final ํ๋์ธ Elvis.INSTANCE
๋ฅผ ์ด๊ธฐํํ ๋ ๋ฑ ํ๋ฒ ํธ์ถ๋๋ค. public ํน์ protected ์์ฑ์๊ฐ ์์ผ๋ฏ๋ก, Elvis ํด๋์ค๊ฐ ์ด๊ธฐํ๋ ๋ ๋ง๋ค์ด์ง ์ธ์คํด์ค๋ ํ๋๋ฟ์์ด ๋ณด์ฅ๋๋ค.
์ฅ์
public ํ๋ ๋ฐฉ์์ ํด๋น ํด๋์ค๊ฐ ์ฑ๊ธํด์์ด API์ ๋ช ๋ฐฑํ๊ฒ ๋๋ฌ๋๋ค.(final์ด๋ฏ๋ก ๋ค๋ฅธ ๊ฐ์ฒด ์ฐธ์กฐ ๋ถ๊ฐ)
๊ฐ๊ฒฐํจ
static factory ๋ฐฉ์
Elvis.getInstance()
๋ ํญ์ ๊ฐ์ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ๋ฐํํ๋ฏ๋ก ์ธ์คํด์ค๊ฐ ํ๋์์ ๋ณด์ฅํ๋ค.
์ฅ์
ํ์ฌ๋ singleton ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ๋ ์ ์ ๋ฉ์๋์ด์ง๋ง, ํฅํ์ ํ์์ ๋ฐ๋ผ ๋ณ๊ฒฝํ ์ ์๋ ํ์ฅ์ฑ์ด ์๋ค. ์ ์ผํ ๋ฉ์๋๋ฅผ ๋ฐํํ๋ ํฉํฐ๋ฆฌ ๋ฉ์๋๊ฐ ํธ์ถํ๋ ์ค๋ ๋๋ณ๋ก ๋ค๋ฅธ ์ธ์คํด์ค๋ฅผ ๋๊ฒจ์ฃผ๋๋ก ๋ฆฌํดํ๋ ๋ฐฉ๋ฒ๊ณผ ๊ฐ์ด ํ์ฅ์ฑ์ด ์ด๋ ค์๋ค.
์ ์ ํฉํฐ๋ฆฌ๋ฅผ ์ ๋ค๋ฆญ ์ฑํดํด ํฉํฐ๋ฆฌ-item30๋ก ๋ง๋ค ์ ์๋ค.
๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ด ํ์ํ์ง ์๋ค๋ฉด, public static final
ํ๋ ๋ฐฉ์์ด ๋ ์ข๋ค.
Reflection ๋ฐฉ์ด
์ด๋, public static final ๋ฐฉ์๊ณผ static factory ๋ฐฉ์์ ๊ถํ์ด ์๋ ํด๋ผ์ด์ธํธ๊ฐ Reflection API - item65 ์ธ AccessibleObject.setAccessible
์ ์ฌ์ฉํด private ์์ฑ์๋ฅผ ํธ์ถํ ์ ์๋ ๋ฌธ์ ์ ์ด ์๋ค. ์ด๋ฌํ ๊ณต๊ฒฉ์ ๋ฐฉ์ดํ๋ ค๋ฉด ๋๋ฒ ์งธ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ คํ ๋ ๋ค์๊ณผ ๊ฐ์ด ์์ธ์ฒ๋ฆฌ๋ฅผ ํด ๋ง์ ์ ์๋ค.
Singleton Class ์ง๋ ฌํ
Singleton class๋ฅผ ์ง๋ ฌํํ๋ ค๋ฉด ๋จ์ํ Serializable
์ ๊ตฌํํ๋ ๊ฒ๋ง์ผ๋ก๋ ๋ถ์กฑํ๋ค. ๋ชจ๋ ์ธ์คํด์ค ํ๋๋ฅผ transient
(์ผ์์ ) ์ฝ์ด๋ฅผ ์ ์ธํ๊ณ readResolve
๋ฉ์๋๋ฅผ ์ ๊ณตํด์ผํ๋ค. (item 89) ์ด๋ ๊ฒ ํ์ง ์์ผ๋ฉด, ์ญ์ง๋ ฌํ(deserialize)์ ์๋ก์ด ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ค.
Enum ๋ฐฉ์
์์๊ฐ ํ๋์ธ Enumํ์ ์ ์ ์ธํด singleton์ ๋ง๋ค ์ ์๋ค.
์ฅ์
public static ๋ฐฉ์๋ณด๋ค ๋ ๊ฐ๊ฒฐ
์ถ๊ฐ ์ฝ๋์์ด ์ง๋ ฌํ ๊ฐ๋ฅ
Reflection ๊ณต๊ฒฉ๊ณผ ์์ฃผ ๋ณต์กํ ์ง๋ ฌํ ์ํฉ์๋ ์ 2์ ์ธ์คํด์ค๊ฐ ์๊ธฐ๋ ์ผ์ ์๋ฒฝํ ๋ฐฉ์ด
๋๋ถ๋ถ์ ์ํฉ์์๋ ์์๊ฐ ํ๋๋ฟ์ธ ์ด๊ฑฐ ํ์
์ด singleton์ ๋ง๋๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ด๋ค. ํ์ง๋ง, ๋ง๋ค๋ ค๋ singleton์ด Enum
์ด์ธ์ ํด๋์ค๋ฅผ ์์ํด์ผํ๋ ๊ฒฝ์ฐ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค.
์ฐธ๊ณ
Last updated