티스토리 뷰

Develop

클로저 (Closure)

Kyeongti 2021. 11. 26. 17:34

클로저는 폐쇄라는 뜻을 가지고 있다.

어떤 개념을 익히는데 가장 먼저 하면 좋은 것은 영어의 뜻을 아는 것이 좋은 것 같다.

 

클로저는 내가 아는 범위에서는 외부함수의 변수를 은닉하기 위해서 사용하는 것 같다.

클로저를 사용 할때는 외부함수에서 반환값으로 내부함수를 주는데 외부함수를 실행하게 되면 내부함수는 외부함수에 있는 변수를 기억한다. 

 

아래 코드를 보자

function naming(data) { // <= 외부함수
  return{
    changeName: function (_data) { // <= 내부함수
      data = _data;
    },
    getName: function () { // <= 내부함수
      return data;
    }
  }
}

const name = naming('짱구');
name.getName(); // '짱구'

짱구라는 이름 데이터를 naming이라는 함수의 인자로 넣어주고 호출한다.

그다음 getName을 호출한다. 이때 getName은 data를 어디서 받아오는 것인가?

바로 외부 함수의 매개변수인 data를 가져온다.

외부함수의 매개변수를 기억해 놨다가 호출하면 외부함수의 매개변수를 가져오는 것이다.

이것이 클로저다.

 

짱구라는 이름을 철수라고 바꾸고 싶어졌다.

그럴때는 changeName을 쓴다. changeName은 이미 코드에서 정의 되었기 때문에 짱구에서 철로 바뀌겠지만, 만약 없었다면 이름은 바뀔 수 없다.

철수로 바꿔보자.

name.changeName('철수');
name.getName(); // '철수'

철수가 잘 나오는 것을 확인 할 수 있다.

클로저로 인해 외부함수의 매개변수를 오직 내부함수를 통해서만 컨트롤 해줄 수 있었다. 

프로그램이 커지고 복잡해지면 코드를 여럿이서 만들텐데 함수에 함부로 변하면 안되는 매개변수나 세팅값이 있다면 유용하게 쓰일 것 같다.

 

끝! 

 

(이 글은 다듬어지지 않았습니다..)

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함