전체 카테고리361 [Effective Java] 아이템54 null이 아닌, 빈 컬렉션이나 배열을 반환하라 ■ null이 아닌, 빈 컬렉션이나 배열을 반환하라 다음은 치즈를 얻어올 때 비어있으면 null을 반환하는 코드이다. public List getCheeses() { return cheesesInStock.isEmpty() ? null : new ArrayList(cheesesInStock); } 위의 코드처럼 작성하면 클라이언트는 null 상황을 처리하는 코드를 추가로 작성해야한다. Shop shop = new Shop(); List cheeses = shop.getCheeses(); if (cheeses != null && cheeses.contains(Cheese.STILTON)) System.out.println("치즈 획득!"); 컬렉션이나 배열 같은 컨테이너가 비었을 때 null을 반환하는 메.. 2021. 7. 12. [Effective Java] 아이템53 가변인수는 신중히 사용하라 ■ 가변인수는 신중히 사용하라 가변인수 메서드는 명시한 타입의 인수를 0개 이상 받을 수 있다. 인수의 개수와 길이가 같은 배열을 만들고 인수들을 배열에 저장하여 가변인수 메서드에 건네준다. 아래 코드는 최솟값을 찾는 메서드인데 인수를 0개만 받을 수 있도록 설계하는건 좋지 않다. 왜냐하면 인수가 0개일 때 컴파일 타임이아닌 런타임 때 실패하기 때문이다. static int min(int... args) { if (args.length == 0) throw new IllegalArgumentException("인수가 1개 이상 필요합니다."); int min = args[0]; for (int i = 1; i < args.length; i++) if (args[i] < min) min = args[i];.. 2021. 7. 12. [Effective Java] 아이템52 다중정의는 신중히 사용해라 ■ 다중정의와 호출 예제 다중정의(Overloading)는 어느 메서드가 호출될 지 컴파일 타임에 정해진다. 아래 코드를 실행해보면 직관과 어긋나느 결과를 볼 수 있다. import java.math.BigInteger; import java.util.*; 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) { Col.. 2021. 7. 4. [Effective Java] 아이템51 메서드 시그니처를 신중히 설계하라 ■ 메서드 이름을 신중히 짓자 항상 표준 명명 규칙을 따라야하고, 같은 패키지에 속한 다른 이름들과 일관되게 짓는게 최우선 목표이다. 그 다음 목표는 개발자 커뮤니티에서 널리 받아들여지는 이름을 사용하는 것이다. ■ 편의 메서드를 너무 많이 만들지 말자 모든 메서드는 각각 자신의 소임을 다해야한다. 메서드가 너무 많은 클래스는 익히고, 사용하고, 문서화하고, 테스트하고 유지보수하기 어렵다. 메서드가 너무 많으면 이를 구현하는 사람과 사용하는 사람 모두를 고통스럽게한다. ■ 매개 변수 목록은 짧게 유지하자 4개 이하가 좋다. 특히 같은 타입의 매개변수가 연달아 여러개 나오는 경우가 특히 해롭다. 순서를 바꿔 입력해도 그대로 컴파일되고 실행된다. 첫번째로 여러 메서드로 쪼개서 매개변수를 줄이는 방법이있다. .. 2021. 7. 4. [Effective Java] 아이템50 적시에 방어적 복사본을 만들라 ■ 자바의 안전성 자바는 C, C++에서 흔히 나타나는 버퍼 오버런, 배열 오버런, 와일드 포인터 같은 메모리 충돌 오류에서 안전하다. 하지만 다른 클래스로부터의 침범을 아무런 노력없이 막을 수 없다. 클라이언트가 여러분의 불변식을 꺠뜨리려 혈안이 되어 있다고 가정하고 방어저긍로 프로그래밍해야 한다. ■ 불변식을 지키지 못하는 클래스 아래 코드는 언뜻보면 불변식을 지킨 코드 처럼 보인다. package ch8.hoon.item50; import java.util.Date; public class Period { private final Date start; private final Date end; public Period(Date start, Date end) { if(start.compareTo(en.. 2021. 7. 4. [Effective Java] 아이템49 매개변수가 유효한지 검사하라 ■ 매개 변수가 유효한지 검사하라 메서드와 생성자 대부분은 입력 매개변수의 값이 특정 조건을 만족하기를 바란다. 이런 제약은 반드시 문서화해야 하며 메서드 몸체가 시작되기전에 검사해야 한다. 안그러면 실행되다가 예외가 발생할 수 있고, 더 나쁜 경우는 잘못된 값을 반환할 수 있다. public, protected 메서드는 매개변수 값이 잘못됐을 때 던지는 예외를 문서화 해야한다. /** * Returns a BigInteger whose value is {@code (this mod m}). This method * differs from {@code remainder} in that it always returns a * non-negative BigInteger. * * @param m the mod.. 2021. 7. 4. 이전 1 ··· 9 10 11 12 13 14 15 ··· 61 다음