14
Clojure Programming ETRIBE STG 김김김

Clojure programming-김민지

Embed Size (px)

DESCRIPTION

2014-07-25 Clojure programming-김민지

Citation preview

Page 1: Clojure programming-김민지

Clojure ProgrammingETRIBE

STG 김민지

Page 2: Clojure programming-김민지

1 Clojure 란 ?

Clojure 의 장점

주의할 점

목차

2

3

Page 3: Clojure programming-김민지

1 Clojure 란 ?

Page 4: Clojure programming-김민지

Clojure 란 ?1

> 함수가 정의되는 순간의 환경을 기억하는 함수 , 즉 함수 외부에 선언된 변수를 참조하는 함수 Clojure 는 변수 자신들이 바인드 되는 환경에 한정되지 않는 변수를 가지는 표현식 > 자신이 생성된 함수의 context 에 직접 접근 할 수 있는 함수

Closure 는 ,함수라고도 하고 ,상황이라고도 하고 ,유효범위 (scope or code block)라고도 함

con-text

con-text

Page 5: Clojure programming-김민지

2 Clojure 의 장점

Page 6: Clojure programming-김민지

Clojure 의 장점1

Clojure 를 좀더 잘 알아야 할 이유 !

문제를 일으킬 수 있는 부분이 있으므로 주의활용 방법에 따라 언어 단점 보완

주의 할 점- Closure 를 잘못 사용해서 생기는 오류 조심

장점 활용- Javascript 언어 = ‘ 전역변수’ Closure 해결

- 막강한 표현력 코드 작성 / 독해 인지적 비용 ↓ 추상성 구축 용이 손쉬운 변경 버그 ↓

con-text

로제타 코드

Page 7: Clojure programming-김민지

3 주의할 점

Page 8: Clojure programming-김민지

주의할 점3

Closure 여러 번 호출하기

[ 상황 ]Closure function 를 여러 번 호출해야 하는 경우

Function Test1() {Var innervar = 1;return function closureFun() {

return innervar++;};

}

var innerfun = Test1();Var temp1 = innerfun ();Var temp2 = innerfun ();Var temp3 = innerfun ();Console.log(temp1+” : ” + temp2 + “ : ” + temp3);

temp1, temp2, temp3 의 값은 ?

Page 9: Clojure programming-김민지

주의할 점3

Closure 여러 번 호출하기

[ 상황 ]Closure function 를 여러 번 호출해야 하는 경우

Function Test1() {Var innervar = 1;return function closureFun() {

return innervar++;};

}

var innerfun = Test1();Var temp1 = innerfun ();Var temp2 = innerfun ();Var temp3 = innerfun ();Console.log(temp1+” : ” + temp2 + “ : ” + temp3);

각각 1,2,3 이 출력Innervalue 변수를 참조하여 계속 증가

Page 10: Clojure programming-김민지

주의할 점3

잘못된 사용의 예

[ 상황 ]화면의 두 개의 button UI 를 클릭하면 각각 다른 값을 출력: 1 번 버튼을 누르면 1 출력 , 2 번 버튼 누르면 2 출력

Window.onload = function() {for (var I = 1; I < 3; i++) {

document.getElementById(“btn” + i); addEventListener (“click”, function () {alert(i);},

false);

}}

Button 두 개를 클릭 할 때 ,각 각 어떤 값이 노출될까 ?

Page 11: Clojure programming-김민지

주의할 점3

잘못된 사용의 예

[ 상황 ]화면의 두 개의 button UI 를 클릭하면 각각 다른 값을 출력: 1 번 버튼을 누르면 1 출력 , 2 번 버튼 누르면 2 출력

i = 1 일 때btn1 -> function () {alert (1) }

i = 2 일 때btn2 -> function () {alert (2) }btn1 -> function () {alert (2) }

i = 3 일 때btn3 -> function () {alert (3) }btn2 -> function () {alert (3) }btn1 -> function () {alert (3) }

I 는 참조 된 것으로 그 값이 변경되는 경우 계속 업데이트 반영

Page 12: Clojure programming-김민지

주의할 점3

잘못된 사용의 해결

참조하고 있는 변수 (i) 의 관계를 끊기: immediate function 을 활용하면서 중간과정에서 별도 파라미터 (otherVal) 를 통해 클로저 상황이 아닌 다른 메모리 영역을 바라보게 함

Window.onload = function () {for(var I = 1; I < 3; i++) {{ function(otherVal) {document.getElementById(“btn”

+otherVal).addEventListener(“click”, function() { alert (otherVal);

}, false);}

} I 의 값은 인자로 할당되지만 otherVal라는변수로 대체되어 event handler 로 등록

이것은 변수 i 의 참조와의 연결을 끊는 것

Page 13: Clojure programming-김민지

Q A&

Page 14: Clojure programming-김민지

Thank You