item 62 . - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
λ¬Έμμ΄μ λ€λ₯Έ κ° νμ μ λμ νκΈ°μ μ ν©νμ§ μλ€.
- λ°μ λ°μ΄ν°κ° μμΉνμ΄λΌλ©΄ int, float, BigInteger λ± μ λΉν μμΉ νμ μΌλ‘ λ³νν΄μΌ νλ€. βμ/μλμ€β μ§λ¬Έμ λ΅μ΄λΌλ©΄ μ μ ν μ΄κ±° νμ μ΄λ booleanμΌλ‘ λ³νν΄μΌ νλ€. μΌλ°νν΄ μ΄μΌκΈ°νμλ©΄, κΈ°λ³Έ νμ μ΄λ μ°Έμ‘° νμ μ΄λ μ μ ν κ° νμ μ΄ μλ€λ©΄ κ·Έκ²μ μ¬μ©νκ³ , μλ€λ©΄ μλ‘ νλ μμ±νλΌ.
- λ¬Έμμ΄ μ€νλ μ»΄νμΌλ¬κ° 체ν¬ν΄μ€ μ μλ€.
- λ¬Έμμ΄μ μ€λ³΅μ κ³ λ―Όν΄μΌ νλ€. (ex λ€μμ€νμ΄μ€ μν μ νλ μ λμ¬ λΆμ΄κΈ°)
- λ¬Έμμ΄ μμλ μ λΆλ₯Ό μνν λ°©λ²μ΄ μλ€. (ex_ values())
String compoundKey = className + "#" + i.next();
- κ° μμμ ꡬλΆμκ° μ¬λ¬ μ’ λ₯μΈ κ²½μ° νΌλμ μ΄λνλ€.
- κ° μμλ₯Ό μ»μΌλ €λ©΄ νμ±ν΄μΌ νλ€.
- μλ₯Ό λ€μ΄ μ€λ λ μ§μλ³μ κΈ°λ₯μ μ€κ³νλ€κ³ ν΄λ³΄μ. κ·Έ μ΄λ¦μ²λΌ κ° μ€λ λκ° μμ λ§μ λ³μλ₯Ό κ°κ² ν΄μ£Όλ κΈ°λ₯μ΄λ€. λ°λ‘ ν΄λΌμ΄μΈνΈκ° μ 곡ν λ¬Έμμ΄ ν€λ‘ μ€λ λλ³ μ§μλ³μλ₯Ό μλ³ν κ²μ΄λ€.
public class ThreadLocal {
private ThreadLocal() { } // κ°μ²΄ μμ± λΆκ°
// ν μ€λ λμ κ°μ ν€λ‘ ꡬλΆν΄ μ μ₯νλ€.
public static void set(String key, Object value);
// (ν€κ° κ°λ¦¬ν€λ) ν μ€λ λμ κ°μ λ°ννλ€.
public static Object get(String key);
}
- μ΄ λ°©μμ λ¬Έμ λ μ€λ λ ꡬλΆμ© λ¬Έμμ΄ ν€κ° μ μ μ΄λ¦κ³΅κ°μμ 곡μ λλ€λ μ μ΄λ€. μ΄ λ°©μμ΄ μλλλ‘ λμνλ €λ©΄ κ° ν΄λΌμ΄μΈνΈκ° κ³ μ ν ν€λ₯Ό μ 곡ν΄μΌ νλ€.
- κ·Έλ°λ° λ§μ½ λ ν΄λΌμ΄μΈνΈκ° μλ‘ μν΅νμ§ λͺ»ν΄ κ°μ ν€λ₯Ό μ°κΈ°λ‘ κ²°μ νλ€λ©΄, μλμΉ μκ² κ°μ λ³μλ₯Ό 곡μ νκ² λλ€. κ²°κ΅ λ ν΄λΌμ΄μΈνΈ λͺ¨λ μ λλ‘ κΈ°λ₯νμ§ λͺ»ν κ²μ΄λ€. 보μλ μ·¨μ½νλ€. μ μμ μΈ ν΄λΌμ΄μΈνΈλΌλ©΄ μλμ μΌλ‘ κ°μ ν€λ₯Ό μ¬μ©νμ¬ λ€λ₯Έ ν΄λΌμ΄μΈνΈμ κ°μ κ°μ Έμ¬ μλ μλ€.
public 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);
}
- μ΄ APIλ λ¬Έμμ΄ λμ μμ‘°ν μ μλ ν€λ₯Ό μ¬μ©νλ©΄ ν΄κ²°λλ€. μ΄ ν€λ₯Ό κΆν (capacity)μ΄λΌκ³ λ νλ€.
- setκ³Ό getμ μ΄μ μ μ λ©μλμΌ μ΄μ κ° μμΌλ Key ν΄λμ€μ μΈμ€ν΄μ€ λ©μλλ‘ λ°κΎΈμ. μ΄λ κ² νλ©΄ Keyλ λ μ΄μ μ€λ λ μ§μλ³μλ₯Ό ꡬλΆνκΈ° μν ν€κ° μλλΌ, κ·Έ μμ²΄κ° μ€λ λ μ§μλ³μκ° λλ€.
public final class ThreadLocal {
public ThreadLocal();
public void set(Object value);
public Object get();
}
- μ΄ APIμμλ getμΌλ‘ μ»μ Objectλ₯Ό μ€μ νμ μΌλ‘ νλ³νν΄ μ¨μΌ ν΄μ νμ μμ νμ§ μλ€.
- μ²μμ λ¬Έμμ΄ κΈ°λ° APIλ νμ μμ νκ² λ§λ€ μ μμΌλ©°, Keyλ₯Ό μ¬μ©ν APIλ νμ μμ νκ² λ§λ€κΈ° μ΄λ ΅λ€. νμ§λ§ ThreadLocalμ λ§€κ°λ³μν νμ (μμ΄ν 29)μΌλ‘ μ μΈνλ©΄ κ°λ¨νκ² λ¬Έμ κ° ν΄κ²°λλ€.
public final class ThreadLocal<T> {
public ThreadLocal();
public void set(T value);
public T get();
}
- μ΄μ μλ°μ java.lang.ThreadLocalκ³Ό ν‘μ¬ν΄μ‘λ€. λ¬Έμμ΄ κΈ°λ° APIμ λ¬Έμ λ₯Ό ν΄κ²°ν΄μ£Όλ©°, ν€ κΈ°λ° APIλ³΄λ€ λΉ λ₯΄κ³ μ°μνλ€.
λ μ ν©ν λ°μ΄ν° νμ μ΄ μκ±°λ μλ‘ μμ±ν μ μλ€λ©΄, λ¬Έμμ΄μ μ°κ³ μΆμ μ νΉμ λΏλ¦¬μ³λΌ.
λ¬Έμμ΄μ μλͺ» μ¬μ©νλ©΄ λ²κ±°λ‘κ³ , λ μ μ°νκ³ , λλ¦¬κ³ , μ€λ₯ κ°λ₯μ±λ ν¬λ€.
λ¬Έμμ΄μ μλͺ» μ¬μ©νλ νν μλ‘λ κΈ°λ³Έ νμ , μ΄κ±° νμ , νΌν© νμ μ΄ μλ€.