1.Monad?
함수형 프로그래밍에서 중요한 개념으로 특정한 형식의 연산을 순차적으로 처리할 수 있도록 해주는 추상화다.
값을 컨텍스트 안에서 감싸고, 이를 안전하게 연산하며, 연속적으로 처리할 수 있게 하는 도구라고 볼수있다.
(Functor의 확장된 개념으로, 값의 변환뿐 아니라 연산의 체이닝을 가능하게한다.
Functor처럼 map 연산을 제공할 뿐만 아니라, flatMap을 통해 중첩된 구조를 평평하게 만든다.)
import java.util.Optional;
public class MonadOptionalExample {
public static void main(String[] args) {
// Monad 생성
Optional<Integer> maybeValue = Optional.of(10);
// flatMap을 사용한 체이닝
Optional<String> result = maybeValue
.flatMap(value -> Optional.of(value * 2)) // 값을 2배로 변환
.flatMap(value -> Optional.of("Result: " + value)); // 문자열로 변환
System.out.println(result); // Optional[Result: 20]
}
}
2.map vs flatmap
map은 값을 변환하는 연산으로, 값을 다른 값으로 매핑하고 중첩된 구조가 생기지않는다.
flatmap은 값을 변환한 후, 그 결과를 평평하게 만든다.
public class FlatMapAndMapExample {
public static void main(String[] args) {
// Optional을 사용하여 중첩된 값 처리
Optional<Integer> result = Optional.of(10)
.flatMap(value -> Optional.of(value * 2)) // flatMap: 중첩된 Optional을 풀어냄
.map(value -> value + 5); // map: 값에 5를 더함
result.ifPresent(System.out::println); // 출력: 25
}
}
'Computer Science > 개발지식' 카테고리의 다른 글
[개발지식]함수형 프로그래밍 (Functional Programming, FP) (0) | 2025.01.05 |
---|---|
[개발지식] Functor (0) | 2025.01.05 |
[개발지식] 트레이드오프(Trade-off)란? (0) | 2024.12.27 |