Item 4. Noninstantiability

์ธ์Šคํ„ด์Šคํ™”๋ฅผ ๋ง‰์œผ๋ ค๊ฑฐ๋“  private ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ผ

๋ณดํ†ต์˜ ์ƒํ™ฉ์€ ์•„๋‹ˆ์ง€๋งŒ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ์ธ์Šคํ„ด์Šคํ™” ๋ถˆ๊ฐ€ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

  • ์ •์  ๋ฉ”์„œ๋“œ์™€ ์ •์  ํ•„๋“œ๋งŒ์„ ๋‹ด์€ ํด๋ž˜์Šค๊ฐ€ ํ•„์š”ํ•  ๋•Œ(ex. java.lang.Math, java.util.Arrays)

  • ํŠน์ • ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋Š” ์ •์  ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ด์€ ํด๋ž˜์Šค๊ฐ€ ํ•„์š”ํ•  ๋•Œ(ex. java.util.Collections)

  • final ํด๋ž˜์Šค์™€ ๊ด€๋ จํ•œ ๋ฉ”์„œ๋“œ๋“ค์„ ๋ชจ์•„๋†“์„ ๋•Œ(ex. java.lang.reflect.Method)

๋•Œ๋ฌธ์— ์œ„์™€ ๊ฐ™์€ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋“ค์€ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด ์“ฐ๋ ค๊ณ  ์„ค๊ณ„ํ•œ๊ฒŒ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธ์Šคํ„ด์Šคํ™” ๋ถˆ๊ฐ€ ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

์ธ์Šคํ„ด์Šคํ™” ๋ถˆ๊ฐ€ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

์ƒ์„ฑ์ž๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์ง€๋งŒ, ๋ช…์‹œ์ ์œผ๋กœ private ์ƒ์„ฑ์ž๋ฅผ ์„ ์–ธํ•˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค. (**์ถ”์ƒ ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค์–ด๋„ ์ธ์Šคํ„ด์Šคํ™” ๋ถˆ๊ฐ€ ํด๋ž˜์Šค๊ฐ€ ๋˜์ง€๋งŒ, ์ƒ์†์„ ๋ฐ›์•„ ์ธ์Šคํ„ด์Šคํ™” ๊ฐ€๋Šฅํ•œ ํด๋ž˜์Šค๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฐฉ๋ฒ•์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.)

class UtilityClass {
    // ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ private์œผ๋กœ ์„ ์–ธํ•˜๊ณ , ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒํ•ด reflection์ด๋‚˜ ๋‚ด๋ถ€ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š”๋‹ค.
    private UtilityClass() {
        throw new AssertionError();
    }
}

private ์ƒ์„ฑ์ž๋กœ ์„ ์–ธํ•˜๋ฉด ์ƒ์†๋„ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ํšจ๊ณผ๋„ ์žˆ์–ด ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒƒ๋„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.

Last updated

Was this helpful?