Nest.JS | 모나드 -> 목록
Jan 27 2023
Array 모나드로도 알려진 List 모나드는 가능한 여러 결과를 가질 수 있는 계산을 나타내는 데 사용되는 모나드입니다. 배열을 감싸는 모나드로 맵, 체인, 플랫맵 등과 같은 모나드 메서드를 사용할 수 있습니다.
모나드 List라고도 하는 모나드는 Array가능한 여러 결과를 가질 수 있는 계산을 나타내는 데 사용되는 모나드입니다. 배열을 감싸고 배열에서 map, chain, 등 의 모나드 메서드를 사용할 수 있게 해주는 모나드입니다 .flatMap
모나드 는 일반적으로 배열의 각 요소에 함수를 적용하고 결과를 연결하는 List단일 메서드가 있는 객체로 구현됩니다 .flatMap
List다음은 JavaScript에서 모나드 의 예입니다 .
class List {
constructor(values) {
this.values = values;
}
flatMap(f) {
return new List(this.values.reduce((acc, x) => acc.concat(f(x)), []));
}
}
const list = new List([1, 2, 3]);
const result = list.flatMap(x => [x * 2, x * 3]);
console.log(result.values); // [2, 3, 4, 6, 6, 9]
예를 들어 숫자 배열을 래핑하는 를 만든 List다음 flatMap메서드를 사용하여 배열의 각 요소에 함수를 적용하고 결과를 연결할 수 있습니다. 그런 다음 이러한 여러 계산을 함께 연결하여 더 복잡한 계산을 만들 수 있습니다.
List다음은 Nest.js에서 모나드를 사용하는 방법의 예입니다 .
import { Injectable } from '@nestjs/common';
import { List } from 'fp-ts/lib/List';
@Injectable()
export class MyService {
public async getUsers(): Promise<List<User>> {
const users = await this.userRepository.find();
return List.fromArray(users);
}
public async getUserById(id: string): Promise<List<User>> {
const user = await this.userRepository.findOne(id);
return List.of(user);
}
}
.map(), .filter(), 메서드를 사용하여 여러 계산을 연결할 수 있습니다 .reduce().
myService.getUsers()
.map(users => users.filter(user => user.age > 18))
.map(users => users.map(user => user.name))
.map(users => users.reduce((acc, curr) => acc + ', ' + curr))
.fold(error => console.log(error), result => console.log(result))
이 예제는 기본 예제이며 함수형 프로그래밍에서 모나드의 모든 기능을 보여주지 않는다는 점에 유의해야 합니다. 모나드는 오류 처리, 여러 계산 연결 등과 같은 다양한 경우를 처리하는 데 사용할 수 있습니다. 모나드를 적용하기 전에 문제와 사용 사례를 이해하는 것이 가장 좋습니다.
부품 목록:

![연결된 목록이란 무엇입니까? [1 부]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































