gemini

Gemini 함수형 프로그래밍 프롬프트 - 순수 함수, 불변성, 고차 함수

함수형 프로그래밍 패턴 학습과 적용. 순수 함수, 불변성, 고차 함수, 커링, 모나드, 함수 합성.

수정
💡

프롬프트 사용 방법

  1. 1단계: 아래 입력 칸에 각 항목에 맞는 정보를 적어주세요
  2. 2단계: 입력하면 아래 프롬프트가 자동으로 업데이트됩니다
  3. 3단계: '프롬프트 복사' 버튼을 눌러 ChatGPT/Claude에 붙여넣으세요

💡 입력 칸의 회색 글씨는 예시입니다. 참고해서 작성해보세요!

📝 필요한 정보를 입력해주세요 (총 3개)

학습주제에 대한 값을 입력하세요

프로그래밍언어에 대한 값을 입력하세요

코드내용에 대한 값을 입력하세요

📋 완성된 프롬프트 (복사해서 사용하세요)

함수형 프로그래밍 패턴을 지도하세요.


## 학습 정보
- 학습 주제: {{학습주제}}
- 언어: {{프로그래밍언어}}
- 코드: {{코드내용}}

## 요청
1. 핵심 개념 설명
2. 코드 분석 (부작용, 가변 상태)
3. 함수형 변환
4. 실무 적용 가이드

입력하지 않은 항목은 원래 표시를 유지합니다.

간단 버전

함수형 프로그래밍으로 변환해주세요.
주제: {{학습주제}}, 코드: {{코드내용}}, 언어: {{프로그래밍언어}}
개념 설명, 변환 코드, 적용 패턴을 알려주세요.

입력값 가이드

입력 항목 한국어 설명 placeholder 예시
학습주제 학습하거나 변환할 주제를 입력하세요 예: 순수 함수, 명령형→함수형 변환 순수 함수, 명령형→함수형 변환
프로그래밍언어 사용하는 언어를 선택하세요 예: JavaScript, TypeScript, Python JavaScript, TypeScript, Python
코드내용 변환할 코드가 있다면 적어주세요 예: function add(a, b) { ... } function add(a, b) { ... }

인풋 필드

[학습 주제]
▼ 텍스트 입력
placeholder: "예: 순수 함수, 명령형→함수형 변환"
설명: 학습하거나 변환할 주제를 입력하세요

[프로그래밍 언어]
▼ 드롭다운 선택
옵션: JavaScript, TypeScript, Python, Haskell, Elixir, F#, Clojure
placeholder: "예: JavaScript, TypeScript, Python"
설명: 사용하는 언어를 선택하세요

[코드 내용]
▼ 텍스트 영역 입력
placeholder: "예: function add(a, b) { ... }"
설명: 변환할 코드가 있다면 적어주세요

함수형 프로그래밍 핵심 개념

개념 설명 특징
순수 함수 같은 입력→같은 출력 부작용 없음, 참조 투명성
불변성 데이터 수정 불가 새 데이터 생성, 구조적 공유
고차 함수 함수를 인자/반환값으로 map, filter, reduce
함수 합성 작은 함수 결합 compose, pipe
커링 다중 인자→단일 인자 체인 부분 적용 가능
모나드 부작용 관리 패턴 Maybe, Either, IO

코드 예시

순수 함수 변환

// ❌ Bad: 부작용 있음
let discount = 0;
function applyDiscount(price) {
    discount = 0.1; // 외부 상태 변경
    return price * (1 - discount);
}

// ✅ Good: 순수 함수
const applyDiscount = (price, rate) => price * (1 - rate);

불변성

// ❌ Bad: 원본 수정
function addItem(cart, item) {
    cart.push(item);
    return cart;
}

// ✅ Good: 새 배열 생성
const addItem = (cart, item) => [...cart, item];

함수 합성 & Maybe 모나드

// 함수 합성
const compose = (...fns) => x => fns.reduceRight((v, f) => f(v), x);
const process = compose(trim, lowercase);

// Maybe 모나드
const getEmail = (user) =>
    Maybe.of(user)
        .map(u => u.profile)
        .map(p => p.email)
        .getOrElse('No email');

함수형 이점

이점 효과
참조 투명성 예측 가능한 코드
테스트 용이성 의존성 없는 단위 테스트
디버깅 용이성 부작용 없음
병렬 처리 공유 상태 없음

🚀 AI 바로 열기

🔗 관련 프롬프트