본문으로 바로가기
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


문자열은 텍스트 표현과 처리에 걸맞도록 설계되었지만 설계된 목적 이외의 용도로 사용된다. 이번 규칙에는 문자열로 해서는 안되는 일들을 짚어본다.


문자열은 값 자료형을 대신하기에는 부족하다.

데이터가 파일, 키보드, 네트워크로 들어올 때 문자열 형태다. 그러니 그대로 두려는 경향이 있다. 숫자라면 int, float, BigInteger 같은 수 자료형을 써야한다. 예, 아니오는 Boolean을 써야한다. 적절한 값 자료형이 있다면 기본자료형이건, 객체자료형이건 상관없이 해당 자료형을 써야한다.


문자열은 enum 자료형을 대신하기에 부족하다.

규칙 30에서 설명한대로(아직 규칙30을 못보았다. 기억이 난다면 추가로 적는걸로..) enum은 문자열보다 훨씬 좋은 열거 자료형 상수들을 만들어 낸다.


문자열은 혼합 잘형을 대신하기엔 부족하다.

여러 컴포넌트가 있는 개체를 문자열로 표현하는 것은 좋은 생각이 아니다. 아래의 예제와 같이 필드 구분자로 사용한 문자가 필드 안에 들어가버리면 문자가 생긴다. 각 필드를 사용하려고 파싱을 해야 하고, 느릴 뿐더러 멍청하고 오류 발생 가능성도 높다.

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



문자열은 권한을 표현하기엔 부족하다.

때로, 문자열을 사용해서 기능 접근 권한을 표현하는 경우가 있다.

아래 예제는 문자열을 사용해서 기능 접근 권한을 표현하려고 하는데 문제는 문자열이 스레드 지역 변수의 전역적인 이름 공간 이라는 것이다. 위 접근법이 통하려면 클라이언트가 제공하는 문자열 키의 유일성이 보장되어야 한다. 만일 두 클라이언트가 공교롭게 같은 지역 변수명을 사용한다면 동일한 변수를 공유하여 둘다 오류를 낸다.


1
2
3
4
5
6
7
8
9
public class ThreadLocal {
    private ThreadLocal() {}
 
    //주어진 이름이 가리키는 스레드 지역 변수의 값 설정
    public static void set(String key, Object value);
    
    //주어진 이름이 가리키는 스레드 지역 변수의 값 반환
    public static Object get(String key);
}