# Clojure 1.12.0 출시

> Clean Markdown view of GeekNews topic #16639. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=16639](https://news.hada.io/topic?id=16639)
- GeekNews Markdown: [https://news.hada.io/topic/16639.md](https://news.hada.io/topic/16639.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-09-06T20:34:19+09:00
- Updated: 2024-09-06T20:34:19+09:00
- Original source: [clojure.org](https://clojure.org/news/2024/09/05/clojure-1-12-0)
- Points: 2
- Comments: 1

## Topic Body

### Clojure 1.12.0

#### 호환성

##### Java 8 - 호환성 종료 공지
- Clojure 1.12는 Java 8 바이트코드를 생성하지만, 이는 Java 8을 사용하는 마지막 릴리스임.
- 이후 릴리스는 새로운 Java LTS 릴리스로 이동할 예정임.

##### Java 21 - 사용자 코드에서 가상 스레드 고정
- JDK 21에서 가상 스레드를 사용하려는 Clojure 사용자들을 위해, 1.12에서는 `lazy-seq`와 `delay`가 `synchronized` 블록 대신 락을 사용함.

##### 보안
- CVE-2024-22871 보안 취약점 수정.

##### 직렬화
- Clojure 데이터 타입은 Java 직렬화 인터페이스를 구현함.
- 1.11.0에서 두 클래스의 직렬화 식별자가 변경되었으나, 1.11.1에서 이를 되돌림.
- 1.12.0에서는 나머지 클래스에 대한 작업을 완료함.

##### 의존성
- `spec.alpha` 의존성을 0.5.238로 업데이트.
- `core.specs.alpha` 의존성을 0.4.74로 업데이트.

#### 기능

##### 라이브러리 인터랙티브 추가
- JVM을 재시작하지 않고 라이브러리를 추가할 수 있는 새로운 함수 제공.
- `add-lib`, `add-libs`, `sync-deps` 함수가 추가됨.

##### 외부 프로세스 시작 및 제어
- 새로운 네임스페이스 `clojure.java.process` 추가.
- `start`와 `exec` 함수로 외부 프로세스를 제어할 수 있음.

##### 메서드 값
- Java 메서드를 고차 함수로 사용할 수 있는 기능 추가.
- 컴파일러가 자동으로 래핑 함수를 생성함.

##### 자격 있는 메서드
- `Classname/method`, `Classname/.method`, `Classname/new` 구문을 사용하여 자격 있는 메서드를 값으로 사용할 수 있음.

##### :param-tags 메타데이터
- 자격 있는 메서드에 :param-tags 메타데이터를 제공하여 오버로드된 메서드를 해결할 수 있음.

##### 배열 클래스 구문
- 배열 클래스를 나타내는 구문 추가. 예: `String/2`는 2차원 문자열 배열을 나타냄.

##### 함수형 인터페이스
- Java 함수형 인터페이스를 Clojure 함수로 변환하여 사용할 수 있음.

##### Java Supplier 상호 운용성
- `IDeref` 구현체가 이제 `Supplier` 인터페이스를 직접 구현함.

##### 스트림 지원
- `stream-seq!`, `stream-reduce!`, `stream-transduce!`, `stream-into!` 함수로 스트림을 Clojure 방식으로 처리할 수 있음.

##### PersistentVector의 Spliterable 구현
- `PersistentVector`가 이제 병렬 처리를 지원하는 커스텀 스플리터레이터를 제공함.

##### 효율적인 drop 및 partition
- `drop`, `nthrest`, `nthnext` 함수의 성능이 향상됨.
- 새로운 함수 `partitionv`, `partitionv-all`, `splitv-at` 추가.

##### Var 인턴 정책
- 네임스페이스에서 var를 인턴할 때 안정적인 참조를 생성함.
- 1.11.0에서 발생한 문제를 해결함.

#### GN⁺의 정리
- Clojure 1.12.0은 Java 8을 사용하는 마지막 릴리스로, 이후 릴리스는 새로운 Java LTS 릴리스로 이동할 예정임.
- 새로운 기능으로는 라이브러리 인터랙티브 추가, 외부 프로세스 제어, 메서드 값 사용 등이 있음.
- Java와의 상호 운용성이 크게 향상되었으며, 효율적인 drop 및 partition 기능이 추가됨.
- Clojure 사용자들에게 유용한 업데이트로, 개발 생산성을 높일 수 있음.

## Comments



### Comment 28665

- Author: neo
- Created: 2024-09-06T20:34:20+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=41460037) 
- Rich의 YouTube 강의를 보면서 Clojure에 관심을 가지게 되었음. 회사에 도입하는 방법을 고민 중임
  - 단순함에 대한 교훈이 매우 중요하다고 생각함
- 이번 릴리스는 많은 멋진 새로운 기능을 포함하고 있음
  - 개인적으로 add-libs 기능이 가장 마음에 듦
  - 단일 파일 데모나 최소 예제를 작성할 수 있어 공유가 쉬워짐
  - Java 라이브러리를 데모할 때도 유용함
- Clojure/conj 2024까지 기다릴 줄 알았음
  - spec2를 기다리고 있지만 현재는 Malli를 사용 중임
  - 기능 인터페이스 변경으로 유틸리티 매크로를 유지할 필요가 없어짐
- 새로운 기능이 많이 추가되었지만 코드가 그대로 작동함
- add-libs와 sync-deps 기능이 매우 유용함
  - 이번 릴리스는 이전 릴리스와 범위가 다름
- spec의 상태에 대해 궁금해하는 의견이 있음
- Clojure는 Lisp와 Java 생태계를 결합하여 백엔드 시스템 구축에 좋음
  - Java 8 이후의 혁신을 일부 반영하지 않은 점이 아쉬움
- 기능 인터페이스 변경이 매우 중요함
  - Java와의 상호 운용성을 유지하는 것이 Clojure의 강점임
- 많은 멋진 개선 사항이 있음
  - 주로 사용하는 Lisp 계열 언어임
- Clojure가 여전히 강력하게 유지되고 있어 기쁨
