SlideShare una empresa de Scribd logo
1 de 39
클로저 나철환
클로저를사용해야되는 이유 클로저는우하하다 Lisp의 특성을 가지고 있다. 함수형 언어이다. 병행 프로그래밍 간단히 만들수 있다. 자바를 포함한다.
클로저– 우하하다
Lisp 특성을 가지고 있다.
왜 Lisp인가?
매크로 – 개발자 자신의 목적대로 변형해서 사용할 수 있도록 만들어 주는 도구이다.
다른 언어에서는 private나 class의 의미가 정해져 있는데 Lisp는 매크로를 이 용해서 새로운 의미로 줄 수 있다. private의의미를 ‘단위  테스트와 직렬화의 경우에는 public이지만, 배포 시에는 private’으로 의미를 바꿀 수 있다.
Lisp는괄호로만 이루어져 있어서 간단하고일관성이 있지만 초보자에게는 걸림돌이이다.  클로저는 이런 어려움을 덜어 주기 위해서 몇 가지 방법을 사용하고 있다.
클로저는 리스트, 맵, 집합 등 다양한 자료 구조를 표현하기 위해 간단한 문법을 제공한다. 예) 함수의 인자는 리스트 대신 벡터로 표현 (즉, () 대신 []으로 표현한다)
쉼표를 공백으로 인식 Lisp 경우 – (1 2 3)                [1, 2, 3]
괄호를 꼭 필요한 곳에만 사용
클로저- 함수형 언어
  함수형 언어 특성 함수는 ‘일급 객체’다. 즉, 함수가 실행 중에 생성되고, 인자를 넘겨지며, 반환될 수 있고, 다른 자료구조처럼 다뤄질 수 있다. 데이터 값은 변경 불가능하다. 함수들은 부수효과를 가지지 않는다.
   과거에 함수형 언어들이 별다른 관심을 얻지 못했는데 , 클로저는 왜 주목을 받는 것인가?
시기 – 멀티코어 하드웨어의 수가 대폭 늘어나고 있고, 함수형 언어는 멀티코어에 이점을 활용할 수 있는 명확한 방법을 제공 대부분 함수형 언어는 동적이지만 클로저는 동적이기 때문에 배우고 접근하기 쉽다. 클로저는 자바 호출은 함수형 접근방식을 취하지 않는다.
클로저– 병행 프로그래밍 간단히 만들 수 있다.
함수형 언어이기 때문에 데이터를 변경하는 것이 불가능하기 때문에 다른 스레드에 의해 데이터 변경되어 오류 나지 않는다. 또한 트랜잭션을 이용해서 어느 순서로 잠궈야 할지 고민할 필요가 없게 된다.
클로저– 자바를 포함한다.
클로저는 자바를 별도의 계층 없이 바로 호출이 이루어 진다. 클로저는 자바를 편하게 호출하기 위해서 여러가지 문법 장치를 있다. (3장에서 자세히~)
클로저 코딩 고고씽~
“Hello World” (println “Hello World”) 출력값 Hello World nil
함수를 하나 만들어 보자
(defn hello [name] (str “Hello, “ name)) 함수를 정의
(defn hello [name] (str “Hello, “ name))     함수 이름
(defn hello [name] (str “Hello, “ name)) Hello는 name이라는 하나의 인자를 받는다.
(defn hello [name] (str “Hello, “ name)) Str은 여러 인자를 받아 하나의 문자열로 연결하는 함수다.
반환 값 #’user/hello #은 이 함수가 크롤저 ‘ver’에 저장 되었음을 나타낸다. user은 이름공간이다. (자세한 것은 2장에서 )
함수 사용 (hello “Stu”) 출력 Hello, Stu
특별 변수
최근에 입력된 표현식 결과 3개를  *1, *2, *3이라는 특별 변수에 저장하고 있다.
(hello “Stu”) 출력값- “Hello, Stu” (hello “Clojure”) 출력값– “Hello, Clojure” (str *1 “ and” *2) “Hello, Clojureand Hello, Stu”
공유 상태 추가하기  (이해를 못해서 죄송합니다.)
클로저 라이브러리
require – 클로저 라이브러리 로드 (require ‘examples.introdution) (take 8 ‘examples.introdution/fibs) 출력 (0 1 1 2 3 5 8 13) 피보나치 수열에 대한 구현 포함
Refer – 현재 이름공간의 모든 이름을 새로운 이른 공간으로 대응  (refer ‘examples.introdution) (take 8 fibs) 출력 (0 1 1 2 3 5 8 13)
use – refer 과 require 모두 사용가능 (use ‘examples.introdution) (take 8 fibs) 출력 (0 1 1 2 3 5 8 13) (use :reload-all ‘examples.introdution) (take 8 fibs) 출력 (0 1 1 2 3 5 8 13)
끝

