티스토리 뷰
반응형
문자열을 쓰지 않아야 할 사례
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();
}
결론
더 적합한 데이터 타입이 있거나 새로 작성할 수 있다면, 문자열 대신 그것을 써라.
문자열은 잘못 사용하면 번거롭고 덜 유연하고 느리고 오류 가능성이 크다.
문자열을 잘못 사용하는 흔한 예로는 기본 타입, 열거 타입, 혼합 타입이 있다.
반응형
'Java > Effective Java' 카테고리의 다른 글
[Effective Java] 64.객체는 인터페이스를 사용해 참조하라 (0) | 2022.04.12 |
---|---|
[Effective Java] 63.문자열 연결은 느리니 주의하라 (0) | 2022.04.08 |
[Effective Java] 61.박싱된 기본 타입보다는 기본 타입을 사용하라 (0) | 2022.04.08 |
[Effective Java] 60.정확한 답이 필요하다면 float와 double은 피하라 (0) | 2022.04.06 |
[Effective Java] 59.라이브러리를 익히고 사용하라 (0) | 2022.04.06 |
댓글