Scope❓
Swift에서 Scope는 변수나 상수에 접근할 수 있는 코드의 영역을 의미한다.
변수는 코드에서 선언이 되어야, 그 이하의 코드에 접근이 가능하다.
상위스코프에서 선언된 변수와 상수에 접근가능하며, 하위스코프에는 접근할 수 없다.
기준은 중괄호라고 생각하면 된다.
중괄호 내에서 밖에 변수는 접근이 가능하다.
하지만 밖에서 중괄호 내의 변수로 접근은 불가능하다.
func greeting1() {
print("Hello")
var myName = "홍길동"
print(myName)
print(name)
if true {
print(myName)
print(name)
}
}
greeting1() // 여기까지만 실행하면 name이라는 변수가 선언되지 않았기 때문에 에러가 발생
예를들면 name이라는 변수를 선언하지 않고 위의 함수를 실행한다면
print(name)을 실행할 수가 없게 되므로 에러가 발생한다.
Scope의 종류
Scope에는 2가지 종류가 있다.
1. 전역 범위 ( Global Scope )
2. 지역 범위 ( Local Scope )
이 두가지를 나누는 기준도 중괄호이다.
Scope의 기준은 중괄호라고 보면 된다.
let globalVariable = "I'm global"
func exampleFunction() {
let localVariable = "I'm local"
print(globalVariable) // 전역 변수에 접근 가능
print(localVariable) // 지역 변수에 접근 가능
if true {
let innerVariable = "I'm inner"
print(innerVariable) // 내부 변수에 접근 가능
}
// print(innerVariable) // 에러: innerVariable은 if 블록 밖에서 접근 불가
}
print(globalVariable) // 전역 변수에 접근 가능
// print(localVariable) // 에러: localVariable은 함수 밖에서 접근 불가
exampleFunction()
let globalVariable = "I'm global"은 중괄호 밖인 전역 범위에 선언된 전역 변수이다.
let localVariable = "I'm local"은 중괄호 안인 지역 범위에 선언된 지역 변수이다.
전역 변수는 지역 변수의 상위 범위에 선언된 변수이다.
print를 통해 변수를 출력하고자 할 때
전역 변수인 globalVariable은 출력할 수 있지만
지역 변수인 localVariable은 출력할 수 없다.
또한 let innerVariable = "I'm inner"은 if문의 중괄호 내에 선언된 변수이기 때문에 localVariable보다 하위 범위에 선언되어 있다.
그렇기 때문에 중괄호 밖에서 print를 하려고 하면 에러가 발생하게 된다.
이미지로 보면 각 영역은 {}중괄호 나뉘어져 밖에서 안쪽의 변수로 접근은 불가능하지만
안에서 밖의 변수에는 접근할 수 있다.
전역변수(전역범위) > 지역변수(지역범위) > 지역범위안의 중괄호 안의 변수(지역범위 안의 하위범위)
각 상위범위에 접근이 가능하지만 하위범위에는 접근이 불가능하다.
왜 이렇게 접근범위를 제한할까❓
1. 변수 이름 충돌 방지
서로 다른 Scope에서는 같은 이름의 변수를 사용할 수 있다.
2. 메모리 관리
지역 변수는 해당 Scope가 종료되면 메모리에서 해제되기 때문에 메모리관리에 유리하다.
3. 코드 구조화
변수의 사용 범위를 제한하여 코드의 구조를 명확히 하고 가독성을 높일 수 있다.
'Swift > Swift 문법' 카테고리의 다른 글
[ Swift 문법 ] 함수 02 - 오버로딩(overloading) (0) | 2024.07.23 |
---|---|
[ Swift 문법 ] 함수 01 - 함수의 개념과 종류 4가지, 파라미터, 아규먼트 (0) | 2024.07.23 |
[ Swift 문법 ] 튜플(Tuple) (0) | 2024.07.08 |