Más contenido relacionado

La actualidad más candente

하이버네이트의 영속성 컨텍스트와 패치 전략
하이버네이트의 영속성 컨텍스트와 패치 전략하이버네이트의 영속성 컨텍스트와 패치 전략
하이버네이트의 영속성 컨텍스트와 패치 전략Sung Jae Park
 
Welcome to ruby!
Welcome to ruby!Welcome to ruby!
Welcome to ruby!성훈 김
 
Clojure/Chapter3
Clojure/Chapter3Clojure/Chapter3
Clojure/Chapter3destinycs
 
스레드
스레드스레드
스레드xxbdxx
 
Android Programming
Android ProgrammingAndroid Programming
Android ProgrammingJake Yoon
 
[ES6] 5. Destructuring
[ES6] 5. Destructuring[ES6] 5. Destructuring
[ES6] 5. DestructuringHan JaeYeab
 

La actualidad más candente (7)

하이버네이트의 영속성 컨텍스트와 패치 전략
하이버네이트의 영속성 컨텍스트와 패치 전략하이버네이트의 영속성 컨텍스트와 패치 전략
하이버네이트의 영속성 컨텍스트와 패치 전략
 
Welcome to ruby!
Welcome to ruby!Welcome to ruby!
Welcome to ruby!
 
Clojure/Chapter3
Clojure/Chapter3Clojure/Chapter3
Clojure/Chapter3
 
자바스크립트 클래스의 프로토타입(prototype of class)
자바스크립트 클래스의  프로토타입(prototype of class)자바스크립트 클래스의  프로토타입(prototype of class)
자바스크립트 클래스의 프로토타입(prototype of class)
 
스레드
스레드스레드
스레드
 
Android Programming
Android ProgrammingAndroid Programming
Android Programming
 
[ES6] 5. Destructuring
[ES6] 5. Destructuring[ES6] 5. Destructuring
[ES6] 5. Destructuring
 

Similar a 클로저 1

자바와 사용하기2
자바와 사용하기2자바와 사용하기2
자바와 사용하기2destinycs
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java유리 하
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오Taeoh Kim
 
Java collections framework
Java collections frameworkJava collections framework
Java collections framework경주 전
 
Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버Jaejin Yun
 
Introduction to Fork Join Framework_SYS4U I&C
Introduction to Fork Join Framework_SYS4U I&CIntroduction to Fork Join Framework_SYS4U I&C
Introduction to Fork Join Framework_SYS4U I&Csys4u
 
1.Startup JavaScript - 프로그래밍 기초
1.Startup JavaScript - 프로그래밍 기초1.Startup JavaScript - 프로그래밍 기초
1.Startup JavaScript - 프로그래밍 기초Circulus
 
Scala, Scalability
Scala, ScalabilityScala, Scalability
Scala, ScalabilityDongwook Lee
 
[A1]루비는 패셔니스타
[A1]루비는 패셔니스타[A1]루비는 패셔니스타
[A1]루비는 패셔니스타NAVER D2
 
Oop design principle SOLID
Oop design principle SOLIDOop design principle SOLID
Oop design principle SOLIDRyan Park
 
R 기초 : R Basics
R 기초 : R BasicsR 기초 : R Basics
R 기초 : R BasicsYoonwhan Lee
 
애플이 스위프트 프로그래밍 언어를 위해 "훔친" 몇 가지 기능
애플이 스위프트 프로그래밍 언어를 위해 "훔친" 몇 가지 기능애플이 스위프트 프로그래밍 언어를 위해 "훔친" 몇 가지 기능
애플이 스위프트 프로그래밍 언어를 위해 "훔친" 몇 가지 기능ETRIBE_STG
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)Sung-hoon Ma
 
