🟢 Clojure의 매크로 정의와 활용 방법

Clojure 문법

초급 난이도
문법 타입
10/27 등록일

Clojure의 매크로 정의와 활용 방법

초급
태그
기초 문법 입문 매크로 메타프로그래밍
## 개요
매크로는 Clojure에서 코드를 생성하고 변환하는 데 사용되는 강력한 기능입니다. 함수형 프로그래밍과 결합해 동적 코드 조작이 가능하며, 반복적인 패턴을 추상화하는 데 유용합니다.

## 주요 특징
- **코드 확장**: 컴파일 시점에 코드를 재구성하여 중복 제거
- **메타프로그래밍**: 언어 자체를 조작해 새로운 문법 구조 만들기
- **불변성 유지**: 메타데이터 처리 시 기존 코드의 변경 방지
- **동등성 보장**: `quote`와 `eval`을 통해 코드로직과 데이터의 경계 명확화

## 사용법
```clojure
(defmacro when-let
"조건이 참일 때 바인딩 수행"
[binding-form test-form & body]
(if (seq binding-form)
`(when ~test-form
(let ~binding-form
~@body))
`(when ~test nad
~@body)))

;; 사용 예시
(when-let [x 10] (> x 5) (println "조건 성립"))
```

## 주의사항
- **하이지니스트 오류**: `~@`와 `~`를 혼동해 데이터를 잘못 확장하는 경우
- **전개 로직 오류**: 조건문 내부에서 `eval`을 사용해 의도치 않은 동적 실행 발생
- **성능 저하**: 과도한 메타데이터 처리로 인한 성능 감소 가능성

## 관련 문법
- `defn`: 함수 정의에 비해 매크로는 코드 조작이 가능한 특수 구조
- `quote`/`unquote`: 매크로 전개 시 데이터와 코드 구분을 위한 핵심 연산자
코드 예제
(defmacro when-let
  "조건이 참일 때 바인딩 수행"
  [binding-form test-form & body]
  (if (seq binding-form)
    `(when ~test-form
       (let ~binding-form
         ~@body))
    `(when ~test-form
       ~@body)))

;; 사용 예시
(when-let [x 10] (> x 5) (println "조건 성립"))
등록일: 2025년 10월 27일 02:35
언어 정보
언어
Clojure
카테고리
Functional
인기도
#26
학습 팁
코드를 직접 실행해보세요
변수를 바꿔가며 실험해보세요
오류가 나도 포기하지 마세요
다른 예제도 찾아보세요