변수의 활용, 그리고 변수의 유효 범위에 따른 접근은 Clean Code를 짜는 데에 있어서 가장 기본기가 되는 핵심 개념이다. Scope는 범위, 영역을 뜻하는 말로 변수 접근 규칙에 따른 유효 범위를 말한다. Scope에 대해서 알아보며 추상화를 실현하고, Clean Code technique를 지닌 개발자로 한 걸음 더 다가가보자.
프로그래밍에서 '스코프(Scope)'의 개념은 변수가 어디서 접근 가능한지를 정의한다. 이는 크게 로컬(Local) 스코프와 글로벌(Global) 스코프로 나뉘며, 변수 선언 위치에 따라 구분된다. 이해가 쉽고 유지보수가 간편한 클린 코드(Clean Code)를 작성하는 데 있어, 스코프 관리는 핵심적인 요소다.
Local Scope는 {}로 정의된 블록 내에서 선언된 변수를 포함한다. 이 로컬 변수들은 해당 블록 내에서만 접근 가능하며, 블록 밖에서는 사용할 수 없다. 예를 들어, 함수 내에서 선언된 변수는 그 함수 밖에서는 사용할 수 없다. 이러한 명확한 스코프 구분은 코드의 가독성과 오류 방지에 크게 기여한다.
반면 Global Scope는 프로그램 전체에서 접근 가능한 변수들을 말한다. 글로벌 변수는 어디에서나 사용할 수 있으나, 과도한 사용은 코드의 복잡성을 증가시키고 예기치 못한 오류를 일으킬 수 있다.
변수 사용 시, JavaScript 엔진은 먼저 현재 스코프의 로컬 변수를 찾는다. 로컬 스코프에서 찾지 못하면 상위 스코프를 확인하고, 필요하다면 글로벌 스코프까지 탐색한다. 해당 변수가 어디에도 없으면 오류가 발생한다.
Local Scope에서는 Global Scope의 변수나 함수에 접근할 수 있지만, 반대로 Global Scope에서는 Local Scope의 변수나 함수에 접근할 수 없다. 이는 스코프가 중첩 가능하다는 것을 의미하며, 함수 안에 다른 함수를 넣는 구조를 가능하게 한다.
Local과 Global Scope에 같은 이름의 변수가 있을 때, Local Scope 내에서는 로컬 변수가 우선적으로 사용된다. 이는 로컬 변수가 글로벌 변수보다 우선순위가 높기 때문이다.
Clean Code를 작성한다는 것은 이러한 스코프의 원칙을 명확히 이해하고 적절히 적용해, 코드의 가독성을 높이고 유지보수를 용이하게 만드는 것을 포함한다. 스코프를 효과적으로 관리하는 것은 JavaScript 프로그래밍에서 변수의 접근성과 생명주기를 정확히 제어하는 데 필수적이다.
Local Scope vs Global Scope
- Scope를 나누는 기준은 '{}' 블록문이다.
- 로컬 변수는 블록 내에서만(해당 Local Scope 내에서만) 유효한 범위를 가지고 있고, 글로벌 변수는 어디에서나 유효한 범위를 가지고 있다.
- Scope는 중첩 가능하다.
- 블록문 내에서 변수를 사용하려고 하면 로컬 변수를 먼저 찾아서 사용하고 없을 경우는 글로벌 변수를 사용한다.
- 지역변수는 함수 내에서 전역 변수보다 더 높은 우선순위를 가진다.