동적 스코프와 정적 스코프의 차이

동적 스코프와 정적 스코프는 프로그래밍 언어에서 변수의 범위(scope)를 결정하는 두 가지 다른 방식입니다. 이 두 스코프는 변수에 접근할 수 있는 위치와 시간을 결정합니다.

동적 스코프

동적 스코프는 변수의 범위가 실행 시간(runtime)에 결정되는 것을 의미합니다. 이는 변수가 호출된 함수 또는 블록의 범위 내에서만 접근할 수 있다는 것을 의미합니다. 다음은 동적 스코프의 예시입니다.

function outerFunction() {
  var x = 10;

  function innerFunction() {
    console.log(x); // x는 동적으로 결정된 스코프 내에서 접근 가능
  }

  innerFunction();
}

outerFunction(); // 출력 결과: 10

위의 예시에서 innerFunctionouterFunction 내부에서 정의되었으며, x 변수를 사용할 수 있습니다. 이는 동적 스코프의 특징입니다. 함수를 호출할 때마다 스코프가 계속 변하므로, 해당 스코프 내의 변수에 계속 접근할 수 있게 됩니다.

정적 스코프

정적 스코프는 변수의 범위가 컴파일 시간(또는 정의 시간)에 결정되는 것을 의미합니다. 이는 변수가 선언된 위치에 따라서만 접근할 수 있다는 것을 의미합니다. 다음은 정적 스코프의 예시입니다.

var x = 10;

function outerFunction() {
  console.log(x); // x는 정적으로 결정된 스코프 내에서 접근 가능
}

function innerFunction() {
  var y = 20;
  outerFunction();
}

innerFunction(); // 출력 결과: 10

위의 예시에서 outerFunction은 전역 스코프에 정의되었으며, x 변수를 사용할 수 있습니다. innerFunction 내부에서 outerFunction을 호출해도 x에 접근할 수 있는 이유는 정적 스코프 때문입니다. 변수 x는 전역 스코프에 있으므로, 어느 곳에서나 접근할 수 있습니다.

결론

동적 스코프와 정적 스코프는 변수의 범위를 결정하는 방식에 있어 중요한 차이를 가지고 있습니다. 동적 스코프는 실행 시간에 스코프가 결정되므로 함수를 호출할 때마다 범위가 변경됩니다. 정적 스코프는 컴파일 시간에 스코프가 결정되므로 변수의 선언 위치에 따라 접근 가능 여부가 결정됩니다. 개발자가 어떤 스코프를 사용할지 결정하는 것은 프로그래밍 언어의 특성과 개발 환경에 따라 다를 수 있습니다.

#dev #programming