Skip to content

Latest commit

 

History

History
64 lines (43 loc) · 2.18 KB

62_다른_타입이_적절하다면_문자열_사용을_피하라_황준호.md

File metadata and controls

64 lines (43 loc) · 2.18 KB

아이템62. 다른 타입이 적절하다면 문자열 사용을 피하라

자바는 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을 잘못 사용하지 말자.