본문 바로가기

이펙티브 자바

(61)
[이펙티브 자바] 아이템 61. 박싱된 기본 타입보다는 기본 타입을 사용하라 자바의 데이터 타입은 크게 두 가지로 나눌 수 있다. int, double, boolean 같은 기본 타입과 String, List 같은 참조 타입이다. 각각의 기본 타입에는 대응하는 참조 타입이 하나씩 있으며, 이를 박싱된 기본 타입이라고 한다. int, double, boolean에 대응하는 박싱된 기본 타입은 Integer, Double, Boolean 이다. 박싱된 기본 타입에 == 연산자를 사용하면 오류가 일어난다.기본 타입과 박싱된 기본 타입을 혼용한 연산에서는 박싱된 기본 타입의 박싱이 자동으로 풀린다. 핵심 정리 : 기본 타입과 박싱된 기본 타입 중 하나를 선택해야 한다면 가능하면 기본 타입을 사용하라. 기본 타입은 간단하고 빠르다. 박싱된 기본 타입을 써야 한다면 주의를 기울이자. 오토박..
[이펙티브 자바] 아이템 60. 정확한 답이 필요하다면 float와 double은 피하라 float와 double 타입은 특히 금융 관련 계산과는 맞지 않는다.float과 double타입은 근사치 계산을 하기 때문에 정확한 값을 보장하지 않는다. 특히 금융 계산과 같이 정밀도가 중요한 작업에서는 부적합하다.금융 계산에는 BigDecimal, int 혹은 long을 사용해야 한다.  핵심 정리 : 정확한 답이 필요한 계산에는 float나 double을 피하라. 소수점 추적은 시스템에 맡기고, 코딩 시의 불편함이나 성능 저하를 신경 쓰지 않겠다면 BigDecimal을 사용하라. BigDecimal이 제공하는 여덟가지 반올림 모드를 이용하여 반올림을 완벽히 제어할 수 있다. 법으로 정해진 반올림을 수행해야 하는 비즈니스 계산에서 아주 편리한 기능이다. 반면, 성능이 중요하고 소수점을 직접 추적할 ..
[이펙티브 자바] 아이템 59. 라이브러리를 익히고 사용하라 표준 라이브러리를 사용하면 그 코드를 작성한 전문가의 지식과 여러분보다 앞서 사용한 다른 프로그래머들의 경험을 활용할 수 있다. 자바 프로그래머라면 적어도 java.lang, java.util, java.io 와 그 하위 패키지들에는 익숙해져야 한다. 핵심정리 : 바퀴를 다시 발명하지 말자. 아주 특별한 나만의 기능이 아니라면 누군가 이미 라이브러리 형태로 구현해놓았을 가능성이 크다. 그런 라이브러리가 있다면, 쓰면 된다. 있는지 잘 모르겠다면 찾아보라. 일반적으로 라이브러리의 코드는 여러분이 직접 작성한 것보다 품질이 좋고, 점차 개선될 가능성이 크다. 여러분의 실력을 폄하하는 게 아니다. 코드 품질에도 규모의 경제가 적용된다. 즉, 라이브러리 코드는 개발자 각자가 작성하는 것보다 주목을 훨씬 많이 받..
[이펙티브 자바] 아이템 58. 전통적인 for 문보다는 for-each 문을 사용하라 for-each문을 사용할 경우 가독성이 향상, 오류 감소, 유지보수가 용이해진다. for-each문을 사용할 수 없는 경우가 있다.선택된 원소를 제거해야 할 때원소의 일부 혹은 전체를 수정해야 할 때여러 컬렉션을 병렬로 순회해야 할 때위 경우에는 전통적인 for문을 사용하는게 낫다. 핵심 정리 : 전통적인 for 문과 비교했을 때 for-each 문은 명료하고, 유연하고, 버그를 예방해준다. 성능 저하도 없다. 가능한 모든 곳에서 for문이 아닌 for-each 문을 사용하자.
[이펙티브 자바] 아이템 57. 지역변수의 범위를 최소화하라 지역변수의 범위를 최소화하는 것은 코드의 가독성을 높이고, 유지보수를 쉽게 하며, 오류를 줄이는 데 도움이 된다. 지역변수의 범위를 최소화 하는 방법 : 가장 처음 쓰일 때 선언하기그리고 모든 지역변수는 선언과 동시에 초기화해야 한다.메서드를 작게 유지하고 한 가지 기능에 집중하기.
[이펙티브 자바] 아이템 56. 공개된 API 요소에는 항상 문서화 주석을 작성하라 API를 쓸모 있게 하려면 잘 작성된 문서도 곁들여야 한다. API를 올바로 문서화하려면 공개된 모든 클래스, 인터페이스, 메서드, 필드 선언에 문서화 주석을 달아야 한다. 메서드용 문서화 주석에는 해당 메서드와 클라이언트 사이의 규약을 명료하게 기술해야 한다. 제네릭 타입이나 제네릭 메서드를 문서화할 때는 모든 타입 매개변수에 주석을 달아야 한다./** * 제네릭 스택 클래스. * * @param 스택에 저장할 요소의 타입 */public class GenericStack { private List elements = new ArrayList(); /** * 스택에 요소를 추가합니다. * * @param element 추가할 요소 */ public void..
[이펙티브 자바] 아이템 55. 옵셔녈 반환은 신중히 하라 Opional을 반환하는 메서드에서는 절대 null을 반환하지 말자.컬렉션, 스트림, 배열, 옵셔널 같은 컨테이너 타입은 옵셔널로 감싸면 안 된다.옵셔널을 반환값이 아닌 필드나 다른 용도로 사용하지 말자.  메서드 반환 타입을 T 대신 Optional로 선언해야 하는 기본 규칙 : 결과가 없을 수 있으며, 클라이언트가 이 상황을 특별하게 처리해야 한다면 Optional를 반환한다. 핵심 정리 : 값을 반환하지 못할 가능성이 있고, 호출할 때마다 반환값이 없을 가능성을 염두에 둬야하는 메서드라면 옵셔널을 반환해야 할 상황일 수 있다. 하지만 옵셔널 반환에는 성능 저하가 뒤따르니, 성능에 민감한 메서드라면 null을 반환하거나 예외를 던지는 편이 나을 수 있다. 그리고 옵셔널을 반환값 이외의 용도로 쓰는 경..
[이펙티브 자바] 아이템 54. null이 아닌, 빈 컬렉션이나 배열을 반환하라 메서드에서 컬렉션이나 배열을 반환할 때, null이 아닌 빈 컬렉션이나 빈 배열을 반환해야 하는데 그 이유는 호출자 코드 단순화 : 호출자가 null을 처리할 필요 없이 바로 컬렉션이나 배열을 사용할 수 있다.널 포인터 예외 방지 : null을 반환할 경우 이를 처리하지 않아 발생할 수 있는 NullPointerException을 방지할 수 있다.일관성 유지 : 항상 같은 타입의 객체를 반환하므로 메서드 사용이 일관되고 예측가능해진다. 핵심 정리 : null이 아닌, 빈 배열이나 컬렉션을 반환하라. null을 반환하는 api는 사용하기 어렵고 오류 처리 코드도 늘어난다. 그렇다고 성능이 좋은 것도 아니다.