공부해봅시당
[CS 기초] 스코프(Scope) 본문
프로그래밍에서 "스코프(Scope)"는 변수, 함수, 객체 등의 식별자(identifier)들이 어디까지 접근 가능한지, 즉 그들의 가시성(visibility)과 생명주기(lifetime)를 정의하는 데 사용되는 용어
스코프는 식별자들이 프로그램의 어떤 부분에서 유효한지 결정하며, 이를 통해 어디서 어떻게 식별자들을 찾을 수 있는지를 규정
스코프의 종류
- 글로벌 스코프(Global Scope)
프로그램의 어디서든 접근 가능한 식별자들을 포함
전역 변수, 전역 함수 등이 이에 해당
var globalVar = "This is a global variable";
function checkScope() {
return globalVar;
}
console.log(checkScope()); // "This is a global variable"
globalVar는 글로벌 스코프에 선언되어 있어서, 프로그램의 어느 곳에서든지 접근할 수 있음
- 로컬 스코프(Local Scope)
특정 코드 블록 내에서만 접근 가능한 식별자들을 정의
함수 내부에 정의된 변수가 대표적인 예
function myLocalScope() {
var localVar = 'I am local'; // localVar는 로컬 스코프 변수입니다.
console.log(localVar); // 여기서는 localVar에 접근 가능합니다.
}
myLocalScope(); // 'I am local' 출력
console.log(localVar); // 에러 발생! localVar는 함수 밖에서는 접근 불가능합니다.
localVar는 myLocalScope 함수 내부에 선언되었으므로, 이 변수는 로컬 스코프를 가지고 있음
함수 내부에서는 이 변수에 접근하여 그 값을 출력할 수 있지만, 함수 외부에서 localVar에 접근하려고 하면 ReferenceError가 발생하여 변수가 정의되지 않았다는 것을 알려줌
- 블록 스코프(Block Scope)
{}로 둘러싸인 코드 블록 내에서만 유효한 식별자들을 의미
ES6에서 let과 const로 선언된 변수들은 블록 스코프를 가짐
function exampleBlockScope() {
if (true) {
let blockScopedVar = "This is block-scoped";
console.log(blockScopedVar); // "This is block-scoped"
}
console.log(blockScopedVar); // ReferenceError: blockScopedVar is not defined
}
exampleBlockScope();
let 키워드로 선언된 blockScopedVar는 if 문의 블록 내에서만 유효
이는 블록 스코프의 예시로, 해당 변수는 선언된 블록({ ... }) 내에서만 접근할 수 있음
- 함수 스코프(Function Scope)
함수 내부에서만 접근 가능한 식별자들을 의미
자바스크립트에서 var로 선언된 변수들은 함수 스코프를 가짐
function exampleFunction() {
var functionScopedVar = "This is function-scoped";
console.log(functionScopedVar); // "This is function-scoped"
}
exampleFunction();
console.log(functionScopedVar); // ReferenceError: functionScopedVar is not defined
functionScopedVar는 exampleFunction 함수 내에서 선언되었고, 오직 이 함수 내부에서만 접근 가능
스코프의 중요성
- 네임스페이스 관리
스코프는 변수 이름 충돌을 방지하는 데 도움을 줌
- 메모리 효율성
로컬 스코프에 있는 변수들은 해당 스코프를 벗어날 때 메모리에서 해제될 수 있으므로, 메모리 사용을 최적화함
- 보안성
스코프를 통해 프로그램의 다른 부분에서 접근할 필요가 없는 변수를 숨겨 정보를 보호할 수 있음
스코프는 프로그래밍 언어의 핵심 원리 중 하나로, 코드의 구조와 설계, 그리고 디버깅에 있어 중요한 역할을 함
'STUDY > CS' 카테고리의 다른 글
[CS 기초] 정적 스코프(Static Scope) vs 동적 스코프(Dynamic Scope) (0) | 2023.11.06 |
---|---|
[CS 기초] 렉시컬 스코프, 스코프 체인, 클로저의 관계 (1) | 2023.11.06 |
[CS기초] 렉시컬(lexical) 환경 (1) | 2023.11.03 |
[CS 기초] DSL(Domain-Specific Language) vs GPL(General Purpose Language) (0) | 2023.11.03 |
[CS 기초] 스크립트 언어(Scripting Language) vs 컴파일 언어(Compile Language) (1) | 2023.11.01 |