JavaBookStudy / JavaBook

책읽기 스터디
https://javabookstudy.github.io/
Apache License 2.0
19 stars 2 forks source link

[Effective Java] Item 62. 문자열을 사용해 권한 부여 #37

Closed taxol1203 closed 3 years ago

taxol1203 commented 3 years ago
public class ThreadLocal {
    private ThreadLocal() { } // 객체 생성 불가

    // 현 스레드의 값을 키로 구분해 저장한다.
    public static void set(String key, Object value); 

    // (키가 가리키는) 현 스레드의 값을 반환한다.
    public static Object get(String key);
}

위 코드는 스레드 지역 변수 기능을 사용하여, 각 스레다 마다 자신만의 변수갖게 하여 스레드를 구분해 권환을 부여한다는 것인 것 까지는 이해했습니다.

위 코드의 문제점을 해결하기 위해 다음과 같은 코드를 사용하였는데, 코드 자체가 이해가 잘 되지 않습니다.

public final class ThreadLocal {
  public THreadLocal();
  public void set(Object value);
  public Object get();
}

Key는 갑자기 어디로 갔고, 스레드 자체가 지역변수가 된다는게 잘 이해가 되지 않습니다.
혹시 간단하게 설명 부탁드려도 될까염

kjsu0209 commented 3 years ago

저는 ThreadLocal에서 쓰는 key를 String타입 대신 ThreadLocal타입으로 만들어서 캡슐화한걸로 이해했어요. 그럴 경우 문자열 값으로 스레드를 구분하는 게 아니라 ThreadLocal 인스턴스 객체로 구분하기 때문에 더 정확해진다고 봅니다.