스위프트에서는 변수와 상수를 사용하여 값을 저장하고 관리할 수 있습니다. 이때, 변수와 상수의 스코프는 중요한 개념입니다. 스코프는 변수나 상수가 유효한 범위를 의미하며, 변수나 상수가 선언된 위치에 따라 결정됩니다.
전역 스코프 (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()
위의 예제에서 localConstant
는 localScopeExample()
함수의 지역 스코프에서 선언되었습니다. 따라서 해당 함수 내에서만 접근할 수 있습니다. 또한, innerConstant
는 if
문 내부에서 선언되었으므로 해당 블록 내에서만 접근할 수 있습니다. 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)
스위프트에서는 가시성을 지정하기 위해 다음과 같은 가시성 범위 지정자를 제공합니다.
private
: 동일한 파일 안에서만 접근 가능fileprivate
: 동일한 파일 안에서만 접근 가능internal
: 동일한 모듈 내에서만 접근 가능 (기본값)public
: 모듈 외부에서도 접근 가능open
: 다른 모듈에서 상속을 받아 재정의할 수 있음
이 가시성 범위 지정자를 사용하여 변수와 상수의 가시성을 확실하게 지정할 수 있고, 필요에 따라 외부에서의 접근을 제한할 수 있습니다.
스위프트에서는 변수와 상수의 스코프가 중요한 개념이므로, 올바른 스코프를 선택하여 변수와 상수를 사용하는 것이 좋습니다. 이를 통해 프로그램의 가독성과 유지 보수성을 높일 수 있습니다.