Scala 기초 (2)
Scala 기초 (2)Scala 기초 (2)
Scala 기초 (2)명성 정
 
Programming java day2
Programming java day2Programming java day2
Programming java day2Jaehoonyam
 
7가지 동시성 모델 4장
7가지 동시성 모델 4장7가지 동시성 모델 4장
7가지 동시성 모델 4장HyeonSeok Choi
 

Similar a 클로저 1 (20)

자바와 사용하기2
자바와 사용하기2자바와 사용하기2
자바와 사용하기2
 
9 swift 클로저1
9 swift 클로저19 swift 클로저1
9 swift 클로저1
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오
 
Java collections framework
Java collections frameworkJava collections framework
Java collections framework
 
Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버
 
JDK 변천사
JDK 변천사JDK 변천사
JDK 변천사
 
Introduction to Fork Join Framework_SYS4U I&C
Introduction to Fork Join Framework_SYS4U I&CIntroduction to Fork Join Framework_SYS4U I&C
Introduction to Fork Join Framework_SYS4U I&C
 
1.Startup JavaScript - 프로그래밍 기초
1.Startup JavaScript - 프로그래밍 기초1.Startup JavaScript - 프로그래밍 기초
1.Startup JavaScript - 프로그래밍 기초
 
Scala, Scalability
Scala, ScalabilityScala, Scalability
Scala, Scalability
 
Scalability
ScalabilityScalability
Scalability
 
[A1]루비는 패셔니스타
[A1]루비는 패셔니스타[A1]루비는 패셔니스타
[A1]루비는 패셔니스타
 
Oop design principle SOLID
Oop design principle SOLIDOop design principle SOLID
Oop design principle SOLID
 
R 기초 : R Basics
R 기초 : R BasicsR 기초 : R Basics
R 기초 : R Basics
 
애플이 스위프트 프로그래밍 언어를 위해 "훔친" 몇 가지 기능
애플이 스위프트 프로그래밍 언어를 위해 "훔친" 몇 가지 기능애플이 스위프트 프로그래밍 언어를 위해 "훔친" 몇 가지 기능
애플이 스위프트 프로그래밍 언어를 위해 "훔친" 몇 가지 기능
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)
 
Scala 기초 (2)
Scala 기초 (2)Scala 기초 (2)
Scala 기초 (2)
 
자바 8 학습
자바 8 학습자바 8 학습
자바 8 학습
 
Programming java day2
Programming java day2Programming java day2
Programming java day2
 
7가지 동시성 모델 4장
7가지 동시성 모델 4장7가지 동시성 모델 4장
7가지 동시성 모델 4장
 

Más de samagu0030

자연스러운 세부 수준 변화
자연스러운 세부 수준 변화자연스러운 세부 수준 변화
자연스러운 세부 수준 변화samagu0030
 
카툰 렌더링
카툰 렌더링카툰 렌더링
카툰 렌더링samagu0030
 
[Gpg1권 나철] 2.0 예측 가능한 난수
[Gpg1권 나철] 2.0 예측 가능한 난수[Gpg1권 나철] 2.0 예측 가능한 난수
[Gpg1권 나철] 2.0 예측 가능한 난수samagu0030
 
4장 테스트 자동화의 철학
4장 테스트 자동화의 철학4장 테스트 자동화의 철학
4장 테스트 자동화의 철학samagu0030
 

Más de samagu0030 (7)

자연스러운 세부 수준 변화
자연스러운 세부 수준 변화자연스러운 세부 수준 변화
자연스러운 세부 수준 변화
 
카툰 렌더링
카툰 렌더링카툰 렌더링
카툰 렌더링
 
Fsm
FsmFsm
Fsm
 
[Gpg1권 나철] 2.0 예측 가능한 난수
[Gpg1권 나철] 2.0 예측 가능한 난수[Gpg1권 나철] 2.0 예측 가능한 난수
[Gpg1권 나철] 2.0 예측 가능한 난수
 
픽킹
픽킹픽킹
픽킹
 
픽킹
픽킹픽킹
픽킹
 
4장 테스트 자동화의 철학
4장 테스트 자동화의 철학4장 테스트 자동화의 철학
4장 테스트 자동화의 철학
 

클로저 1