본문 바로가기
반응형
SMALL

그룹 스터디 공부(IT 서적)/모던 자바 인 액션23

21 결론 그리고 자바의 미래 동작 파라미터화(람다와 메서드 참조) 메서드로 전달되는 값은 Function, Predicate, BiFunction 등의 형식을 가지며, 메서드를 수신한 코드에서는 apply, test 등의 메서드로 코드를 실행할 수 있다. 람다는 자바8에서의 추가된 가장 혁신적인 기능이다. 스트림 API (Java8) 컬렉션의 n번 탐색하여 결과를 찾아내는 연산을 스트림을 API의 파이프라이닝을 통하여 한번의 게으른 연산으로 값을 찾을 수 있다. parallel 메서드로 인하여 스트림을 병렬로 처리할 수 있다. 내부반복, 외부반복, 부작용 없는 연산, 람다와 메서드 참조로 파라미터화된 메서드, 함수형 개념이 핵심이다. CompletableFuture 클래스 (Java8) Future 인터페이스 제공(Java 5) 여.. 2023. 10. 13.
20.OOP와 FP의 조화:자바와 스칼라 비교 1.스칼라 소개 명령형, 함수형으로 구현된 Hello World예제 확인, 스칼라의 자료구조 확인(List, Set, Map, Stream, Tuple, Option...) 1. Hello Beer 스칼라에서는 모든 것이 객체다. = 기본자료형(primitive)이 없다성 스칼라는 자동으로 변수형을 추론하는 기능이 있다. 모든 변수의 형식은 컴파일 할 때 결정된다. // object로 클래스를 정의하고 동시에 싱글턴 객체를 만들었다. object Beer { // object 내부에 선언된 메서드는 정적 메서드로 간주되므로 static을 명시할 필요 없다. def main(args: Array[String]) { var n : Int = 2 while (n println(s"hello ${n}") } /.. 2023. 10. 13.
19. 함수형 프로그래밍 기법 이 장의 내용 일급 시민, 고차원 함수, 커링, 부분 적용 영속 자료구조 자바 스트림을 일반화하는 게으른 평가와 게으른 리스트 패턴 매칭, 자바에서 패턴 매칭을 흉내 내는 방법 참조 투명성과 캐싱 이 장에서는 고급 함수형 프로그래밍 기법을 다룹니다. 이론적 지식뿐 아니라 실무에서 적용 가능한 기술을 배울 수 있습니다. 다루는 내용으로는 고차 함수, 커링, 영구 자료구조, 게으른 리스트, 패턴 매칭, 참조 투명성을 이용한 캐싱, 콤비네이터 등이 있습니다. 19.1 함수는 모든 곳에 존재한다 함수형 언어 프로그래머는 함수를 값으로 취급할 수 있음을 의미하는 일급 함수 개념을 폭넓게 사용합니다. 자바 8은 이전 버전과 구별되는 특징 중 하나로 일급 함수를 지원합니다. 이를 위해 메서드 참조나 람다 표현식으로 .. 2023. 10. 5.
18 함수형 관점으로 생각하기 18.1 시스템 구현과 유지보수 함수형 프로그래밍이 제공하는 부작용 없음(no side effect)과 불변성(immutability)이라는 개념은 시스템의 유지보수에 큰 도움을 준다. 18.1.1 공유된 가변 데이터 공유된 가변 데이터 구조로 인해 변수가 예상하지 못한 값을 갖게 되고 데이터 갱신 사실을 추척하기 어려워진다. 클래스 또는 객체의 상태를 바꾸지 않으며 return 문을 통해서만 자신의 결과를 반환하는 메서드를 순수(pure) 메서드 또는 부작용 없는(no side effect) 메서드라고 부른다. 여기서 부작용은 함수 내에 포함되지 못한 기능을 의미한다. 자료구조를 고치거나 필드에 값을 할당(setter 메서드 같은 생성자 이외의 초기화 동작) 예외 발생 파일에 쓰기 등의 I/O 동작 수.. 2023. 10. 3.
chapter 11 합성과 유연한 설계 상속 관계는 is-a 관계라고 부르고 합성 관계는 has-a 관계라고 부른다. 상속을 제대로 활용하기 위해서는 부모 클래스의 내부 구현에 대해 상세하게 알아야 하기 때문에 자식 클래스와 부모 클래스 사이의 결합도가 높아질 수밖에 없다. 결과적으로 상속은 코드를 재사용할 수 있는 쉽고 간단한 방법일지는 몰라도 우아한 방법은 아니다. 합성은 구현에 의존하지 않는다는 점에서 상속과 다르다. 합성은 내부에 포함되는 객체의 구현이 아닌 퍼블릭 인터페이스에 의존한다. 상속 관계는 클래스 사이의 정적인 관계인 데 비해 합성 관계는 객체 사이의 동적인 관계다. 이 차이점은 생각보다 중요한데, 코드 작성 시점에 결정한 상속 관계는 변경이 불가능하지만 합성 관계는 실행 시점에 동적으로 변경할 수 있기 때문이다. 01. 상.. 2023. 9. 18.
chapter 16 CompletableFuture: 안정적 비동기 프로그래밍 16.1 Future의 단순 활용 미래의 어느 시점에 결과를 얻는 모델을 활용할 수 있도록 Future 인터페이스를 제공하고 있다. 비동기 계산을 모델링하는 데 Future를 이용할 수 있으며, Future은 계산이 끝났을 때 결과에 접근할 수 있는 참조를 제공한다. ExecutorService executor = Executors.newCachedThreadPool(); //스레드 풀에 테스크를 제출하려면 ExecutorService를 만들어야한다. Future future = executor.submit(new Callable() { //Callable을 ExecutorService로 제출한다. @Override public Double call() throws Exception { // 시간이 오래.. 2023. 9. 13.
반응형
LIST