Skip to content

스코프와 변수 가시성

hong-ik에서 변수의 유효 범위(스코프)를 이해하면 코드를 더 명확하게 작성할 수 있습니다.

전역 스코프

파일의 최상위에서 선언된 변수는 전역 변수입니다. 파일 전체에서 접근할 수 있습니다:

hik
정수 전역변수 = 100

함수 출력하기():
    출력(전역변수)    // 접근 가능

출력하기()    // 100

지역 스코프

함수 내부에서 선언된 변수는 해당 함수 안에서만 유효합니다:

hik
함수 계산():
    정수 지역변수 = 42
    출력(지역변수)    // 42

계산()
// 여기서 지역변수를 접근하면 오류 발생

블록 스코프

만약, 반복 등의 블록 내부에서 선언된 변수는 해당 블록 안에서만 유효합니다:

hik
정수 x = 10

만약 x > 5 라면:
    정수 블록변수 = 20
    출력(블록변수)    // 20

// 블록 바깥에서는 블록변수에 접근할 수 없음

반복문도 동일합니다:

hik
반복 정수 i = 0 부터 3 까지:
    정수 임시 = i * 10
    출력(임시)

// 여기서 i나 임시에 접근할 수 없음

함수 스코프

함수의 매개변수는 함수 내부에서만 유효합니다:

hik
함수 더하기(정수 a, 정수 b) -> 정수:
    정수 결과 = a + b
    리턴 결과

정수 답 = 더하기(3, 7)
출력(답)    // 10
// a, b, 결과는 더하기 함수 바깥에서 접근 불가

중첩 함수에서의 스코프:

hik
함수 외부():
    정수 x = 10

    함수 내부():
        출력(x)    // 외부 함수의 변수 접근 가능

    내부()

외부()    // 10

클로저

함수가 자신이 선언된 환경의 변수를 기억합니다:

hik
함수 카운터생성() -> 함수:
    정수 횟수 = 0

    함수 증가() -> 정수:
        횟수 += 1
        리턴 횟수

    리턴 증가

함수 세기 = 카운터생성()
출력(세기())    // 1
출력(세기())    // 2
출력(세기())    // 3

클로저는 생성 시점의 환경을 캡처하므로, 횟수 변수가 함수 호출 사이에도 유지됩니다.

변수 섀도잉

내부 스코프에서 외부와 같은 이름의 변수를 선언하면 외부 변수가 가려집니다:

hik
정수 x = 10

함수 테스트():
    정수 x = 20       // 전역 x를 가리는 새로운 x
    출력(x)           // 20

테스트()
출력(x)              // 10 (전역 x는 영향받지 않음)

블록 내부에서도 동일하게 작동합니다:

hik
정수 값 = 100

만약 true 라면:
    정수 값 = 200     // 외부 '값'을 가림
    출력(값)          // 200

출력(값)             // 100

주의

변수 섀도잉은 코드를 혼란스럽게 만들 수 있습니다. 가능하면 서로 다른 이름을 사용하는 것이 좋습니다.

스코프 규칙 요약

스코프선언 위치접근 가능 범위
전역파일 최상위파일 전체
함수함수 내부해당 함수 내부
블록if/while/for 블록 내부해당 블록 내부
클로저외부 함수의 변수내부 함수에서 접근 가능

모범 사례

  1. 변수는 가능한 좁은 스코프에서 선언하세요 - 필요한 곳에서만 접근 가능하도록
  2. 전역 변수 사용을 최소화하세요 - 전역 상태는 디버깅을 어렵게 합니다
  3. 섀도잉을 피하세요 - 같은 이름의 변수를 중첩 스코프에서 재선언하지 마세요
  4. 함수를 작게 유지하세요 - 스코프가 명확해집니다

Released under the MIT License.