본문 바로가기

전체 글20

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.
브릿지 패턴(Bridge Pattern) 구조 패턴 중 하나인 브릿지 패턴은 추상적인 것(기능)과 구체적인 것(구현)을 분리하여 연결하는 패턴입니다. 구조와 글만 보면 이해하기 어려우니 예제를 통해 자세히 알아보겠습니다. 먼저 카드 결제라는 새로운 기능을 추가하는 요구사항이 생겼습니다. 현재는 FirstBank라는 카드사의 카드만으로 결제가 가능한 상태입니다. 코드를 완성하고 배포를 해서 카드 결제를 잘 사용하고 있었습니다. 서비스가 성공해서 다른 bank의 카드도 결제할 수 있도록 수정해달라는 요구사항이 생겼습니다. public void pay(int index) { if (index == 1) { System.out.println("first bank 카드 결제"); } else if (index == 2) { System.out.print.. 2022. 1. 29.
Item32. 제네릭과 가변인수를 함께 쓸 때는 신중하라 1. 가변 인수(varargs) 메서드와 제네릭은 잘 어울리지 않는다. static void dangerous(List... stringLists) { List integerList = Arrays.asList(42); Object[] objects = stringLists; objects[0] = integerList; String s = stringLists[0].get(0); // ClassCastException } 컴파일 된 class 파일 static void dangerous(List... stringLists) { List integerList = Arrays.asList(42); stringLists[0] = integerList; String s = (String)stringLists[.. 2022. 1. 23.