일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 추상화 설계
- 아키텍처
- 코틀린
- 헥사고날아키텍처
- GrokkingFunctionalProgramming
- template
- 이펙티브코틀린
- 함수형프로그래밍
- 책스터디
- 객체지향의사실과오해
- 개발방법론
- 개발서적
- Kotlin
- 유지보수
- 계층형아키텍처
- 스터디
- web
- 클린아키텍처
- FP
- Java
- Thymeleaf
- 테스트
- DDD
- 조영호
- 도메인 주도 개발 시작하기
- 테스트주도개발
- Boot Legacy 차이점
- TDD
- 만들면서배우는클린아키텍처
- Spring
- Today
- Total
목록GrokkingFunctionalProgramming (11)
김동형수 개발기
12 기능적 프로그램 테스팅 이 장에서 배울 것입니다 예제를 제공하여 순수 함수를 테스트하는 방법 속성을 제공하여 순수 함수를 테스트하는 방법 모의 라이브러리를 사용하지 않고 부작용을 테스트하는 방법 테스트 기반 방식으로 새로운 기능을 개발하는 방법 이 책의 마지막 장은 가장 중요한 소프트웨어 엔지니어링 활동 중 하나인 테스트 에 할애됩니다 . 테스트는 유지 관리 가능한 소프트웨어를 작성하는 주요 방법 중 하나입니다. 이를 사용하여 프로그램이 요구 사항에 따라 작동하는지, 이전에 발견한 버그가 없는지, 외부 API, 서비스 또는 데이터베이스와 제대로 통합되는지 확인할 수 있습니다. 가장 편리한테스트할 함수는 단순 유형을 사용하는 순수 함수입니다. 이러한 비 IO함수는 일반적으로 중요한 비즈니스 로직을 나..
11 함수형 프로그램 설계하기 이 장에서 배울 것입니다 실제 기능적 애플리케이션을 설계하는 방법 더 복잡한 요구 사항을 유형으로 모델링하는 방법 다음을 사용하여 실제 데이터 소스 API와 통합하는 방법IO 리소스 누수를 방지하는 방법 실행 속도를 높이기 위해 쿼리 결과를 캐시하는 방법 불변 모델링, ADT(enum + case class) 사용 비즈니스 도메인 모델링 및 FP, 유형으로서의 요구사항 데이터 액세스 모델링, IO (cats effect 외부 라이브러리) 사용 OO(객체지향?) 에서 사용하는 인터페이스 코딩 사용, scala - trait Wikidata, SPARQL를 이용한 DataAccess 구현체 작성 새로운 매개변수를 요구함으로써 문제를 "아웃소싱"하는 것은 FP에서 매우 일반적인 ..
10 동시 프로그램 이 장에서 배울 것입니다 선언적으로 동시 프로그램 흐름을 설계하는 방법 경량 가상 스레드(파이버)를 사용하는 방법 서로 다른 스레드의 데이터를 안전하게 저장하고 액세스하는 방법 이벤트 스트림을 비동기적으로 처리하는 방법 불변 값과 순수 함수만 다룰 수 있을 때 동시성 프로그램을 작성하는 것이 훨씬 쉽습니다. 지금까지 배운 모든 내용은 멀티스레드 환경에도 적용할 수 있습니다 진행순서 1 단계 순차적 IO 2 단계 파이버가 있는 IO 3단계 동시 IO 및 비동기 액세스 순처적으로 일괄 처리되는 프로세스를 '일괄처리'라 명한다. 배치의 필요성 책에서는 수십만의 stream을 처리할 때 오래걸리니 배치가 필요하다고 한다. 스트림 조합기 : chunkN - stream을 chunkN의 매개변수..
9장 값 으로 스트리밍 이 장에서는 다음을 수행하는 방법을 배웁니다. 복잡한 프로그램 흐름을 선언적으로 설계 재귀와 게으름을 사용하여 일부 결정을 연기 IO 기반 데이터 스트림 처리 무한한 값의 흐름 생성 및 처리 시간 종속 기능 분리 IO.delay 사용과 immutable map 무한한 수의 IO 호출과 관련하여 해결되지 않은 문제가 너무 많습니다. 우리는 어디서부터 시작해야할지 모를 것입니다. 따라서 대신 상향식 접근 방식을 사용 합니다. tuple, case class를 이용 zip, drop 함수 이용 8장에서 나온 retry를 이용해서 api 호출 FP에서는 재귀를 사용하여 많은 문제를 해결합니다. io를 반환하는 재귀함수를 선언하게되면 IO.delay가 호출되는 시점에 재귀가 실행하기 떄문에..
8 값으로 IO 이 장에서는 다음을 수행하는 방법을 배웁니다. 값을 사용하여 부작용이 있는 프로그램을 나타냅니다. 안전하지 않은 출처의 데이터 사용 프로그램 외부에 데이터를 안전하게 저장 코드에 부작용이 있음을 나타냅니다. 순수한 코드와 불순한 코드 분리 IO 작업을 수행하는 코드는 부작용이 있으며 기능을 불순하게 만듭니다 외부 API 사용 안전하지 않은 코드 두 가지 유형의 IO 작업의 주요 속성은 여러 요인에 따라 다르게 동작할 수 있는 코드인 안전하지 않은 코드를 실행한다는 것입니다. 이것이 공유 가변 메모리 주소에서 읽고 쓰는 것이 안전하지 않은 것으로 취급되고 부작용이 있는 IO 작업 범주에 속하는 이유입니다. 순수 함수는 언제 어디에서 사용하든 항상 동일하게 동작해야 한다는 점을 기억하세요. ..
6부 오류처리 이 장에서는 다음을 수행하는 방법을 배웁니다. null 및 예외 없이 모든 오류를 처리합니다 . 모든 코너 케이스가 처리되었는지 확인하십시오. 함수 서명에서 가능한 모든 오류를 나타냅니다. 다른 가능한 오류가 있는 경우 더 작은 기능에서 더 큰 기능을 구성합니다. 사용자에게 친숙하고 설명적인 오류를 반환합니다. 오류 없는 프로그램을 작성하는 방법에는 두 가지가 있습니다. 세 번째 것만 작동합니다. — Alan Perlis, "프로그래밍에 대한 에피그램" 결론은 오류가 없는 프로그램은 없다는 듯 하다. 고차 함수를 사용하여 기본 파서에서 더 복잡한 파서를 생성하는 데 사용되는 "파서 결합기"가 있습니다. FP의 핵심입니다. 예외처리가 없는 parseShow 는 순수하지 않은 함수다. TvSh..
이 장에서는 다음을 수행하는 방법을 배웁니다. flatten 을 사용하여 목록 목록 처리 for 루프 대신 flatMap 을 사용하여 순차 프로그램 작성 for comprehension을 사용하여 읽기 쉬운 방식으로 순차 프로그램 작성 이해를 위해 내부 조건 사용 flatMap 이 있는 더 많은 유형에 대해 알아 보십시오. 책 객체 2차원 List에서 저자의 이름을 뽑으려면? 명령형 -> 3중첩 for loop 사용 함수형 -> 파이프라인 구성 flatten(scala에선 flatMap)함수를 이용해서 2차원 List를 1차원 List로 변환할 수 있다. flatMap 은 목록의 유형을 변경할 수 있을 뿐만 아니라(예: Book 에서 String 으로) 결과 목록의 크기 도 변경할 수 있으며 이는 map..
4부 가치로서의 기능 이 장에서는 다음을 수행하는 방법을 배웁니다. 함수를 인수로 전달 sortBy 함수 사용 맵 및 필터 기능 사용 함수에서 함수 반환 함수를 값으로 취급 foldLeft 기능 사용 제품 유형을 사용하여 불변 데이터 모델링 4.1 요구 사항을 기능으로 구현 기능 측면에서 비즈니스 요구 사항을 생각하고 순수 기능을 값으로 취급하는 방법이 얼마나 유용한지 알아봅니다. 단어 순위 · 주어진 단어의 점수는 'a' 가 아닌 각 문자에 대해 1점을 주어 계산됩니다. · 주어진 단어 목록에 대해 가장 높은 점수를 받은 단어로 시작하는 정렬된 목록을 반환합니다. 4.2 불순한 함수와 가변 값 반격 주어진 단어에 대한 점수를 반환하는 함수가 이미 있습니다. static int score(String w..