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))

이 예제는 기본 예제이며 함수형 프로그래밍에서 모나드의 모든 기능을 보여주지 않는다는 점에 유의해야 합니다. 모나드는 오류 처리, 여러 계산 연결 등과 같은 다양한 경우를 처리하는 데 사용할 수 있습니다. 모나드를 적용하기 전에 문제와 사용 사례를 이해하는 것이 가장 좋습니다.

부품 목록: