본문 바로가기

분류 전체보기48

[모던 자바 인 액션] 스트림 활용 - faltMap, takeWhile, doWhile, reduce 스트림의 평면화 - flatMap map은 주어진 값을 스트림으로 매핑하고, flatMap은 스트림의 내용으로 매핑한다. 다음은 ["Hello", "World"]를 ["H","e""l","o","W","r","d"]로 만드는 예제이다. //flatMap 사용 List c = words2.stream().map(word -> word.split("")) //Stream [H,e,l,l,o], [W,o,r,l,d] .flatMap(Arrays::stream) //Stream H,e,l,l,o,W,o,r,l,d .distinct() //H,e,l,o,W,r,d .collect(Collectors.toList()); //map 사용할 경우, Stream으로 반환하기 때문에 원하는 결과값이 나오지 않는다. Lis.. 2023. 7. 7.
[객체지향의 사실과 오해] 5장. 책임과 메시지 자율적인 책임 객체는 자율적이다. 객체는 각자 맡은 책임을 수행한다. 적절한 책임이 자율적인 객체를 낳고, 자율적인 객체들이 모여 유연하고 단순한 협력을 낳는다. 자율적=동적 자율적이란 무엇인가. 메시지와 메서드 메시지는 메시지 이름과 인자로 구성된다. 객체는 오로지 메시지를 통해서 다른 객체와 협력할 수 있다. 메시지를 처리하기 위해 메서드를 사용한다. 객체는 메시지를 수신하면 먼저 해당 메시지를 처리할 수 있는지 여부를 확인한다. 다형성 메시지는 어떻게 수행될 것인지 명시하지 않는다. 메시지는 단지 무엇이 실행되길 바라는지 명시하며, 어떤 메시지를 선택할 것인지는 수신자가 결정한다. 즉, 메시지는 무엇이 실행될지 명시하지만 메시지를 어떻게 실행할 것인지는 전적으로 수신자가 결정할 수 있다. 메시지를 .. 2023. 6. 30.
[모던 자바 인 액션] 4장. Stream 스트림이란? 자바 8 API에 새로 추가된 기능으로, 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소이다. 스트림을 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있다. 스트림을 이용하면 멀테스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다. parallelStream() 사용 스트림의 특징 : 선언형, 조립 가능, 병렬화 컬렉션과 스트림 차이 컬렉션 스트림 데이터를 계산하는 시점 모든 값을 메모리에 저장하므로, 값은 컬렉션에 추가하기 전에 계산된다. 요청할 때만 값을 계산한다. 데이터를 계산하는 횟수 메모리에 저장되있으므로 언제든지 탐색 가능하다. 딱 한 번만 탐색할 수 있다. 버반복 외부 반복(for문 사용) 내부 반복(내부에서 알아서 처리한다) 병렬성 synchron.. 2023. 6. 30.
[모던 자바 인 액션] 3장. 람다, 함수형 인터페이스, 메서드 참조 람다 람다 표현식 : 메서드로 전달할 수있는 익명 함수를 단순화한 것. 함수형 인터페이스 오직 하나의 추상 메서드만 가지는 인터페이스 디폴트 메서드가 있더라도 추상 메서드가 오직 하나면 함수형 인터페이스다. 함수형 인터페이스를 사용하서 람다 표현식으로 구현 클래스를 전달할 수 있다. 함수 디스크립터 시그니처는 함수형 인터페이스의 추상 메서드를 말하며 이는 곧 람다 표현식의 시그니처이다. 함수 디스크립터 : 람다 표현식의 시그니처를 서술하는 메서드 ex) Predicate의 시그니처는 test이고, 함수 디스크립터는 Apple -> boolean 이다. 실행 어라운드 패턴 자원 처리할 때 이 패턴을 가진다. 자원을 열고, 처리한 다음, 자원을 닫는 패턴. (init -> 작업 -> close) 이렇게 설정.. 2023. 6. 28.
[객체지향의 사실과 오해] 4. 역할, 책임, 협력 04 역할, 책임, 협력 협력 요청하고 응답하며 협력하는 사람들 협력은 한 사람이 다른 사람에게 도움을 요청할 때 시작된다. 요청을 받은 사람은 요청한 사람에게 필요한 지식이나 서비스를 제공하는 것으로 응답한다. 협력은 다수의 연쇄적인 요청과 응답의 흐름으로 구성된다. 이상한 나라의 앨리스에서 하트 잭에 대한 공판이 열리는 법정 누가 파이를 훔쳤지? 파이를 누가 훔쳤는지에 대한 재판이 열렸다. 왕이 하얀 토끼에게 첫 번째 목격자를 부르라고 명령하자 하얀 토끼는 모자 장수를 부른다. 이내 왕은 모자 장수에게 증언하라고 명령한다. 모자 장수는 '저는 보잘 것 없는 사람입니다'라며 얘기한다. 이 재판 속에서 객체는 왕, 하얀 토끼, 모자 장수가 있으며 이들은 요청과 응답으로 협력을 한다. 왕이 모자 장수에게 .. 2023. 6. 24.
[모던 자바 인 액션] 1,2장. Java 8의 변화, 동작 파라미터화 1장 자바의 주요 변화 Java1.0 : 스레드, 락, 메모리 모델 지원 Java5 : 스레드 풀, 병렬 실행 컬렉션(concurrent collection) 등의 도구 도입 Java7 : 병렬 실행에 도움을 주는 포크/조인 프레임워크 제공 Java 8 : 스트림 API, 람다, 메서드 참조, 인터페이스의 디폴트 메서드 Java9 : 리액티브 프로그래밍(병렬 실행 기법, RxJava) Java 8의 변화 스트림 API 내부 반복으로 데이터를 처리한다. 기존에는 한 번에 한 항목을 처리했지만 자바 8에서는 작업을(데이터베이스 질의처럼) 고수준으로 추상화하여 일련의 스트림으로 만들어 처리할 수 있다. 입력 부분을 여러 CPU 코어에 쉽게 할당할 수 있다. 스레드를 사용하지 않고 공짜로 병렬성을 얻을 수 있다.. 2023. 6. 23.