자바독 (Javadoc) API를 쓸모 있게 하기 위해 문서화가 잘 되어있어야함 API 문서화 유틸리티 소스코드 파일에서 문서화 주석(자바독 주석)이라는 특수한 형태로 기술된 설명을 추려 API 문서로 변환해준다. 자바 프로그래머라면 자바독 주석을 작성하는 규칙을 알아야함 Javadoc 주석 유의사항 API를 올바로 문서화하기 위해선 공개된 모든 클래스, 인터페이스, 메서드, 필드 선언에 문서화 주석을 달아야함 주석을 달지 않으면 그저 공개된 API 요소들의 선언만을 나열 공개 클래스는 기본 생성자에 주석을 달 수 있는 방법이 없으니 절대 기본 생성자를 사용하지마라. 유지보수까지 고려한다면 공개되지 않은 것들에도 문서화 주석을 달아야할 것이다. 메서드용 문서화 주석에는 해당 메서드와 클라이언트 사이의 규..
자바8 이전 자바8 이전에는 메서드가 특정 조건에서 값을 반환할 수 없을 때 두가지 선택지가 있었다. 예외 던지기 예외는 진짜 예외적인 상황에서만 사용해야함 예외를 생성할 때 스택 추적 전체를 캡쳐하므로 비용이 큼 반환 타입이 객체 참조라면 null 반환 클라이언트에서 null을 반환하는 메서드를 호출할 때 추가적으로 null 처리 코드를 작성해야함 //컬렉션에서 최대값을 구함 - 컬렉션이 비었으면 예외 던지기 public static E max(Collection c) { if (c.isEmpty()) throw new IllegalArgumentException("Empty collection"); E result = null; for (E e : c) if (result == null || e.co..
빈 컬렉션 반환 //컬렉션이 비었다면 null을 반환 -> 따라하지 말 것 public List getCheeses() { return cheesesInStock.isEmpty() ? null : new ArrayList(cheesesInStock); } 만약 위와 같이 코드를 작성하였다면, 클라이언트는 이 null 상황을 처리하는 코드를 추가로 작성해야한다. List chesses = shop.getCheeses(); if(cheeses != null && chesses.contatins(Cheese.STILTON)) System.out.println("ok"); 컬렉션이나 배열이 비었을 때 null을 반환하는 메서드를 사용할 때면 항상 이렇게 방어 코드를 넣어줘야 한다. 만약 방어 코드를 까먹으면 오..
가변인수 메서드 명시한 타입의 인수를 0개 이상 받을 수 있는 메서드 가변인수 메서드를 호출하면 먼저 인수 개수와 길이가 같은 배열을 만들고 이 배열에 저장하여 가변인수 메서드에 건네줌 static int sum(int... args) { int sum = 0; for (int arg : args) { sum += arg; } return sum; } // 인수가 꼭 1개 이상이어야할때 static int min(int firstArg, int... remainArgs) { int min = firstArg; for (int arg : remainArgs) { if(arg < min) min = arg; } return min; } 가변인수는 인수 개수가 정해지지 않았을 때 매우 유용함. ex) prin..
//컬렉션 분류기 - 오류 ! 이 프로그램은 무엇을 출력할까? public class CollectionClassifier { public static String classify(Set s) { return "집합"; } public static String classify(List lst) { return "리스트"; } public static String classify(Collection c) { return "그 외"; } public static void main(String[] args) { Collection[] collections = { new HashSet, new ArrayList(), new HashMap().values() }; for (Collection c : collect..
API 설계 요령 메서드 이름을 신중히 짓자 편의 메서드를 너무 많이 만들지는 말자 매개변수 목록은 짧게 유지하자 매개변수의 타입으로는 클래스보다는 인터페이스가 더 낫다 boolean 보다는 원소 2개짜리 열거 타입이 낫다 메서드 이름을 신중히 짓자 항상 표준 명명 규칙을 따르자 [아이템68] 이해할 수 있고 같은 패키지의 다른 이름들과 일관되게 지어라 개발자 커뮤니티에서 널리 받아들여지는 이름을 사용 애매하면 자바 라이브러리 API 가이드를 참조 편의 메서드를 너무 많이 만들지 말자 메서드가 너무 많은 클래스는 익히고, 사용하고, 문서화하고, 테스트하고, 유지보수하기 어려움 인터페이스도 메서드가 너무 많으면 구현하는 사람과 사용하는 사람이 모두 힘들음 클래스나 인터페이스는 자신의 기능을 완벽히 수행하는..
자바는 C, C++ 와 다르게 메모리 충돌 오류에서 안전하다. 자바로 작성한 클래스는 항상 그 불변식이 지켜진다. but 클라이언트가 불변식을 깨뜨릴 수 있다고 가정하고 방어적 프로그래밍을 해야함 불변식을 깨뜨리는 예시 public final class Period { private final Date start; private final Date end; public Period(Date strart, Date end) { if (start.compareTo(end) > 0) throw new IllegalArgumentException( start + "가 " + end + "보다 늦다."); this.start = start; this.end = end; } public Date start() { ..
메서드와 생성자 대부분은 입력 매개변수 값이 특정 조건을 만족하길 바란다. 이런 제약은 반드시 문서화하고 메서드 몸체가 시작되기 전에 검사해야한다. 오류는 가능한 빨리 잡아야한다. 매개변수 검사를 제대로 하지 못했을 시 문제점 실패 원자성(failure atomicity)을 어기는 결과 초래 : 메서드 수행 중간에 모호한 예외를 던지며 실패하거나 잘 수행되더라도 잘못된 결과를 반환할 수 있다. 실패 원자성 : 호출된 메서드가 실패하더라도 해당 객체는 호출 전의 상태를 유지해야한다. 매개변수 제약을 어길 시 발생하는 예외 문서화 public이나 protected 메서드는 매개변수 값이 잘못됐을 때 던지는 예외를 문서화해야한다. (@throws 자바독 태그 사용) 보통 IllegalArgumentExcepi..