주어진 객체를 표현할 적절한 인터페이스가 있는지 찾아서 그 인터페이스로 참조하면 더 유연하고 세련된 프로그램을 만들 수 있다. 🔎 인터페이스 타입 선언 vs 클래스 타입 선언 앞서, 아이템 51에서 매개변수의 타입으로는 클래스보다 인터페이스가 더 낫다고 했다. 매개변수로 적합한 인터페이스가 있다면 이를 구현한 클래스가 아닌 그 인터페이스를 직접 사용한다. 여기서 더하여, 적합한 인터페이스만 있다면 매개변수뿐만 아니라 반환 값, 변수, 필드를 전부 인터페이스 타입으로 선언하는 것이 좋다. 객체의 실제 클래스를 사용해야 할 상황은 오직 생성자로 생성할 때뿐이다. 예를 들어, LinkedHashSet을 선언하는 두 가지 방법이 있다. /* 좋은 예 : 인터페이스를 타입으로 사용 */ Set sonSet = n..
작고 크기가 고정된 객체의 문자열은 문자열 연결 연산자(+)를 사용해도 되지만, 많은 문자열을 연결할 때는 StringBuilder를 사용하자 🔎 문자열 연결 연산자(+) vs StringBuilder, append() 문자열 연결 연산자(+)는 여러 문자열을 하나로 합쳐주는 편리한 수단이다. 한 줄짜리 출력 값이나 작고 크기가 고정된 객체의 문자열 표현을 만들 땐 편리하고 좋지만, 문자열 연결 연산자로 문자열 n개를 잇는 시간은 n^2에 비례한다. 즉, 엄청엄청엄청엄청 느리다,,,,,, 예를 들어, 다음과 같이 청구서의 품목(item)을 전부 하나의 문자열로 연결하는 코드를 작성해보자. /* 문자열 연결 연산자(+) 사용 */ public String statement() { String result ..
문자열은 잘못 사용하면 번거롭고, 덜 유연하고, 느리고, 오류 가능성도 크다. 문자열은 워낙 흔하고, 자바가 잘 지원해주어 쉽게 쓸 수 있지만, 원래 의도하지 않은 용도로 쓰이는 경향이 있다. 🚫 문자열을 쓰지 않아야 하는 사례 기본 타입이든 참조 타입이든 적절한 값 타입이 있다면 그것을 사용하고, 없다면 새로 하나 작성하라. 문자열은 다른 값 타입을 대신하기에 적합하지 않다. 따라서 입력받을 데이터가 진짜! 문자열일 때만 문자열로 받는다. 받은 데이터가 수치형이라면 -> int, float, BigInteger 예/아니오 질문의 답이라면 -> boolean이나 적절한 열거 타입 문자열은 열거 타입을 대신하기에 적합하지 않다. 상수를 열거할 때는 문자열보다 열거 타입이 월등히 낫다. 문자열은 혼합 타입을..
기본 타입과 박싱된 기본 타입 중 하나를 선택해야 한다면 가능하면 기본 타입을 사용하라. 🔎 기본타입과 박싱된 기본 타입 자바의 데이터 타입은 크게 기본 타입과 박싱된 기본 타입으로 나눌 수 있다. 각각의 기본 타입에는 대응하는 참조 타입이 하나씩 있으며, 이를 박싱된 기본 타입이라고 한다. 예를 들어, 기본 타입의 int, double, boolean이 있으면 이에 대응하는 박싱된 기본 타입은 Integer, Double, Boolean이다. int - Integer double - Double boolean - Boolean long - Long ... 🔥 차이점 기본 타입과 박싱된 기본 타입은 오토박싱과 오토언박싱 덕분에 두 타입을 크게 구분하지 않고 사용할 수는 있다. 그럼에도 불구하고 크게 3가..