아이템 62. 다른 타입이 적절하다면 문자열 사용을 피하라. 다른 타입이 적절하면, 문자열 대신 새로운 타입을 만들어라. 문자열은 정말로 문자열을 표현할 때만 사용해라 문자열은 다른 값 타입을 대신하기에 적절하지 않음. 문자열은 열거 타입을 대신하기에 적합하지 않음. 문자열은 혼합 타입을 대신하기에 적합하지 않음. 문자열은 권한을 표현하기에 적합하지 않음. 문자열은 문자열인 경우에만 사용해라. 자바에서는 문자열을 잘 지원해준다. 그래서 사람들은 애매할 때는 문자열을 이용해서 표현을 할 때가 많다. 하지만 입력받을 데이터가 진짜 '문자열'을 의미할 때만 문자열을 사용해야하고 그렇지 않다면 적절한 다른 타입을 사용해야만 한다. 받은 데이터가 수치형 → int, float, BigInteger 등 적당한 수치..
아이템 61. 박싱된 기본 타입보다는 기본 타입을 사용하라. 기본 타입(int), 박싱 기본 타입(Integer)은 오토 박싱 / 오토 언박싱을 통해서 구분되지 않고 사용될 수 있음. 기본 타입, 박싱 기본 타입은 다음 차이점이 있음. 기본 타입은 값만 가짐. 박싱 기본 타입은 식별성(identity)도 가짐. → '=='으로 비교하면 같은 객체인지 확인함. 기본 타입은 언제나 유효함. 박싱 기본 타입은 유효하지 않을 수 있음. → 박싱 기본 타입은 Null 값을 전달할 수 있음. 기본 타입이 메모리 / 시간적으로 더 효율적임. 박싱 기본 타입은 연산 시, 오토 박싱 / 오토 언박싱 시에 오버로딩이 발생하기 때문임. 기본 타입과 박싱된 기본 타입의 차이 자바는 오토 박싱 / 오토 언박싱 기능을 제공해주기..
아이템 64. 객체는 인터페이스를 사용해 참조하라. 적합한 인터페이스만 있다면 매개변수, 반환값, 변수, 필드를 전부 인터페이스 타입으로 선언. 구현체만 간단히 갈아끼울 수 있기 때문에 코드 변화가 좀 더 유연하다. 클래스 타입을 사용해도 되는 경우. 적합한 인터페이스가 없는 경우. 예를 들면 record 같은 값 클래스. 클래스 기반으로 작성된 프레임워크가 제공하는 객체들. 예를 들면 OutputStream 같은 것들. 인터페이스에 없는 특별한 메서드를 제공하는 클래스 이런 메서드를 너무 많이 사용할 경우, 구현체를 바꾸는 것이 어려워짐. 가급적이면 덜 의존하도록 해야함. 적합한 인터페이스가 없다면, 클래스의 계층구조 중 필요한 기능을 만족하는 가장 추상적인(상위) 클래스를 사용하자. 코드의 모든 곳을..
아이템 63. 문자열 연결은 느리니 주의하라 String은 불변 객체다. 문자열 덧셈으로 String끼리 연결하면 각 문자열의 값을 복사한 후 붙여야 함. 따라서 문자열 n개를 잇는 시간은 n^2에 비례하게 됨. 문자열 연결을 빠르게 하기 위해서는 Builder의 append(), toString()을 이용하면 됨. 문자열 n개를 잇는데 필요한 시간은 O(n^2)임. 문자열(String)은 불변 객체다. 따라서 문자열끼리 잇는 연산을 하려면, 각 문자열의 모든 내용을 복사한 다음에 새로운 객체를 만드는 작업을 해야한다. 이 연산의 시간복잡도는 O(n^2)이다. 문자열 덧셈의 문제점을 해결하기 위해서는 StringBuilder의 append(), toString() 연산을 이용하면 된다. public cl..
아이템 52. 다중정의는 신중히 사용하라. 다중정의(Overloading)된 메서드는 컴파일 시점에 어느 메서드가 호출될지 결정된다. 재정의된(Overriding)된 메서드는 런타임 시점에 객체 타입으로 어느 메서드가 호출될지 결정된다. 다중정의는 사용하지 않는 것이 좋다. 사용하는 쪽에서 어떤 메서드가 사용될지 추론하기 어렵기 때문이다. 매개변수 수가 같은 다중정의는 가급적이면 사용하면 안됨. 대안 다중정의 대신 이름을 다르게 지어주면 됨. 생성자라면서 팩토리 메서드를 사용하면 됨. 다중정의 어쩔 수 없는 경우 매개변수 수가 같은 다중정의라도, 각 매개변수가 근본적으로 다른 경우라면 어떤 메서드가 호출될지 정확히 추론할 수 있음. 근본적으로 다른 경우는 서로 형변환 할 수 없는 경우를 의미함. 허나 오..