오늘은 스코프(Scope)라는 것과 클로저(Closure)라는 두 가지를 배웠다.
사전 적으로는 쉬운 단어인데 처음 들었을 때는 헷갈려서 강의를 여러번 돌려보면서 이해했던 것 같다.
스코프(Scope)는 변수 접근 규칙에 따른 유효 범위(?)로 변수나 값이 어디서부터 어디까지가 유효한지 판단하는 범위라고 한다.
자바스크립트는 기본적으로 함수가 선언되면 동시에 자신만의 Scope를 가진다고 한다.
안쪽 Scope에서 바깥 변수/함수를 접근하는 것은 가능하고 바깥쪽 Scope에서 안쪽 변수/함수를 접근하는 것은 불가능한 특성을 가지며 이를 Local Scope와 Global Scope를 들어 설명을 해주니 이해가 어느 정도 되었다.
Scope는 중첩이 가능하며 쉽게 말해 함수 안에 함수를 넣는다는 생각으로 이해를 하면 될 것 같다. 그리고 Global Scope는 최상단 Scope로 전역 변수 어디서는 접근이 가능하며 지역변수는 함수 내에서 전역 변수보다 더 높은 우선순위를 가진다고 한다. 마치 수학에서의 괄호 안에 것을 먼저 계산하는 것처럼 말이다.
Scope 들의 여러 예제들을 보면서 처음에는 정말 헷갈려서 손수 개발자 도구에 들어가 하나 둘 입력해보고 나니 어느 정도 이해되었다. 이런 Scope들은 Function Scope와 Block Scope로 나누어 볼 수 있는데 이 두 가지를 변수 선언 시 사용하는 let, const, var 과 같이 이해를 하니 좀 더 와 닿는 느낌이었다. block 범위를 벗어나더라도 같은 Function 안에서는 사용이 가능한 변수 var 선언과 block 범위 안에서만 진행되는 변수 let 선언 그리고 let 선언과 비슷하지만 값이 변하지 않는 상수를 정의할 때 사용하는 const까지...
Scope라는 것이 범위라는 것이라는 사전적 정의는 이미 알고 있었지만 자바스크립트 코딩에서는 위의 점들 말고도 전역변수와 window객체(전역 범위를 대표하는 객체) 라던지 선언 없이 초기화된 전역 변수라던지... 확실히 이해하기 위해서는 많은 노력이 필요할 것 같다.
그리고 늦은 오후에 공부했던 클로저(Closure)...
정말 Scope보다 어려웠으면 어려웠지 많이 헷갈렸던 것 같다. 외부 함수의 변수에 접근 할 수 있는 내부 함수라고 하며 이런 작동 원리를 일컫는 용어(?)라고 말하기도 한다는데 뭔가 이해하기 난해했다. 겨우 초장에 있는 함수도 리턴할 수 있다는 말에 겨우 감을 잡는 듯한... 클로저 함수 안에는 지역변수 / 외부함수의 변수 / 전역 변수의 접근이 전부 가능하며 유용한 클로저의 예제로는 함수 하나가 n개의 인자를 받는 대신, n개의 함수를 만들어 각각 인자를 받게 하는 방법이며 쉽게 말하면 어느 값을 고정해놓고 재사용한다는 것(외부함수의 변수가 저장되어 템플릿 함수와 같이 사용가능)인 커링과 변수를 스코프 안쪽에 가두어 함수 밖으로 노출을 시키지 않는 방법인 클로저 모듈 패턴이 존재한다고 한다.
Scope, Closure 이 두 가지 단어만으로도 내 머릿속이 가득 찼던 하루였다... 언제 확실히 이 개념들을 이해할지는 모르겠지만 좀 더 살펴보아야겠다.
'개념정리' 카테고리의 다른 글
8/7[TIL]매개변수 (0) | 2020.08.07 |
---|---|
8/7[TIL]객체 지향 (0) | 2020.08.07 |
8/6일 [TIL] 테스트 코드 (0) | 2020.08.06 |
8/3~8/4일 (1) | 2020.08.04 |
첫 주차 시작! (7/27 ~ 7/31) (0) | 2020.08.03 |