translation

AI가 번역한 다른 언어 보기

Sunrabbit

아직도 함수형 라이브러리를 사용하십니까

  • 작성 언어: 한국어
  • 기준국가: 모든 국가country-flag
  • IT
프로필 이미지

durumis AI가 요약한 글

  • 함수형 코딩 라이브러리 중 fp-ts는 함수형 사상 및 모나드에 집중하여 인기를 얻었으나, Effect에 통합되면서 프레임워크 성격으로 변화하였다.
  • Effect는 기존 라이브러리와 달리 프레임워크처럼 작동하며, Effect 객체를 사용하려면 관련 지식이 필요하다.
  • Effect는 RxJs의 Observable처럼 Effect로 감싸진 객체를 사용하며, Node.js 업계에 새로운 표준을 제시할 가능성이 있다고 예상된다

지난 몇년동안 함수형 코딩은 꽤나 유행이였습니다.


객체지향은 형태를 만들어준다면

함수형코딩은 세부적인 코드의 간결함을 만들어줬기 때문입니다.


물론 함수형 코딩의 유행은 몇년의 주기를 가지고 지속적으로 생기긴합니다.

이러한 함수형 코딩의 유행에 따라 다양한 라이브러리가 나오기 시작했습니다.



제가 느끼기에는 FxTs의 경우 generator를 이용하여 지연 평가를 만들어놓은 툴킷에 불과했습니다.


lodash도 마찬가지로 툴킷의 느낌이 강하였고요



물론 이러한 툴킷들은 선언형 프로그래밍에 대해서 도움을 주는건 맞습니다.


하지만 저희가 찾는 함수형은 그런 것이 아닌, 사상과 대응 그리고 모나드, 더 많은 모나드였습니다.

fp-ts가 그 결에 걸맞았고, 해당 메인테이너 역시 함수형에 진심이였습니다.


하지만 몇달 전, 해당 라이브러리 Effect에 병합되었다는 소식을 듣게 되었습니다.


그래서 Effect를 확인해보았더니, 뭔가 달랐습니다.


기존의 fp-ts가 라이브러리에 가까웠다면 이번 Effect는 프레임워크에 가까웠습니다.

Effect를 사용하기 위해서는 Effect에 대한 기반지식이 필요했습니다.


NestJsNextJs를 사용하기 위해서는 그에 대한 이해가 필요했던 것 처럼요


라이브러리는 API가 잘 노출되어있다면 가져다 사용하면 그만이지만, 프레임워크는 해당 패키지에 대해 이해도를 가지고 있어야만 하거든요.

import { Effect, Console } from "effect"
 
let i = 1
const expensiveTask = Effect.promise(() => {
    console.log("expensive task...")
    return new Promise((resolve) => {
        setTimeout(() => {
        resolve(result ${i++})
        }, 100)
    });
})
 
const program = Effect.gen(function* () {
console.log("non-cached version:")
    yield* expensiveTask.pipe(Effect.andThen(Console.log))
    yield* expensiveTask.pipe(Effect.andThen(Console.log))
    console.log("cached version:")
    const cached = yield* Effect.cached(expensiveTask)
    yield* cached.pipe(Effect.andThen(Console.log))
    yield* cached.pipe(Effect.andThen(Console.log))
})
 
Effect.runFork(program)

/*
Output:
non-cached version:
expensive task...
result 1
expensive task...
result 2
cached version:
expensive task...
result 3
result 3
*/


이러한 EffectRxJs처럼 Observable로 감싸져있는 대신 Effect로 감싸져있는 객체들이 옮겨다니며

마치 async 키워드처럼 전염을 시키고 다녔습니다.


Effect 객체를 사용하기 위해서는 해당 객체를 이용하는 함수도 Effect가 되어야만 했습니다.


마치 위 코드의 program 처럼 말이죠


물론 Entry Point로 사용되는 함수는 좀 있긴합니다만, 그건 너무 섹시하지못합니다.


아무튼 이러한 Effect의 형태와 깔끔함은 프레임워크로써의 역할을 하며, Node 업계에 새로운 바람과 표준을 보여주지않을까 필자는 기대하고 있습니다.


Sunrabbit
Sunrabbit
The way to be a senior is to be a senior.
Sunrabbit
[React Hook] useStateReact Hook useState의 작동 방식과 리렌더링 스코프, 상태값 유지 방법을 설명하며, 내부 구현 방식까지 살펴봅니다.

2024년 3월 14일

타입 아직도 직접 타이핑 하나하나 하시나요TypeScript의 고차타입 라이브러리를 사용하여 가독성 좋은 타입 정의를 쉽게 할 수 있습니다.

2024년 8월 13일

[Next.js] Runtime env injectionNext.js에서 빌드 후 환경 변수를 주입하는 방법을 윈도우 및 유닉스 환경에서 모두 동작하도록 개선하는 방법을 설명합니다.

2024년 3월 20일

Java Collections Framework(JCF)란? - JCF의 정의와 특징 (JAVA)Java Collections Framework(JCF)는 다양한 데이터를 효율적으로 처리하는 자바의 표준화된 클래스 집합입니다.
제이온
제이온
제이온
제이온

2024년 4월 27일

[비전공, 개발자로 살아남기] 14. 신입 개발자 자주 묻는 기술면접 내용 요약신입 개발자 면접에서 자주 나오는 기술 질문(메모리 영역, 자료구조, 데이터베이스 등)을 요약하여 정리했습니다. 개발 면접 준비에 도움이 되길 바랍니다.
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

2024년 4월 3일

[이펙티브 자바] 아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라이펙티브 자바의 아이템 1에서는 생성자 대신 정적 팩터리 메서드를 사용하는 방법과 장단점을 설명합니다. 특히 인스턴스 제어, 유연성, API 간소화 등의 장점을 강조합니다.
제이온
제이온
제이온
제이온

2024년 4월 27일

Flitter 1.0.0 출시: D3를 대체할 svg 라이브러리Flitter 1.0.0은 SVG 기반 데이터 시각화 라이브러리로, React와의 호환성을 강화하고 SSR 지원을 개선했습니다. 성능 향상 및 버그 수정도 포함되어 있습니다.
Meursyphus
Meursyphus
Meursyphus
Meursyphus

2024년 5월 1일

Flitter vs D3.js: 웹 데이터 시각화의 게임체인저D3.js 대안으로 떠오르는 Flitter는 사용 편의성과 성능을 개선해 웹 데이터 시각화를 더욱 쉽고 효율적으로 만들어줍니다.
Meursyphus
Meursyphus
Meursyphus
Meursyphus

2024년 7월 18일

[오브젝트] 1장. 객체, 설계소프트웨어 개발에서 객체 지향 설계의 중요성과 개념을 설명하고, 티켓 판매 애플리케이션 예시를 통해 객체 지향 설계의 필요성을 강조합니다.
제이온
제이온
제이온
제이온

2024년 4월 28일