자바는 String
을 잘 지원해준다. 때문에 이를 의도하지 않은 용도로 사용하는 경우가 많다.
다음의 경우에는 String
을 사용하지 말자.
-
다른 타입을 대신하지 말자
- 입력받을 데이터가 진짜 문자열일때만
String
으로 받는게 좋다 - 수치형이라면
int
,float
,BigInteger
으로 변환해야 한다 - 예/아니오라면 열거타입이나
boolean
으로 변환해야 한다
- 입력받을 데이터가 진짜 문자열일때만
-
열거 타입을 대신하지 말자
- 상수를 열거할때는 열거타입을 쓰자
-
혼합타입을 대신하지 말자
-
//따라하지 말 것! String compoundKey = className + "#" + i.next();
-
#
이className
혹은i.next
에 쓰인다면 혼란을 유발한다. -
각 요소를 개별로 접근하려면 파싱해야 한다 -> 느리고 귀찮다
-
전용 클래스를 따로 만드는 게 낫다
-
-
권한을 표현하는데에 사용하지 말자
-
권한이란?
-
예) 스레드 지역변수 기능 설계
-
//AS-IS : 클라이언트가 제공한 문자열 key로 스레드별 지역변수를 식별 public class ThreadLocal { private ThreadLocal() { } public static void set(String key, Object value) {...} public static Object get(String key) {...} }
- 스레드 구분용 문자열 key가 전역 네임스페이스에서 공유된다
- 여러 클라이언트가 변수를 공유하게 될 수도 있다 (보안에 취약하다)
-
//TO-BE : 스레드 지역변수가 위조할 수 없는 키(권한) 그 자체로 구현 public final class ThreadLocal<T> { public ThreadLocal() {...} public void set(T value) {...} public T get() {...} }
- 여러 클라이언트가 공유할 수 없다
- 추가로 매개변수화 타입을 사용하여 타입안정성을 확보했다
-
-
별개의 클래스를 만들자!
-
String
은 훌륭하지만 진짜 문자열을 나타낼 때 사용하면 좋다. String
을 잘못 사용하지 말자.