-
Swift - ScopeProgramming/Swift 2020. 9. 15. 17:31
안녕하세요 BeePeach입니다!
오늘은 Scope에 대해서 공부하려고 합니다.
Scope가 뭘까요? Scope는 코드의 범위입니다.
코드는 접근하거나 적용되는 범위가 존재합니다.
범위가 달라도 접근을 할 수 있을 경우가 있고 범위가 같아도 접근을 못하는 경우도 있습니다.
이제부터 천천히 알아가 보도록 합시다!
Global Scope, Local Scope
Scope는 크게 두 가지로 분류됩니다.
- Global Scope
- Local Scope
그럼 이 두가지를 나누는 기준은 무엇일까요?? 바로 {} (brace) 중괄호입니다.
{} 밖이면 Global Scope
{} 안이면 Local Scope입니다. 간단하죠!
아래 코드를 확인해 봅시다.
여기서 Global Scope에 해당하는 곳은 몇 번일까요?
{} 밖에 있는 Line 1, 2, 3, 4, 12, 14 … 입니다.
그리고 글로벌 스코프에 선언된 상수는 a, c입니다.
그럼 {} 안에 Line 5, 6, 7, 8, 9, 10, 11은 Local Scope겠죠?
그리고 로컬 스코프 안에 하위 스코프로 로컬 스코프가 또 존재할 수 있습니다.
로컬 스코프는 글로벌 스코프의 하위 스코프입니다.
그리고 당연하게 동일한 스코프에선 동일한 이름의 변수와 상수를 선언할 수 없습니다.
같은 스코프인 글로벌 스코프에서 위에서 a 상수를 선언하고 아래 Line 11처럼 a 상수를 또 선언하면 에러가 발생하게 됩니다.
하지만 다른 스코프에서는 같은 이름의 변수나 상수를 선언할 수 있습니다.
스코프에는 5가지 규칙이 존재합니다.
Scope의 5가지 규칙
규칙 1 : 같은 스코프에서 선언된 변수와 상수는 접근이 가능합니다.
Code2와 같이 같은 스코프인 글로벌 스코프에서 a와 c에 접근이 가능합니다.
규칙 2 : 같은 스코프에선 이전에 선언된 변수와 상수에만 접근할 수 있다.
Code3을 보면 같은 스코프인 글로벌 스코프에서 아래 Line 14에 상수 c가 선언되어있는데 위에 Line 4에서 c에 접근하려 하고 있습니다.
이렇게 동일 스코프에선 값을 선언하기 이전에는 값에 접근할 수 없습니다.
규칙 3 : 하위 스코프에서 상위 스코프에 선언된 변수, 상수에 접근할 수 있다.
같은 스코프에서는 아래에 선언돼있는 변수나 상수에는 접근할 수가 없었죠?
하위 스코프에서는 상위 스코프의 상수나 변수가 아래에 선언돼 있어도 접근할 수 있습니다.
하지만 꼭 값을 보장하지는 않습니다.
if 구문의 스코프 안에 c가 선언이 됐고 접근이 가능합니다.
c의 값이 300으로 선언돼 있지만 출력해보면 0이 출력됩니다.
플레이그라운드와 프로젝트에서 각각 다르게 동작할 수 있습니다.
규칙 4 : 상위 스코프에서는 하위 스코프에 선언된 변수, 상수에 접근할 수 없다.
Line 4에서 b를 선언하고 아래 Line 15에 접근할 수 있을까요? 언뜻 보면 가능할 거 같지만 하위 스코프에서 선언된 변수나 상수는 상위 스코프에서 접근이 불가능합니다.
마찬가지로 Line 9에 선언된 변수 d를 상위 스코프인 Line 6에서 사용할 수 없습니다.
하위 스코프에선 상위 스코프에서 선언된 변수, 상수에 접근할 수 있고, 반대인 경우인 상위 스코프에선 하위 스코프에 선언된 변수, 상수에 접근할 수 없습니다. 헷갈리지 않게 기억합시다!
규칙 5 : 다른 스코프에서 같은 이름의 변수, 상수를 선언하면 가장 가까운 스코프에 선언된 값을 따른다.
Line 2에서 e를 선언하고 Line6에서도 e를 선언했습니다.
둘은 다른 스코프이기 때문에 같은 이름이더라도 선언이 가능합니다.
그럼 여기서 Line 10에서 e의 값에 접근하면 어떤 값이 나오게 될까요??
Line 10이 속한 스코프에서 이 부분은 상위 스코프의 상위 스코프 즉, 여기선 글로벌 스코프입니다.
이 부분은 상위 스코프에 있습니다.
규칙 5에 따르면 가장 가까운 스코프의 값을 따르므로 e의 값은 333이 됩니다.
정리
오늘은 이렇게 스코프에 대해서 공부했습니다.
어렵게 생각하지 말고 스코프는 코드의 범위이고 아래의 5개 규칙을 따른다는 것만 기억합시다.
- 같은 스코프에서 선언된 변수와 상수에 접근할 수 있다.
- 같은 스코프에선 이전에 선언된 변수와 상수에만 접근할 수 있다.
- 하위 스코프에서 상위 스코프에 선언된 변수, 상수에 접근할 수 있다.
- 상위 스코프에서는 하위 스코프에 선언된 변수, 상수에 접근할 수 없다.
- 다른 스코프에서 같은 이름의 변수, 상수를 선언하면 가장 가까운 스코프에 선언된 값을 따른다.
참고자료
- https://www.freepik.com/free-photo/high-view-business-cards-curly-brackets_7495446.htm#page=1&query=curly bracket&position=17 [본문으로]
- https://www.freepik.com/free-photo/high-view-business-cards-curly-brackets_7495446.htm#page=1&query=curly bracket&position=17 [본문으로]
728x90'Programming > Swift' 카테고리의 다른 글
Swift - Number Data Type (0) 2020.09.19 Swift - Type Annotation, Type Inference (0) 2020.09.16 Swift - Naming Convention (0) 2020.09.16 Swift - Constants and Variables (0) 2020.09.16 Swift - Swift 코드의 구성요소 (0) 2020.09.15