Java
-
스트림 활용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..
-
책임 연쇄 패턴이란?Java 2022. 7. 19. 00:01
책임 연쇄 패턴(Chain of responsibility)이란? 책임이란? 클래스 단위로 무언가를 처리하는 기능 연쇄란? 여러 개의 책임들을 동적으로 연결해서 순차적으로 실행함 책임 연쇄란? 즉, 기능을 클래스 별로 분리한 후 각 기능(클래스)을 동적으로 연결하여 순차적으로 실행합니다. 다음은 책임 연쇄 패턴의 예시입니다. 여러개의 클래스들이 클라이언트의 요청을 처리하기 위해 객체를 체인 형태로 전달하여 결합력을 낮춥니다. 등장배경 이해를 하기 쉽게 여러가지 방법을 사용해 결제하는 상황을 연출하여 보겠습니다. 만약 결제를 할 때 다음과 같은 수단으로 결제할 수 있다고 가정하겠습니다. - 현금(Cash)으로 결제할 수 있다. - 신용카드(Credit Card)로 결제할 수 있다. 간단하게 코드를 작성하여..