일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 계층형아키텍처
- GrokkingFunctionalProgramming
- DDD
- 헥사고날아키텍처
- 책스터디
- Thymeleaf
- FP
- 만들면서배우는클린아키텍처
- 테스트주도개발
- 함수형프로그래밍
- 추상화 설계
- Kotlin
- 클린아키텍처
- 코틀린
- 이펙티브코틀린
- web
- Spring
- 개발서적
- 개발방법론
- TDD
- 유지보수
- 스터디
- 테스트
- 도메인 주도 개발 시작하기
- template
- Boot Legacy 차이점
- 아키텍처
- 객체지향의사실과오해
- Java
- 조영호
- Today
- Total
김동형수 개발기
Grokking Functional Programming - 2부 7장 본문
Grokking Functional Programming - 2부 7장
김동형수 2023. 1. 4. 22:217 유형으로서의 요구사항
이 장에서는 다음을 수행하는 방법을 배웁니다.
- 오류를 최소화하기 위해 불변 데이터 모델링
- 불변 데이터로 요구 사항 모델링
- 컴파일러를 사용하여 요구 사항에서 문제 찾기
- 논리가 항상 유효한 데이터에서 실행되는지 확인하십시오.
재미있는 점은 그것들이 모두 String 및 Int 와 같은 기본 유형을 사용하여 실제 세계의 더 복잡한 비즈니스 엔터티 및 관계를 모델링 하는 것에서 비롯 되었다는 것입니다.
위의 세 가지 요구 사항 중에서 처음 두 개는 행동 요구 사항 이고 마지막 하나는 데이터 요구 사항 입니다. 지금까지 동작(함수)에 중점을 두었고 데이터 요구 사항을 간단한 유형( String s, Int s, Boolean s)으로 모델링했습니다. 우리는 이 접근 방식으로 시작하여 행동과 데이터 모두에 더 안전한 함수형 프로그래밍 기술을 사용하도록 빠르게 전환할 것입니다.
Option의 비교하는 고차함수 forall, exist
forall 은 주어진 Option 내부의 요소 ( Option 이 Some 인 경우)가 익명 함수로 전달된 조건을 만족하거나 Option 내부에 요소가 없는 경우 (즉, None 인 경우) true 를 반환
exist는 none인 경우 false를 반환
두 매개변수가 연도 단위로 기간을 나타내는 단일 엔터티로 함께 결합됩니다. 끝은 여전히 이 값이 없을 수 있음( None )을 전달하는 Option 으로 표시되어 이러한 Period 인스턴스를 개방형으로 만듭니다.
FP에서는 합계 유형 의 작업입니다 . Scala에서는 enum 으로 인코딩됩니다 .
특정 아티스트가 활동한 기간을 연 단위로 모델링하고 싶었습니다. 지금까지 찾은 두 가지 옵션이 있습니다. 아티스트가 여전히 활동 중일 수 있으며 기간이 제한되어 있거나( end = None ) 아티스트가 더 이상 활동하지 않고 고정된 기간이 있습니다( end = Some(endYear) ). .
우리가 방금 쓴 것을 눈치채셨나요? 두 가지 옵션 이 있습니다 . 동일한 아티스트 에 대해 함께 사용할 수 없으며 유일하게 가능한 값입니다. 그것은 우리가 유한한 가능성을 모델링했을 때와 정확히 같은 경우입니다. 합계 유형을 다시 사용해야 합니다 !
enum YearsActive {
case StillActive(since: Int)
case ActiveBetween(start: Int, end: Int)
}
제품 유형 + 합계 유형 = 대수 데이터 유형(ADT)
패턴 일치 ( java 14인가 17에서 추가된 기능인데, 함수형 데이터 모델링을 더 강력하게 해주는 것이라고 지금 이해한다. )
ADT, 패턴 매칭, 뉴타입 !
'책 스터디 > [완료] FP - Grokking Funtional Programming' 카테고리의 다른 글
Grokking Functional Programming - 2부 9장 (0) | 2023.01.19 |
---|---|
Grokking Functional Programming - 2부 8장 (0) | 2023.01.11 |
Grokking Functional Programming - 2부 6장 (0) | 2022.12.21 |
Grokking Functional Programming - 2부 5장 (0) | 2022.12.14 |
Grokking Functional Programming - 1부 4장 (0) | 2022.11.30 |