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

스위프트에서는 변수와 상수를 사용하여 값을 저장하고 관리할 수 있습니다. 이때, 변수와 상수의 스코프는 중요한 개념입니다. 스코프는 변수나 상수가 유효한 범위를 의미하며, 변수나 상수가 선언된 위치에 따라 결정됩니다.

전역 스코프 (Global Scope)

전역 스코프는 소스 코드의 어디에서든 접근할 수 있는 범위를 의미합니다. 전역 스코프에 선언된 변수나 상수는 어디에서든 참조할 수 있고 변경할 수 있습니다. 전역 스코프에 선언된 변수나 상수는 프로그램이 실행되는 동안 계속해서 유지됩니다.

let globalConstant = 10

func globalScopeExample() {
    print(globalConstant) // 전역 스코프의 상수에 접근 가능
}

globalScopeExample() // 출력: 10

지역 스코프 (Local Scope)

지역 스코프는 특정한 코드 블록 내에서만 접근할 수 있는 범위를 의미합니다. 지역 스코프에 선언된 변수나 상수는 해당 코드 블록 내에서만 유효하며, 블록을 벗어나면 사라집니다.

func localScopeExample() {
    let localConstant = 20 // 지역 스코프의 상수
    
    if true {
        let innerConstant = 30 // 내부 블록의 지역 스코프의 상수
        print(localConstant) // 출력: 20
        print(innerConstant) // 출력: 30
    }
    
    print(localConstant) // 출력: 20
    print(innerConstant) // 오류: innerConstant가 선언된 블록 외부에서는 접근 불가
}

localScopeExample()

위의 예제에서 localConstantlocalScopeExample() 함수의 지역 스코프에서 선언되었습니다. 따라서 해당 함수 내에서만 접근할 수 있습니다. 또한, innerConstantif문 내부에서 선언되었으므로 해당 블록 내에서만 접근할 수 있습니다. innerConstant에 접근하려고 할 때는 오류가 발생합니다.

중첩 스코프 (Nested Scope)

중첩 스코프는 내부에 또 다른 스코프가 있는 경우를 의미합니다. 내부 스코프에서는 외부 스코프의 변수나 상수를 참조할 수 있지만, 외부 스코프에서는 내부 스코프의 변수나 상수를 참조할 수 없습니다.

func nestedScopeExample() {
    let outerConstant = 40 // 바깥쪽 스코프의 상수
    
    func innerScope() {
        let innerConstant = 50 // 안쪽 스코프의 상수
        print(outerConstant) // 출력: 40
        print(innerConstant) // 출력: 50
    }
    
    innerScope()
    
    print(outerConstant) // 출력: 40
    print(innerConstant) // 오류: innerConstant가 선언된 블록 외부에서는 접근 불가
}

nestedScopeExample()

nestedScopeExample() 함수에서는 outerConstant라는 변수가 바깥쪽 스코프에서 선언되었습니다. 이 변수는 안쪽 스코프인 innerScope() 함수 내에서 참조할 수 있습니다. 그러나 반대로 안쪽 스코프인 innerScope() 함수 내에서 선언된 innerConstant는 바깥쪽 스코프에서는 접근할 수 없습니다.

가시성 범위 지정자 (Access Modifiers)

스위프트에서는 가시성을 지정하기 위해 다음과 같은 가시성 범위 지정자를 제공합니다.

이 가시성 범위 지정자를 사용하여 변수와 상수의 가시성을 확실하게 지정할 수 있고, 필요에 따라 외부에서의 접근을 제한할 수 있습니다.

스위프트에서는 변수와 상수의 스코프가 중요한 개념이므로, 올바른 스코프를 선택하여 변수와 상수를 사용하는 것이 좋습니다. 이를 통해 프로그램의 가독성과 유지 보수성을 높일 수 있습니다.