값을 가질수도 있는 Maybe 모나드로 구현


map 함수에 Int 를 String 으로 변환시키는 함수가 들어오면 Maybe<String> 객체로 변경시키고


flatMap 함수에 Int 를 Map<String> 으로 변환시키는 함수가 들어오면 Map<String> 을 반환시키는 함수가 구현 되어있음 ㅇㅅㅇ


이러면 일단 모나드는 정의된거고 여기다가 부가기능만 넣어주면 됨




예를들어 이런 널체크가 깊어지는 코드가 있다고 할 때


Maybe 에서 map 과 flatMap 에 동작 방식을 조금 바꿔주면 저런 코드가 사라질 수 있음




value 의 값이 null 이 아니라면 action 들을 취하고 아니라면 그냥 null을 담은 Maybe 를 반환시킴 ㅇㅅㅇ


이러면 이제 기존의 널체크 코드를




이런식으로 합성이 가능해지고 


실제로 이 코드는 it.toIntOrNull 값이 널이기 때문에 아래에 "결과: $it" 부분은 실행되지 않음 ㅇㅅㅇ


지금은 널만 했지만 만약에 I/O 작업이라면 값을 받기전과 값을 받은 후로 State를 나눠서 처리를 하도록 하면


아직 받지 못한 값인데도 받은것처럼 사용할 수 있고


옵저버블처럼 스트림이 배출된 상태, 에러가 난 상태, 성공적으로 완수한 상태로 나누면 Rx 도 구현할 수 있는거지 ㅇㅅㅇ