요약
•
문자열을 다른 타입을 대체하여 사용하지 말자.
문자열이 잘못 사용되는 경우
•
문자열은 다른 값 타입을 대신하기 적합하지 않다.
◦
받을 데이터가 수치형이라면 int나 float, BigInteger 등 적당한 숫자 타입으로 받는게 좋다.
◦
예/아니오 와 같이 질문의 답에 대해서는 boolean으로 변환해야 한다.
•
문자열은 열거 타입을 대신하기 적합하지 않다.
◦
문자열로 열거 타입을 대체하여 자주 사용되지만, 상수를 열거할 때는 열거 타입을 쓰자.
•
문자열은 혼합 타입을 대신하기에 적합하지 않다.
◦
여러 요소가 혼합된 데이터를 하나의 문자열로 표현하는 것은 좋지 않다.
String compoundKey = className + "#" + i.next();
Java
복사
◦
만약 # 문자가 둘 중 하나에서 사용된다면 위의 표현 방식은 오작동을 일으킬 것이다.
◦
또한 이런 방식은 각 요소를 문자열에서 파싱하여 개별적으로 접근해야하고, 그로인해 느려지고 귀찮고 오류 가능성도 커진다.
◦
이런 경우라면 따로 클래스를 만들어 사용하자.
•
문자열은 권한을 표현하기에 적합하지 않다.
◦
문자열을 통해 특정 값을 식별하는 권한(capacity)으로 사용하는 것은 바람직하지 않다.
public class ThreadLocal {
private ThreadLocal() {}
public static void set(String key, Object, value);
public static Object get(String key);
}
Java
복사
◦
이와 같이 문자열 키 값으로 지역변수를 식별하는 방법을 사용하면, 클라이언트 별로 서로 다른 문자열 키 값을 사용해야하고 의도치 않게 두 클라이언트가 같은 키를 사용하게 된다면 같은 변수를 공유하는 상황이 발생한다.
public class ThreadLocal() {
privat ThreadLoacl() {}
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);
}
Java
복사
◦
이와 같이 위조할 수 없고, 서로 다른 클라이언트가 같은 키를 사용하는 일이 없도록 구현해야 한다.