공부해봅시당

[CS 기초] 스코프(Scope) 본문

STUDY/CS

[CS 기초] 스코프(Scope)

tngus 2023. 11. 6. 17:09

프로그래밍에서 "스코프(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 함수 내에서 선언되었고, 오직 이 함수 내부에서만 접근 가능

 

 

스코프의 중요성

- 네임스페이스 관리

스코프는 변수 이름 충돌을 방지하는 데 도움을 줌


- 메모리 효율성

로컬 스코프에 있는 변수들은 해당 스코프를 벗어날 때 메모리에서 해제될 수 있으므로, 메모리 사용을 최적화함


- 보안성

스코프를 통해 프로그램의 다른 부분에서 접근할 필요가 없는 변수를 숨겨 정보를 보호할 수 있음


스코프는 프로그래밍 언어의 핵심 원리 중 하나로, 코드의 구조와 설계, 그리고 디버깅에 있어 중요한 역할을 함