-
궁극적으로 생산성을 향상시켜 준다 → 개발 기간과 비용을 줄여준다.
-
Consumer Reports 실제 사례
Consumer Reports에서 Clojure와 Datomic을 결합해 프로그램을 개발한 결과, 수주에서 수개월에 걸리던 작업을 며칠 만에, 팀 단위로 행해졌던 작업이 한두 명의 개발자로도 개발이 가능해졌다는 내용Clojure <--> Datomic <--> DB ---- SQL DB (Oracle, MySQL, ...) DynamoDB Cassandra Riak Couchbase Infinispan
-
Code Length Measured in 14 Languages (http://blog.wolfram.com/2012/11/14/)
-
개발 속도 향상
-
type-checking 라이브러리 이용 가능
-
core.typed: compile-time checking (type)
-
schema: run-time checking (type + value)
-
-
제공되는 자료형의 수가 적다
It is better to have 100 functions operate on one data structure than 10 functions on 10 data structures.
— Alan J. PerlisClojure Data Types |-- Immutables (= Values) | |-- Simple values | | |-- Integers | | |-- Floating point numbers | | |-- Ratios | | |-- Strings | | |-- Characters | | |-- Symbols | | |-- Keywords | | |-- Booleans | | `-- nil | |-- Collections | | |-- Lists | | |-- Vectors | | |-- Maps | | `-- Sets | `-- Functions `-- Mutables (= References) |-- Identities | |-- Atoms | |-- Refs | `-- Agents |-- Vars `-- Java Objects
-
인터페이스의 단순화: 함수의 조합이 용이
-
clojure.core의 함수 + 매크로 = 577개
cf) Java 8 rt.jar에서 제공되는 클래스 수: 4240개 -
Small is beautiful.
-
전 세계적으로 현재의 소프트웨어 업계가 직면한 가장 큰 현안
개발 비용의 증가 <- 개발 기간의 증가 <- 버그의 증가 <- 프로그램의 복잡도 증가
-
소프트웨어의 복잡도를 제거하는 것이 최대의 해결 과제이다. 그런데 우리나라 업계는 이 복잡성을 당연한 것으로 받아들이는 경향이 있다.
-
필연적(본질적) 복잡성은 제거할 수 없지만, 우연적(불필요한) 복잡성은 제거할 수 있다.
예) 메모리 관리의 자동화 (Garbage Collection), 포인터 연산의 제거 -
Immutable 자료형을 기본으로 하는 함수형 언어는 바로 이 우연적 복잡성을 제거하는 것을 목표로 등장했다.
-
상태(state)를 공유하지 않게 된다.
-
상태의 공유 최소화 → 복잡성의 최소화 → 개발 시간/비용의 최소화
-
함수 간의 의존성 제거 → 함수의 조합이 용이 → 개발의 단순화
-
프로그래밍 단위
-
객체지향에서는 클래스 단위: 클래스 내 메소드들은 멤버 변수의 공유로 인해 상호 의존적
-
함수형 언어에서는 함수 단위
-
-
-
병행(Concurrency) 처리에 유리: 멀티 코어 시대의 필연적 요구사항
-
Persistence(존속) 데이터 구조를 이용: 기존의 데이터를 재활용하는 방식
(def a (list 1 2 3))
(def a {:a 5 :b 6 :c 7 :d 8})
-
멀티 스레딩 프로그래밍의 어려움 해결
-
Garbage Collection의 등장으로 프로그래머의 메모리 직접 관리의 부담에서 해방되었듯이, STM(Software Transaction Memory)의 등장으로 멀리 스레딩 프로그래밍으로부터의 부담에서 해방
-
Clojure의 atom, ref, agent를 이용해 멀티 코어 시대에 효과적으로 대응할 수 있다.
-
신생 언어가 겪는 가장 큰 문제점(라이브러리 부족) 해결(ClojureCLR, ClojureScript)
Clojure 라이브러리들 중 상당수가 Java 라이브러리를 wrapping한 것. -
Java Interop을 통해 쉽게 자바 코드 호출: 단순히 Java Interop 기능을 이용해, Java 코드를 Clojure 코드로 바꾸어도, 소스 코드의 크기가 상당히 줄어든다.
-
자바의 모든 기능과 라이브러리들을 이용할 수 있다.