티스토리 뷰

반응형

문자열을 쓰지 않아야 할 사례

1) 문자열은 다른 값 타입을 대신하기에 적합하지 않다.

기본 타입이든 참조 타입이든 적절한 값 타입이 있다면 그것을 사용하고, 없다면 새로 하나 작성하라.

 

2) 문자열은 열거 타입을 대신하기에 적합하지 않다.

상수를 열거할때는 문자열보다 열거 타입이 월등히 좋다. [아이템 34]

 

3) 문자열은 혼합 타입을 대신하기에 적합하지 않다.

여러 요소가 혼합된 데이터를 하나의 문자열로 표현하는 것은 좋지 않다.

String compoundKey = className + "#" + i.next();

각 요소를 개별로 접근하려면 문자열을 파싱해야해서 느리고 귀찮고 오류 가능성도 커진다.

equals, toString, compareTo 메서드를 제공할 수 없다. → 차라리 전용 클래스를 새로 만드는 편이 낫다.

 

4) 문자열은 권한을 표현하기에 적합하지 않다.

권한(capacity)을 문자열로 표현하는 경우 보안이 취약해지며 의도적으로 같은 키를 사용하여 값을 탈취하는 문제점이 생길 수 있다.

public class ThreadLocal {
    private ThreadLocal() { }

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

    // (키가 가리키는) 현 스레드의 값을 반환한다.
    public static Object get(String key);
}
  • 스레드 구분용 문자열 키가 전역 이름 공간에서 공유된다는 문제점이 있다.
  • 두 클라이언트가 서로 소통하지 못해서 같은 키를 쓰게 된다면 의도치 않게 같은 변수를 공유하는 문제점
  • 문자열 대신 스레드 지역변수를 이용하면 해결됨
public final class ThreadLocal<T> {
    public ThreadLocal() { }  //스레드 지역변수
      public void set(T value);
    public T get();
}

 

 

결론

더 적합한 데이터 타입이 있거나 새로 작성할 수 있다면, 문자열 대신 그것을 써라.

문자열은 잘못 사용하면 번거롭고 덜 유연하고 느리고 오류 가능성이 크다.

문자열을 잘못 사용하는 흔한 예로는 기본 타입, 열거 타입, 혼합 타입이 있다.

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday