Java/모던자바인액션요약
-
컬렉션 API 개선Java/모던자바인액션요약 2022. 9. 6. 00:01
거의 모든 자바 애플리케이션에서 컬렉션을 사용합니다. 하지만 컬렉션을 에러를 유발하는 여러 단점들이 존재합니다. 자바 8,9에 추가되어 우리의 삶을 편리하게 만들어 줄 새로운 컬렉션 API 기능들을 배워보는 시간입니다. 리스트 만들기 List friends = new ArrayList(); friends.add("element1"); friends.add("element2"); friends.add("element3"); Arrays.asList() 팩토리 메서드를 이용하면 코드를 간결하게 줄일 수 있다. List friends = Arrays.asList("element1","element2","element3"); 마찬가지로 List.of 팩토리 메서드를 이용해서도 간단하게 리스트를 만들 수 있습니다..
-
병렬 데이터 처리와 성능Java/모던자바인액션요약 2022. 8. 29. 00:01
개요 자바 7 이전에는 데이터 컬렉션을 병렬로 처리하기 어려웠습니다. 자바 7은 포크/조인 프레임워크 기능을 제공하여 쉽게 병렬화를 수행하며 에러를 최소화할 수 있도록 합니다. 하지만 자바 8의 스트림을 사용하면 순차 스트림을 병렬 스트림으로 자연스럽게 바꿀 수 있습니다. (동기화 문제 , 쓰레드는 몇 개로 지정할지 등을 고민하지 않아도 됩니다.) 하지만 내부 처리과정이 어떻게 이루어지는지 알아야 스트림을 잘못 사용하는 상황을 피할 수 있습니다. 병렬 스트림 parallelStream을 호출하여 병렬 스트림을 만들 수 있습니다. 병렬 스트림이란 각각의 스레드에서 스트림을 처리할 수 있도록 여러 청크로 분할한 스트림입니다. 이때 sequential 메서드를 사용하면 병렬 스트림을 순차 스트림으로 바꿀 수도..
-
스트림으로 데이터 수집Java/모던자바인액션요약 2022. 8. 23. 00:01
개요 만약 통화별로 트랜잭션을 그룹화하기 위해서 코드를 작성하려면 어떻게 해야 할까요? Map transactionByCurrencies = new HashMap(); //트렌젝션 리스트에서 하나씩 꺼내옴 for(Transaction transaction : transactions){ Currency currency = transaction.getCurretncy(); List transactionForCurrency = transactionByCurrencies.get(currency); if(transactionForCurrency == null){ transactionForCurrency = new ArrayList(); transactionByCurrencies.put(currency, trans..
-
스트림 활용Java/모던자바인액션요약 2022. 8. 18. 00:01
필터링 filter 메서드 스트림 인터페이스는 filter 메서드를 지원합니다. filter 메서드는 프레디케이트를 인수로 받아 프레디케이트와 일치하는 모든 요소를 포함하는 스트림을 반환합니다.(중간 연산) List vegetarianMenu = menu.stream() .filter(Dish::isVegetarian) .collect(toList()); distinct 메서드 중복을 필터링합니다. List numbers = Arrays.asList(1, 2, 3, 1, 2, 3, 4, 5, 6); numbers.stream() .filter(i -> i % 2 == 0) .distinct() .forEach(System.out::println); 프레디케이트를 이용한 슬라이싱 takeWhile 활용 3..
-
스트림 소개Java/모던자바인액션요약 2022. 8. 15. 00:01
스트림 이전의 세상 자바에서는 Collection을 만들고 처리하는 과정을 포함합니다. 대부분의 데이터베이스들은 다음과 같은 명령어를 통해 해결합니다. SELECT name FROM dishes WHERE calorie < 400 하지만 자바 컬렉션은 위와 같이 처리하지 못하고 컬렉션의 각 요소를 반복하면서 모든 컬렉션의 값을 비교하는 방식으로 사용해야 합니다. List result = new ArrayList(); for(Dish cur : dishes){ if(cur.calorie < 400){ result.add(cur.name); } } 또한 성능을 높이기 위해 멀티코어 아키텍처를 활용하려면 병렬로 컬렉션 요소를 처리해야 합니다. 이때 코드는 복잡해지고 디버깅도 어려워집니다. 스트림의 등장 스트림..
-
람다 표현식Java/모던자바인액션요약 2022. 8. 10. 00:01
람다 표현식이란? 익명 클래스처럼 이름이 없는 함수면서 메서드를 인수로 전달할 수 있습니다. 메서드를 하나의 식으로 표현합니다. 메서드 이름과 반환 값이 없을 수 있기 때문에 '익명 함수'라고 합니다. 람다란? 수학 미적분학에 뿌리를 두고 있으며 함수 추상화에 기반한 계산을 표현하기 위한 수학 논리입니다. 첫번째 함수 x에 3을 넣게 되면 결과로 9가 나올 것을 예상할 수 있습니다. 람다표현식이 없었던 기능들을 새롭게 제공하지는 않지만 간결한 방식으로 코드를 전달할 수 있습니다. 람다 표현식의 예시 기존의 코드 Comparator byWeight = new Comparator() { @Override public int compare(Apple o1, Apple o2) { return o1.getWeig..
-
동작 파라미터화 코드 전달하기Java/모던자바인액션요약 2022. 8. 6. 00:01
동작 파라미터화란? 아직은 어떻게 실행할 것인지 결정하지 않은 코드 블록을 의미합니다. 등장 배경 어떤 상황에서 일을 하든 소비자의 요구사항을 항상 바뀔 수 있습니다. 농부가 재고목록 조사를 쉽게 할 수 있도록 애플리케이션을 만든다고 가정해보겠습니다. 초기의 농부의 요구사항은 다음과 같습니다. "녹색 사과를 찾고 싶어요" 하지만 다음날에는 요구사항이 바뀝니다. "150그램 이상인 사과를 모두 찾고 싶어요" 다음날에 또 요구사항이 바뀌었습니다. "150그램 이상이면서 녹색인 사과를 모두 찾을 수 있으면 좋을 것 같아요" 이런 상황에 대응하기 위해서 동작 파라미터화가 등장하게 되었습니다. 동작 파라미터화를 통해 사용자의 요구사항에 대한 변화에 가장 최소화된 비용으로 대응할 수 있습니다. 코드를 통한 예시 동..
-
자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가?Java/모던자바인액션요약 2022. 8. 5. 00:01
자바의 변화 책에서 다루면서 이후에 등장하게 될 주요한 내용들입니다. Java11에서 언급한 부분들은 책에서 다룰 수 있지 않지만 관심있으시다면 추가적으로 찾아보셔도 좋을 것 같습니다. Java8 스트림 API 메서드에 코드를 전달하는 기법(람다와 메서드 참조) 디폴트 메서드 Optional CompletableFuture LocalData, LocalTime Java9 리액티브 프로그래밍(RxJava) try-with-resource Java 11 HTTP Client(HTTP/2 지원) ZGC 람다에 대한 지역 변수에 사용 변화의 이유 간결한 코드 멀티코어 CPU 대중화와 같은 하드웨어적인 변화(멀티코어 프로세서의 쉬운 활용을 위해서) 변화의 장점 쉽게 얻을 수 있는 병렬성(synchronized 활..