---
title: "클로저 1.13 알파, map destructuring에 ‘필수 키 체크’ 추가"
published: 2026-07-02T20:51:52.000Z
canonical: https://jeff.news/article/4734
---
# 클로저 1.13 알파, map destructuring에 ‘필수 키 체크’ 추가

Clojure 1.13.0-alpha1이 공개되며 map destructuring에서 필수 키 누락을 바로 잡아낼 수 있는 새 지시자들이 추가됐다. 기존 :keys, :syms, :strs의 체크 버전인 :keys!, :syms!, :strs!를 쓰면 필요한 키가 없을 때 예외를 던질 수 있다.

- Clojure 1.13.0-alpha1이 공개됨
  - 아직 정식 릴리스가 아니라 알파 버전임
  - 다운로드와 사용법은 Clojure 공식 Downloads 페이지에서 확인할 수 있음

- 핵심 변경은 map destructuring에서 필수 키를 검사할 수 있게 된 점임
  - 기존에는 :keys, :syms, :strs 지시자로 맵에서 값을 꺼냈음
  - 새로 :keys!, :syms!, :strs! 체크 버전이 추가됨
  - 지정한 키가 없으면 그냥 nil로 넘어가지 않고 예외를 던짐

- 이건 Clojure 코드에서 은근 자주 생기는 실수를 줄여줌
  - destructuring 키 이름을 잘못 쓰면 값이 nil이 되어 뒤쪽 로직에서 터질 수 있음
  - 특히 옵션 맵이나 설정 맵을 많이 넘기는 코드에서는 원인 추적이 귀찮아짐
  - 필수 키를 선언하는 순간 누락 지점에서 바로 실패하니 디버깅 비용이 줄어듦

> [!TIP]
> 옵션 맵을 받는 함수에서 “없어도 되는 키”와 “반드시 있어야 하는 키”가 섞여 있다면 :keys!가 꽤 유용할 수 있음. nil 허용 여부를 코드 읽는 사람에게도 바로 보여주기 때문임.

- 모든 directive에서 & 뒤에 바인딩하지 않을 키를 적을 수도 있게 됨
  - 실제 변수로 묶지는 않지만 문서화 용도로 사용할 수 있음
  - 체크 목적의 선언에도 쓸 수 있음
  - destructuring 구문이 데이터 계약을 더 잘 드러내는 방향으로 간 셈임

- 사용하려면 deps.edn의 :deps를 갱신하고 Clojure CLI로 REPL을 시작하면 됨
  - 원문에는 deps.edn 업데이트와 REPL 시작 예시가 이어지지만, 수집된 본문에는 실제 코드 블록 내용이 빠져 있음
  - 그래도 기능 자체의 핵심은 checked variants 추가로 충분히 파악 가능함

---

## 기술 맥락

- 이번 변경의 포인트는 동적 언어에서 데이터 계약을 어디까지 문법 가까이에 둘 것인가예요. Clojure는 맵을 유연하게 넘기는 코드가 많아서 편하지만, 필수 키가 빠져도 nil로 흘러가면 버그 위치가 뒤로 밀리거든요.

- :keys!는 그 문제를 destructuring 시점에서 끊어줘요. 함수 안쪽 로직이 한참 돈 뒤 NullPointer 비슷한 문제를 만나는 대신, 입력 맵에 필요한 키가 없다는 사실을 더 빨리 알 수 있어요.

- & 뒤에 바인딩하지 않을 키를 적게 한 것도 의도가 있어요. 실제로 변수로 쓰지 않더라도 “이 맵은 이런 키를 기대한다”는 정보를 destructuring 자리에 남길 수 있어서, 코드가 작은 스키마처럼 읽히게 돼요.

- 큰 기능은 아니지만 라이브러리 API나 내부 서비스 경계에서 꽤 실용적이에요. 특히 설정 맵, 이벤트 페이로드, 옵션 맵처럼 느슨한 데이터가 오가는 곳에서는 이런 체크가 런타임 안정성을 조금씩 올려줘요.

## 핵심 포인트

- Clojure 1.13.0-alpha1이 공개됐다
- :keys!, :syms!, :strs!가 새로 추가돼 map destructuring에서 필수 키 존재 여부를 검사한다
- 모든 destructuring directive에서 & 뒤에 바인딩하지 않을 키를 문서화 또는 체크용으로 적을 수 있다
- 사용자는 deps.edn 의존성을 갱신하고 Clojure CLI로 REPL을 시작해 테스트할 수 있다

## 인사이트

작은 문법 개선처럼 보이지만, Clojure 코드에서 destructuring 오타나 누락 키를 조용히 nil로 흘려보내던 문제를 줄여주는 변화다. 동적 언어에서 이런 체크 포인트가 늘어나는 건 운영 코드 안정성에 꽤 실용적이다.
