Item 3. Singleton
private ์์ฑ์๋ ์ด๊ฑฐ ํ์ ์ผ๋ก ์ฑ๊ธํด์์ ๋ณด์ฆํ๋ผ
์ฑ๊ธํด์ด๋ ์ธ์คํด์ค๋ฅผ ์ค์ง ํ๋๋ง ์์ฑํ ์ ์๋ ํด๋์ค๋ก, ์ฌ์ฉํ ์๋ก๋ ํจ์์ ๊ฐ์ ๋ฌด์ํ ๊ฐ์ฒด๋ ์ค๊ณ์ ์ ์ผํด์ผ ํ๋ ์์คํ ์ปดํฌ๋ํธ๊ฐ ์๋ค.
์ฑ๊ธํด์ ๋ง๋๋ ๋ฐฉ๋ฒ
์ฑ๊ธํด์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ณดํต ๋ ๊ฐ์ง ๋ฐฉ์์ด ์๋ค.
1. public static final ํ๋ ๋ฐฉ์
์ ์ฝ๋์์ ๋ณผ ์ ์๋ฏ์ด static final ํ๋์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด public์ผ๋ก ์ ์ธํ๊ณ , ์์ฑ์๋ฅผ private์ผ๋ก ์ ์ธํ์ฌ ์ธ๋ถ์์ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ๋ชปํ๋๋ก ํ๋ค. ์ด ๋ฐฉ์์ ํด๋น ํด๋์ค๊ฐ ์ฑ๊ธํด์์ด API์ ๋ช
๋ฐฑํ ๋๋ฌ๋๋ ์ฅ์ ์ด ์๋ค.
class Ogu {
public static final Ogu INSTANCE = new Ogu();
private Ogu() {
}
public void something() {
System.out.println("something");
}
}2. ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋ ๋ฐฉ์
์๋ ์ฝ๋์์ ๋ณผ ์ ์๋ฏ์ด static ํฉํฐ๋ฆฌ ๋ฉ์๋๋ฅผ public์ผ๋ก ์ ์ธํ๊ณ , ์์ฑ์๋ฅผ private์ผ๋ก ์ ์ธํ์ฌ ์ธ๋ถ์์ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ๋ชปํ๋๋ก ํ๋ค.
์ด ๋ฐฉ์์ 1๋ฒ์ ๋ฐฉ๋ฒ๊ณผ ๋ค๋ฅด๊ฒ ์๋์ ๊ฐ์ ์ฅ์ ์ด ์๋ค. ๋ง์ฝ ์๋ ์ฅ์ ๋ค์ด ํ์ํ์ง ์๋ค๋ฉด 1๋ฒ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
API๋ฅผ ๋ฐ๊พธ์ง ์๊ณ ๋ ์ฑ๊ธํด์ด ์๋๊ฒ ๋ณ๊ฒฝ ๊ฐ๋ฅ
์ ์ ํฉํฐ๋ฆฌ๋ฅผ ์ ๋ค๋ฆญ ์ฑ๊ธํด ํฉํฐ๋ฆฌ๋ก ๋ง๋ค ์ ์์
์ ์ ํฉํฐ๋ฆฌ์ ๋ฉ์๋ ์ฐธ์กฐ๋ฅผ ๊ณต๊ธ์(supplier)๋ก ์ฌ์ฉํ ์ ์์
3. ์์๊ฐ ํ๋์ธ ์ด๊ฑฐ ํ์
๋ฐฉ์
์ด๊ฑฐ ํ์ ์ ์ฑ๊ธํด์ ๋ง๋๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ผ๋ก, ์ง๋ ฌํ ๋ฌธ์ ๋ ์๋์ผ๋ก ์ฒ๋ฆฌ๋๊ณ ๋ฆฌํ๋ ์ ๊ณต๊ฒฉ์๋ ์์ ํ๊ฒ ๋ณด์ฅ๋๋ค.
๋จ, ๋ง๋ค๋ ค๋ ์ฑ๊ธํด์ด Enum ์ธ์ ํด๋์ค๋ฅผ ์์ํด์ผ ํ๋ค๋ฉด ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค. ๋๋ฌธ์ ์์์ ํด์ผํ๋ ์ํฉ์ด ์๋๋ผ๋ฉด ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข๋ค.
์ฑ๊ธํด ํด๋์ค๋ฅผ ๋ง๋ค ๋ ์ฃผ์ํ ์
์์์๋ ์ธ๊ธํ๋ฏ์ด 1, 2๋ฒ ํจํด์ผ๋ก ๋ง๋ค๊ฒ ๋๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธํด ์ธ์คํด์ค๋ฅผ ๋ณด์ฅํ ์ ์์ง๋ง, ์๋ ๋ ๊ฐ์ง ์ํฉ์์๋ ์ฑ๊ธํด์ด ๊นจ์ง ์ ์๋ค. ๋๋ฌธ์ ์๋ฒฝํ๊ฒ ์ฑ๊ธํด์ ๋ณด์ฅํ๋ ค๋ฉด ์ง๋ ฌํ(Serialization)์ ๋ฆฌํ๋ ์ (Reflection)์ ๊ณ ๋ คํด์ผ ํ๋ค.
๋ฆฌํ๋ ์
์ ํตํ ์์ธ
๋ฆฌํ๋ ์ ์ ์ด์ฉํ๋ฉด private ์์ฑ์๋ฅผ ํธ์ถํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ๊ณต๊ฒฉ์ ๋ฐฉ์ดํ๊ธฐ ์ํด์๋ ์์ฑ์์์ ๋ ๋ฒ์งธ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ ค๊ณ ํ ๋ ์์ธ๋ฅผ ๋ฐ์ ์ํค๋ ๋ฐฉ์ด ์ฝ๋๋ฅผ ๋ฃ์ด์ผ ํ๋ค.
์์ฑ์์ ๋ฐฉ์ด ์ฝ๋ ์ฃผ์์ ํด์ ํ๋ฉด ์๋์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด์ ๋ ๋ฒ์งธ ๊ฐ์ฒด๊ฐ ์์ฑ๋์ง ์๋๋ค.
์ง๋ ฌํ๋ฅผ ํตํ ์์ธ
1, 2๋ฒ ๋ฐฉ์์ผ๋ก ๋ง๋ ์ฑ๊ธํด ํด๋์ค๋ ์ง๋ ฌํํ ๋ค์ ์ญ์ง๋ ฌํํ๋ฉด ํด๋น ๊ฐ์ฒด์ ์ ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ ๋ฌธ์ ๊ฐ ์๋ค.
๋๋ฌธ์ ์ฑ๊ธํด ํด๋์ค๋ฅผ ์ง๋ ฌํํ๊ณ ์ญ์ง๋ ฌํํ ๋๋ง๋ค ์๋ก์ด ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ readResolve ๋ฉ์๋๋ฅผ ์ ๊ณตํด์ผ ํ๋ค.
readResolve ๋ฉ์๋๋ Java์ ์ญ์ง๋ ฌํ ํ๋ก์ธ์ค ์ค์ ์ฌ์ฉ๋๋ ํน์ ๋ฉ์๋๋ก, ๊ตฌํํด์ผ ํ๋ ์ธํฐํ์ด์ค ๋ฉ์๋๊ฐ ์๋ ์ญ์ง๋ ฌํ ๋์์ ํด๋์ค์์ ์ ํ์ ์ผ๋ก ์ ์ํ ์ ์๋ ๋ฉ์๋์ด๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก readResolve ๋ฉ์๋ ์ฃผ์์ ํด์ ํ๋ฉด ์๋ก์ด ์ธ์คํด์ค๊ฐ ๋ฐํ๋์ด ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋๋ค.
Last updated
Was this helpful?