[swift] 변수와 상수의 스코프 범위

스위프트에서 변수와 상수는 프로그램의 다른 부분에서 액세스할 수 있는 스코프 범위를 가집니다. 스코프는 변수나 상수가 유효한 범위를 나타내며, 해당 범위 내에서만 변수나 상수에 액세스할 수 있습니다.

전역 스코프 (Global Scope)

전역 스코프는 프로그램의 어느 곳에서나 액세스할 수 있는 가장 넓은 스코프입니다. 전역적으로 정의된 변수나 상수는 어떠한 함수나 블록의 스코프에서도 사용할 수 있습니다. 전역 스코프에서 정의된 변수나 상수는 해당 프로그램이 실행되는 동안 유지됩니다.

let globalConstant = 10

func printGlobalConstant() {
    print(globalConstant) // "10" 출력
}

printGlobalConstant()

함수 스코프 (Function Scope)

함수 내부에서 정의된 변수나 상수는 해당 함수 블록 내에서만 액세스할 수 있습니다. 함수 외부에서는 변수나 상수에 접근할 수 없습니다.

func printLocalVariable() {
    let localVariable = 20
    print(localVariable) // "20" 출력
}

printLocalVariable()
print(localVariable) // Error: Cannot find 'localVariable' in scope

블록 스코프 (Block Scope)

특정 블록 내에서 정의된 변수나 상수는 그 블록 내에서만 액세스할 수 있습니다. 블록은 중괄호 {}로 둘러싸이는 코드 영역을 말합니다. 예를 들어, 조건문이나 반복문의 블록은 해당 조건문이나 반복문 내에서만 유효한 스코프를 가집니다.

if true {
    let blockVariable = 30
    print(blockVariable) // "30" 출력
}

print(blockVariable) // Error: Cannot find 'blockVariable' in scope

중첩 스코프 (Nested Scope)

스위프트에서는 함수나 블록 안에 또 다른 함수나 블록이 중첩될 수 있습니다. 내부 함수나 블록에서는 외부 함수나 블록에서 정의된 변수나 상수에 액세스할 수 있습니다. 그러나 외부 함수나 블록에서는 내부 함수나 블록에서 정의된 변수나 상수에 액세스할 수 없습니다.

func outerFunction() {
    let outerVariable = 40
    
    func innerFunction() {
        let innerVariable = 50
        print(innerVariable) // "50" 출력
        print(outerVariable) // "40" 출력
    }
    
    innerFunction()
    print(innerVariable) // Error: Cannot find 'innerVariable' in scope
}

outerFunction()

요약

스위프트에서 변수와 상수의 스코프는 전역, 함수, 블록, 중첩 등 다양한 범위를 가지고 있습니다. 잘 이해하고 적절하게 사용하여 변수와 상수를 관리하면 더욱 효율적인 코드를 작성할 수 있습니다.


참고 자료: