Java
-
스트림으로 데이터 수집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 활..
-
[Java]ExecutorService란?Java 2022. 7. 31. 00:01
읽기 전 미리 알고 있으면 이해하기 좋은 개념들 Thread ThreadPool Runnable, Callable Future Blocking Queue ExecutorService란? 병렬 작업 시 여러 개의 작업을 효율적으로 처리하기 위해 제공되는 Java 라이브러리입니다. ThreadPool을 이용하여 Task를 실행하고 관리합니다. 보통 Thread를 구현할 때 Runnable 인터페이스를 구현하거나 Thread를 상속하여 구현합니다. 이때 Thread를 new MyThread().start()로 호출할 수 있지만 java.utli.concurrent 패키지의 ExecutorService를 이용하여 실행할 수 있습니다. ExecutorService에서 Task를 지정해주면 가지고 있는 Thread..
-
Java Lazy Evaluation이란?Java 2022. 7. 24. 00:01
Lazy Evaluation이란? 실제로 필요한 경우에만 연산을 시작하는 것을 의미합니다. 반대로 eager evaluation은 할당되자마자 연산을 시작합니다. Java는 eager evaluation을 기본으로 하고 일부 Lazy Evaluation이 존재했습니다. Java8이 나오면서 Java에서 Lazy Evauation을 좀 더 유연하게 사용할 수 있습니다. Eagar Evaluation 예시 public class LazyEvaluation { public static void main(String[] args) throws InterruptedException { double start = System.currentTimeMillis(); printIfValid(0,expensiveMetho..