Item 62. Avoid String Type

๋‹ค๋ฅธ ํƒ€์ž…์ด ์ ์ ˆํ•˜๋‹ค๋ฉด ๋ฌธ์ž์—ด ์‚ฌ์šฉ์„ ํ”ผํ•˜๋ผ

๋ฌธ์ž์—ด์€ ์ž๋ฐ”์—์„œ ์ž˜ ์ง€์›ํ•ด์ฃผ๊ธฐ ๋–„๋ฌธ์— ์˜๋„ํ•˜์ง€ ์•Š์€ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— ์ ํ•ฉํ•˜์ง€ ์•Š์€ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฌธ์ž์—ด์€ ๋‹ค๋ฅธ ๊ฐ’ ํƒ€์ž…์„ ๋Œ€์‹ ํ•˜๊ธฐ์—๋Š” ํ›จ์”ฌ ๋ฌด๊ฒ๊ณ , ๋œ ์œ ์—ฐํ•˜๊ณ , ๋œ ์ฝ๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์ ์ ˆํ•œ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

  • ์ˆ˜์น˜ํ˜•์ธ ๊ฒฝ์šฐ: int, float, BigInteger, BigDecimal ๋“ฑ ์ ๋‹นํ•œ ์ˆ˜์น˜ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜

  • ์งˆ๋ฌธ์˜ ๋‹ต์ธ ๊ฒฝ์šฐ: ์—ด๊ฑฐ ํƒ€์ž…์ด๋‚˜ boolean์œผ๋กœ ๋ณ€ํ™˜

  • ํ˜ผํ•ฉ ํƒ€์ž…์ธ ๊ฒฝ์šฐ: ์ ์ ˆํ•œ ์ „์šฉ ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑ

๋‹ค์Œ์€ ๊ถŒํ•œ์„ ๋ฌธ์ž์—ด๋กœ ํ‘œํ˜„ํ•˜์—ฌ ๋ถ€์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•œ ์˜ˆ์ด๋‹ค.

public class ThreadLocal {
    private ThreadLocal() {
    }

    // ํ˜„์žฌ ์Šค๋ ˆ๋“œ์˜ ๊ฐ’์„ ํ‚ค๋กœ ๊ตฌ๋ถ„ํ•ด ์ €์žฅ
    public static void set(String key, Object value);

    // ํ˜„ ์Šค๋ ˆ๋“œ์˜ ๊ฐ’ ๋ฐ˜ํ™˜
    public static Object get(String key);
}

์œ„ ์ฝ”๋“œ๋Š” ๋ฌธ์ž์—ด ํ‚ค๊ฐ€ ์ „์—ญ ์ด๋ฆ„ ๊ณต๊ฐ„์—์„œ ๊ณต์œ ๋˜๋Š”๋ฐ, ํ‚ค ์ด๋ฆ„์œผ๋กœ ๊ณ ์œ ํ•œ ๊ฐ’์ด ์•„๋‹Œ ๊ฐ™์€ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜๋ฉด ์˜๋„์น˜ ์•Š๊ฒŒ ๊ฐ’์ด ๋ฎ์–ด์“ฐ์—ฌ์ง€๊ฑฐ๋‚˜ ์„œ๋กœ ๊ณต์œ ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ „์šฉ ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

public final class ThreadLocal {
    private ThreadLocal() {
    }

    public static class Key { // (๊ถŒํ•œ)
        Key() {
        }
    }

    // ์œ„์กฐ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ณ ์œ  ํ‚ค๋ฅผ ์ƒ์„ฑ
    public static Key getKey() {
        return new Key();
    }

    public static void set(Key key, Object value);

    public static Object get(Key key);
}

(๋ฒˆ์™ธ)์œ„ ์ฝ”๋“œ ๊ฐœ์„ 

์œ„ ์ฝ”๋“œ๋Š” ๋ฌธ์ž์—ด ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ๋œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์ฃผ์ง€๋งŒ ๋‹ค์‹œ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • set/get ์ •์  ๋ฉ”์„œ๋“œ๋ฅผ Key ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ๋กœ ๋ณ€๊ฒฝ

public final class ThreadLocal {
    private ThreadLocal() {
    }

    public static class Key {
        Key() {
        }

        // ํ˜„์žฌ ์Šค๋ ˆ๋“œ์˜ ๊ฐ’์„ ์ด ํ‚ค๋กœ ๊ตฌ๋ถ„ํ•ด ์ €์žฅ
        public void set(Object value);

        // ํ˜„์žฌ ์Šค๋ ˆ๋“œ์˜ ๊ฐ’ ๋ฐ˜ํ™˜
        public Object get();
    }

    public static Key getKey() {
        return new Key();
    }
}
  • ThreadLocal ํด๋ž˜์Šค์˜ ์—ญํ• ์ด ์—†์œผ๋ฏ€๋กœ Key ํด๋ž˜์Šค๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ThreadLocal ํด๋ž˜์Šค์— ํ†ตํ•ฉ

public final class ThreadLocal<T> {
    public ThreadLocal() {
    }

    public void set(T value);

    public T get();
}
  • ๋งค๊ฐœ๋ณ€์ˆ˜ํ™” ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์—ฌ ํƒ€์ž… ์•ˆ์ •์„ฑ์„ ๋†’์ž„

public final class ThreadLocal<T> {
    public ThreadLocal() {
    }

    public void set(T value);

    public T get();
}

Last updated