Effective Java 3/E
์์ดํ 4: ์ธ์คํด์คํ๋ฅผ ๋ง์ผ๋ ค๊ฑฐ๋ private ์์ฑ์๋ฅผ ์ฌ์ฉํ๋ผ
์ฐ๋ฆฌ๋ Java๋ก ์ด๋ ํ ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ ๋์ ์ ์ ๋ฉ์๋๋ง ๋ด์ Util ํด๋์ค๋ฅผ ๋ง๋ค๊ณคํ๋ค. ํ์ง๋ง ์ฌํ๊น์ง์ ๋๋ Util ํด๋์ค์ ์์ฑ์๋ฅผ ๊ตฌํํ์ง ์์๋ค. Util ํด๋์ค์ ์์ฑ์๋ฅผ ๊ตฌํํ์ง ์์ผ๋ฉด, ์ปดํ์ผ๋ฌ๋ ์๋์ผ๋ก ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ๋ง๋ ๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ์ ์๋์น ์๊ฒ Util ํด๋์ค์ ๊ฐ์ฒด๊ฐ ์์ฑ๋ ์ ์๊ฒ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด Util ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๊ฒ ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น? ์ฐ๋ฆฌ๋ ๊ทธ ๋ต์ ์ด๋ฏธ ์๊ณ ์๋ค. ์ฑ๊ธํค ํจํด์์ ์ฐ๋ฆฌ๋ ํ๋์ ๊ฐ์ฒด๋ฅผ ์ ์ธํ ๊ฐ์ฒด๊ฐ ์์ฑ๋์ง ์๋๋ก private ์์ฑ์ ํจ์๋ฅผ ๋ง๋ ๋ค. ์ด์ฒ๋ผ JDK์ ๋ด์ฅ๋์ด ์๋ Arrays, Collections์ ๊ฐ์ Util ํด๋์ค์์๋ ๋ง์ฐฌ๊ฐ์ง๋ก private ์์ฑ์ ํจ์๋ฅผ ๊ตฌํํ์ฌ ๊ฐ์ฒด๊ฐ ์์ฑ๋์ง ์๋๋ก ํ๋ค.
public class StringUtil {
// ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์์ฑ๋๋ ๊ฒ์ ๋ง๋๋ค. (์ธ์คํด์คํ ๋ฐฉ์ง์ฉ)
private StringUtil(){
throw new AssertionError();
}
...
}
์์ฑ์ ํจ์์ ์ ๊ทผ์ ์ด์๊ฐ private๋ก ์ค์ ๋์ด ์์ด ์ธ๋ถ ํด๋์ค์์๋ ์ ๊ทผํ ์ ์์ง๋ง, ํด๋น ํด๋์ค ๋ด๋ถ์์ ํน์๋ผ๋ ์ ๊ทผํ ์ ์์ด AssertionError๋ฅผ throwํ๊ณ ์๋ค. ์์ฑ์๊ฐ ์กด์ฌํ์ง๋ง ํธ์ถํ ์ ์๋ค๋ ์ ์์ ์ง๊ด์ ์ด์ง๋ ์์ผ๋ ํด๋น ์ฝ๋ ์๋ถ๋ถ์ ์ฃผ์์ ๋ฌ์๋์. ๋ํ ์ด ๋ฐฉ์์ ์์์ ๋ถ๊ฐ๋ฅํ๊ฒ ํ๋ ํจ๊ณผ๋ ์๋ค. ๋ชจ๋ ์์ฑ์๋ ์์ ํด๋์ค์ ์์ฑ์๋ฅผ ํธ์ถํ๊ฒ ๋๋๋ฐ, ๊ทธ ์์ฑ์๋ฅผ private ์ ์ธํ์ผ๋ ํ์ ํด๋์ค๊ฐ ์์ ํด๋์ค์ ์ ๊ทผํ ๊ธธ์ด ๋งํ๋ฒ๋ฆฐ๋ค. (There is no default constructor available in 'StringUtil' Compile Error ๋ฐ์ )