어느 위치에 선언했냐에 따라 코드 범위가 결정이 됨
접근시 원하는 대상에 정확히 접근해야 하기 때문에 자신이 속한 범위에서는 유일한 명을 가져야 함
범위는 두가지로 나뉨
1.전역 (Global)
2.지역 (Local)
{ }braces로 범위를 지정할 수 있음
{}braces는 코드 범위를 지정해 줄수도 있지만,
}끝나는 시점에 메모리에서 제거 되므로 lifecycle을 결정함
Global과 Local은 {}braces 밖에 있냐 안에 있냐에 따라 아래와 같이 나눌 수 있다.
Scope 에 따른 특징
1. 동일한 범위에 있으면 변수와 상수에 접근할 수 있다.
2. 동일한 범위에서는 이전에 선언되어있는 변수와 상수에 접근 할 수 있다.
전역 범위에서 선언한 myName이라는 상수는 전역범위에서 사용할 수 있음
하지만 선언후에 출력해야 상수값을 알 수 있음
선언하지 않아 scope에서 myName2를 찾을 수 없음
3. Local Scope 는 상위 Scope나 Global Scope 변수, 상수에 접근이 가능하다.
whatIsScope 함수 안에 myName상수를 출력했을때 접근이 가능하다는 것을 알 수 있음
4.서로 다른 범위에 동일한 이름이 존재하면 가장 인접한 변수나 상수에 접근함
전역 범위에 있는 myName은 개발자 유망주 값을 가진 상수이고
whatIsScope에서 처음에 출력한 myName은 전역변수의 값을 가진 myName을 출력한것이지만,
함수 whatIsScope안에 myName 상수를 선언하게 되면 whatIsScope 함수 안에서는 상수가 선언된 이후 부터 myName은 함수안에 유망주로 출력되는 것을 볼 수 있다. 함수 밖에 있는 myName은 다시 같은 전역범위에 있는 "개발자 유망주"값을 출력한다.
5. 상위 범위에서는 하위범위에 변수와 상수에 접근할 수 없다.
아래 코드와 같이 myName3는 가장 하위범위에 있는 if문 안에 있는 지역범위이다.
이때 상위범위인 whatIsScope 함수에 있는 지역범위나 전역범위에서 myName3를 호출하게 되면 범위내에서 찾을 수 없다고 오류가 남
클래스, 구조체, 열거, 익스텐션,프로토콜
{ 안에 속성과 메소드 멤버 선언자리이므로 표현식이나 문장을 작성 할 수 없음
'Swift랑 친해지기 > Swift문법정리' 카테고리의 다른 글
[Swift] 숫자 리터럴 (Number Literals) (0) | 2022.07.25 |
---|---|
[Swift] 메모리 (Memory) (0) | 2022.07.21 |
[Swift] 이름정의 규칙 (Naming Convention) (0) | 2022.07.21 |
[Swift] 변수와 상수 (0) | 2022.07.21 |
[Swift] 함수(Function)란? (0) | 2022.07.20 |