blevels

Home / AI / AI 용어사전 / 스코프(Scope) — 변수가 살아있는 코드 영역의 경계선

TERM

스코프(Scope) — 변수가 살아있는 코드 영역의 경계선

게시일 2026-04-30수정일 2026-04-30
공식 링크
On this page

같은 이름의 변수가 함수 안과 밖에서 전혀 다른 값을 가리키는 이유는 무엇인가. 스코프(Scope)는 그 질문에 대한 답이며, 모든 프로그래밍 언어의 변수 동작 방식을 이해하는 출발점이다.

정의

스코프(Scope)란 변수·함수·객체가 유효하게 접근될 수 있는 코드 영역의 경계선이다. 어떤 변수를 특정 위치에서 읽거나 쓸 수 있는지를 스코프가 결정한다. 스코프 밖에서 변수에 접근하려 하면 ReferenceError가 발생하거나 다른 스코프의 동명 변수가 참조된다. AI 코드 생성 도구들도 스코프 규칙을 준수하는 코드를 출력하며, 스코프 충돌은 AI가 생성한 코드에서 가장 자주 발생하는 버그 유형 중 하나다.

스코프의 세 가지 계층

전역 스코프(Global Scope): 프로그램 어디서든 접근 가능한 최상위 영역. 브라우저 환경에서는 window 객체, Node.js에서는 global 객체가 전역 스코프에 해당한다. 전역 변수는 편리하지만 여러 모듈이 동일 이름으로 덮어쓸 위험이 있어 AI 서비스 코드에서는 최소화하는 것이 원칙이다.

함수 스코프(Function Scope): function 키워드로 선언된 함수 내부에서만 유효한 영역. var로 선언한 변수는 함수 스코프를 따른다. 함수 스코프 내의 변수는 함수 외부에서 접근할 수 없어 이름 충돌을 방지한다.

블록 스코프(Block Scope): 중괄호 { } 로 둘러싸인 블록(if, for, while 등) 내부에서만 유효한 영역. letconst는 블록 스코프를 따른다. ES6(ES2015) 이후 도입된 let·const 사용이 현대 JavaScript/TypeScript의 표준이다.

const apiKey = 'global-key'; // 전역 스코프

function fetchAIResponse(prompt) {
  const model = 'claude-sonnet-4-6'; // 함수 스코프

if (prompt.length > 100) {
    let truncated = prompt.slice(0, 100); // 블록 스코프
    console.log(truncated); // OK
  }
  // console.log(truncated); // ReferenceError: truncated is not defined
  console.log(model); // OK
}
// console.log(model); // ReferenceError: model is not defined
AD

스코프 체인과 클로저

스코프는 중첩될 수 있다. 내부 스코프에서 변수를 찾을 때 현재 스코프 → 상위 스코프 → 전역 스코프 순서로 검색하는 구조를 스코프 체인(Scope Chain)이라고 한다.

클로저(Closure)|closure는 스코프 체인의 대표적 활용 패턴이다. 함수가 선언될 당시의 스코프를 "기억"해, 함수가 그 스코프 바깥에서 호출되더라도 원래 스코프의 변수에 접근할 수 있다. AI 서비스에서 API 키나 설정값을 캡슐화할 때 클로저 패턴이 자주 사용된다.

function createAIClient(apiKey) {
  // apiKey는 내부 함수의 클로저로 캡처됨
  return {
    send: async (prompt) => {
      return fetch('/api/ai', {
        headers: { Authorization: `Bearer ${apiKey}` },
        body: JSON.stringify({ prompt }),
      });
    },
  };
}

const client = createAIClient('secret-key');
client.send('안녕'); // apiKey에 접근 가능
AD

활용 사례

  • 모듈 캡슐화: AI 서비스의 API 키·설정값을 모듈 스코프로 제한해 외부 노출 차단.
  • 루프 변수 격리: for 루프에서 var 대신 let을 사용해 루프 인덱스를 블록 스코프로 격리, 비동기 콜백의 변수 캡처 버그 방지.
  • 클로저 기반 캐싱: 외부에서 직접 수정할 수 없는 캐시 맵을 클로저로 구현해 AI 응답 중복 요청 방지.

관련 용어

  • closure — 스코프 체인을 기억하는 함수
  • var-let-const — 스코프 범위가 다른 세 가지 변수 선언 방식
  • hoisting — var와 함수 선언이 스코프 최상단으로 끌어올려지는 동작
  • module — 파일 단위의 독립적 스코프를 제공하는 JavaScript 모듈 시스템
AD

백링크

이 문서를 참조하는 다른 페이지입니다.