지역변수의 범위를 최소화하라 아이템 15인 클래스와 멤버의 접근 권한을 최소화하라와 비슷한 맥락의 이야기이다. 지역 변수의 유효 범위를 최소화해 코드 가독성과 유지 보수성을 높이자. 오류 가능성 또한 줄어든다. 그렇다면 지역 변수의 범위를 최소화하는 방법을 알아보자. 가장 처음 쓰일때 선언하기 지역변수 범위를 최소화하는 방법 중 가장 강력한 ...
Item57 (지역변수의 범위를 최소화하라)
Item56 (공개된 API 요소에는 항상 문서화 주석을 작성하라)
공개된 API 요소에는 항상 문서화 주석을 작성하라 자바는 자바독(Javadoc)이라는 유틸리티가 API 문서를 쉽게 작성하도록 도와준다. API 문서를 쉽게 작성하도록 도와주는 도구로 Swagger도 존재한다. 각 장단점을 파악하고 선택해서 사용하면 된다. 이번 아이템에서는 기본적으로 문서화 주석의 작성 요령을 JavaDoc 기준으로 정리해보려고...
Item55 (옵셔널 반환은 신중히 하라)
옵셔널 반환은 신중히 하라 Java 8 이전에는 메서드가 특정 조건에서 값을 반환할 수 없을 때 취할 수 있는 선택지가 두 가지 있었다. 예외를 던진다. null을 던진다. (반환 타입이 객체 타입일 경우) 그러나 두 방법에는 모두 허점이 있다. 예외는 진짜 예외적인 상황에서만 사용해야 한다. 예외를 생성할 ...
Item54 (null이 아닌, 빈 컬렉션이나 배열을 반환하라)
null이 아닌, 빈 컬렉션이나 배열을 반환하라 private final List<Integer> numbers; public List<Integer> getNumbers() { if (numbers.isEmpty()) { return null; } return new ArrayList<>(numbers);...
Item53 (가변 인수는 신중히 사용하라)
가변 인수는 신중히 사용하라 가변 인수 메서드를 호출하게 되면 가장 먼저 인수의 개수와 길이가 같은 배열을 만든다. 그리고 인수들을 이 배열에 저장해 가변인수 메서드에 건네주게 된다. 동일한 타입의 여러 매개변수를 받을 수 있도록 설계된 것이다. 개수에 제한도 없고 사용도 자유롭다. 단, 이렇게 편리한 가변인수는 주의해서 사용해야 한다. 가장...
Item52 (다중 정의는 신중히 사용하라)
다중 정의는 신중히 사용하라 다중 정의는 우리가 아는 오버로딩을 뜻하는 말이다. public class CollectionClassifier { public static String classify(Set<?> s) { return "Set"; } public static String classify(List<?>...
Item51 (메서드 시그니처를 신중히 설계하라)
메서드 시그니처를 신중히 설계하라 메서드 시그니처 메서드 명 매개변수의 타입, 순서 리턴 타입과 Exception은 포함되지 않는다. API 설계 요령들을 한 번 살펴보자. 메서드 이름을 신중히 짓자 항상 표준 명명 규칙을 따라야 한다. 이해할 수 있고, 같은 패키지에 속한 다른 이름들과...
Item50 (적시에 방어적 복사본을 만들라)
적시에 방어적 복사본을 만들라 자바는 안전한 언어이다. 네이티브 메서드를 사용하지 않아 C, C++과 같이 안전하지 않은 언어에서 흔히 보는 버퍼 오버런, 배열 오버런, 와일드 포인터 같은 메모리 충돌 오류에서 안전하다. 배열 오버런이란 자바에서 배열의 경계를 벗어나는 접근을 하게되면 ArrayIndexOutOfBoundsException을 ...
Item49 (매개변수가 유효한지 검사하라)
매개변수가 유효한지 검사하라 메서드와 생성자의 대부분은 입력 매개변수의 값이 특정 조건을 만족하기를 바란다. 인덱스 값은 음수이면 안된다. 객체 참조는 null이 아니어야 한다. 이러한 제약은 반드시 문서화해야하고, 메서드 몸체가 시작되기 전에 검사해야 한다. 매개변수의 제약의 검사를 미룬다면? 메서드가 수행되는 중간에 모호한...
Item48 (스트림 병렬화는 주의해서 적용하라) + 동시성 처리 학습에 대한 생각
Effective Java의 아이템들을 보면, 그리고 추후 아이템에는 더 빈번하게 동시성 처리, 쓰레드 안전성에 대한 내용들이 나온다. 사실 백엔드 개발자 취준생의 입장에서 관련된 많은 부분들을 스프링 프레임워크 등이 도와주기 때문에 관련 내용들을 미니 프로젝트에서 직접 적용하거나 혹은 관련 문제를 겪을 일이 거의 없다고 생각한다. 그래서 관련 내...