• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

스코프 체인 / 렉시컬 환경

20.07.17 12:46 작성 조회수 267

0

렉시컬 환경을 활용하는 것이 스코프 체인보다 처리 속도가 빠르다는 것의 정확한 의미가 무엇인지 궁금합니다.

렉시컬 환경도 결국 하나의 오브젝트인데, 이 오브젝트가 해쉬의 자료구조를 가지고 있기 때문에 외부 렉시컬 환경을 참조하는 값을 검색하는데 O(1)의 시간복잡도가 들기 때문에 빠른 것인가요...?

스코프 체인은 일단 현재의 스코프(이것도 오브젝트)에서 찾고, 없으면 현재의 오브젝트(스코프)를 벗어나 다른 스코프(즉, 다른 오브젝트)로 검색이 넘어가야 하기 때문에 시간이 더 걸린다는 의미일까요?

답변 1

답변을 작성해보세요.

1

강좌에서 다루고 있습니다만,
모든 Scope와 식별자를 저장하는 Scope Chain이라는 별도의 구조체 개념을 갖기 때문입니다. 이것이 필요한 것은 코드 전체의 식별자를 해결해야 하기 때문입니다. 코드가 1000 라인일 때, 어디에서든 글로벌 변수를 사용할 수 있으며 특히 추가할 수 있으므로 하나로 통합된 구조체가 필요합니다. 따라서 모든 함수에서 Scope Chain 구조체를 갖고 다녀야 하는데, 이것은 콘텍스트의 덩어리 접근과는 차이가 있습니다. 즉, 실행하는 덩어리가 하나가 아니라 두 개라는 점입니다.
스코프가 다른 것, 즉 어떤 함수에서는 사용하지 않는 스코프/식별자도 Scope Chain 구조체에 있으므로 식별자를 해결하기 위해 구조체를 {key: value} 형태로 검색할 때, 필요 이상의 검색을 해야 합니다.

반면, 렉시컬 환경은 정적으로 실행과 관련된 scope와 식별자를 실행 콘텍스트에서 참조하며, Function 오브젝트를 만들 때 정적으로 스코프가 결정되므로 식별자를 해결할 때 검색 속도가 빠릅니다. 두 개의 덩어리가 아니라 하나의 덩어리이므로 실행 콘텍스트라는 개념에도 적합합니다. 물론 이를 위해서 개발자가 코드를 적합하게 개발해야 한다는 전제는 있습니다. 예를 들어 Strict 모드에서 개발하는 것을 들 수 있습니다.