3.5.3 호출 스택

3.5.3 호출 스택 (Call Stack)

함수가 호출될 때마다 새로운 평가 프레임이 생성되고, 계산 중 특정 시점의 활성 환경들은 호출 스택을 통해 접근할 수 있어요. 동적 스코프와 렉시컬 스코프의 차이를 이해하려면 호출 스택이 어떻게 동작하는지 알아두면 좋아요.

출처: 문서

본문

3.5.3 호출 스택

함수가 호출될 때마다 새로운 평가 프레임(evaluation frame)이 생성돼요. 계산이 진행되는 동안 특정 시점에 현재 활성화된 환경들은 호출 스택(call stack) 을 통해 접근할 수 있어요. 함수가 호출될 때마다 컨텍스트(context)라는 특별한 구조가 내부적으로 생성되어 컨텍스트 목록에 추가되고, 함수가 평가를 마치면 해당 컨텍스트는 호출 스택에서 제거돼요.

호출 스택의 더 위쪽에서 정의된 변수들을 사용할 수 있게 하는 것을 동적 스코프(dynamic scope) 라고 해요. 변수에 대한 바인딩은 그 변수의 가장 최근(시간상) 정의에 의해 결정되죠. 이는 R의 기본 스코프 규칙, 즉 함수가 정의된 환경에서 바인딩을 사용하는 렉시컬 스코프(lexical scope) 와는 대조적이에요. 특히 모델 수식을 사용하거나 조작하는 일부 함수들은 호출 스택에 직접 접근하여 동적 스코프를 흉내 내야 할 필요가 있어요.

호출 스택에 대한 접근은 이름이 sys.로 시작하는 함수 계열을 통해 제공돼요. 아래에 간단히 정리할게요.

  • sys.call — 지정된 컨텍스트의 호출(call)을 가져와요.
  • sys.frame — 지정된 컨텍스트의 평가 프레임을 가져와요.
  • sys.nframe — 모든 활성 컨텍스트의 환경 프레임을 가져와요.
  • sys.function — 지정된 컨텍스트에서 호출 중인 함수를 가져와요.
  • sys.parent — 현재 함수 호출의 부모를 가져와요.
  • sys.calls — 모든 활성 컨텍스트의 호출들을 가져와요.
  • sys.frames — 모든 활성 컨텍스트의 평가 프레임들을 가져와요.
  • sys.parents — 모든 활성 컨텍스트의 숫자 레이블들을 가져와요.
  • sys.on.exit — 지정된 컨텍스트가 종료될 때 실행할 함수를 설정해요.
  • sys.statussys.frames, sys.parents, sys.calls를 호출해요.
  • parent.frame — 지정된 부모 컨텍스트의 평가 프레임을 가져와요.

더 알아보기 (Learn more)

출처: R Language Definition - 호출 스택