본문 바로가기

effective java5

Item 53. 가변인수는 신중히 사용하라 가변인수 메서드는 명시한 타입의 인수를 0개 이상 받을 수 있습니다. private static int sum(int... args) { int[] arg = new int[3]; int sum = 0; for (int arg : args) { sum += arg; } return sum; }sum(1, 2, 3)은 6을 리턴, sum()은 0을 리턴합니다. 최솟값을 찾는 메서드는 인수가 최소 1개 이상이어야 할 수 있습니다. private static int min(int... args) { if (args.length == 0) { throw new IllegalArgumentException("인수가 1개 이상 필요합니다."); } int min = args[0]; for (int arg : arg.. 2022. 3. 6.
Item 52. 다중정의는 신중히 사용하라 public class CollectionClassifier { public static String classify(Set s) { return "집합"; } public static String classify(List list) { 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 : collections) { System.out.println(class.. 2022. 3. 6.
Item46. 스트림에서는 부작용 없는 함수를 사용하라 스트림 패러다임 - 계산을 일련의 변환으로 재구성하는데 이때 각 변환 단계는 가능한 한 이전 단계의 결과를 받아 처리하는 순수함수여야 한다. 순수 함수 - 입력만이 결과에 영향을 주는 함수 (다른 상태를 참조하지 않고 다른 상태를 변경하지 않음) 즉, 스트림을 올바르게 사용하려면 스트림 연산에 건네는 함수 객체는 모두 부작용이 없어야 한다. 스트림 패러다임을 잘못 이해하고 사용한 경우 public static void main(String[] args) { Map freq = new HashMap(); Stream words = Arrays.asList("a", "b", "c", "a").stream(); words.forEach(word -> { freq.merge(word, 1L, Long::sum).. 2022. 3. 6.
Item 35. ordinal 메서드 대신 인스턴스 필드를 사용하라 대부분의 열거 타입 상수는 하나의 정숫값에 대응 (0부터 할당됨) enum Direction { TOP, RIGHT, BOTTOM, LEFT } public static void main(String[] args) { if (Direction.BOTTOM.ordinal() == 2) { System.out.println("아래"); } } 모든 열거 타입은 해당 상수가 그 열거 타입에서 몇 번째 위치인지를 반환하는 ordinal이라는 메서드를 제공 @RequiredArgsConstructor @Getter enum Direction { TOP(0), RIGHT(1), BOTTOM(2), LEFT(3); private final int value; } public static void main(String.. 2022. 3. 6.