본문 바로가기
iOS Swift/문법

Swift Scope 코드의 범위

by 야고이 2024. 3. 13.
728x90

240313

이미 듣고 정리한 내용인데도 새롭다,,,, 


강의

//전역 범위 Global Scope {} 이거 밖에
//지역 범위 Local Scope {} 이거 안에



//#1 == #2 동일한 스코프
let g1 = 123 //#2에서 g1 사용 못함
print(g2) //여기까지만 실행 하면 g2 을 인식 할 수 없다
//error: algorithm.playground:13:7: error: cannot find 'g2' in scope
//print(local1) //에러 상위 스코프는 하위 스코프에 접근 할 수 없다

func doSomething() {
    // #3 == #5 동일한 스코프
    //로컬 스코프에선 상위 스코프에 접근 할 수 있다
    //    print(g1)
    //    print(g2)
    let g1 = 789
    print(g1) // 789 출력. 서로다른 스코프에 동일한 이름이 존재한다면 가장 가까운 스코프에 있는 이름을 사용한다
    
    let lacal1 = 123
    //    print(local2) //local2를 선언하기 전이라 에러남
    
    if true {
        // #4
        print(lacal1) //문제 없이 접근가능 위에 선언되어 있기 때문
        //        print(local2)  //접근할 수 없음.선언되기 전이기 때문. 글로벌 스코프가 아니면 이미 선언되어 있는것만 접근가능
        let local3 = 123 //현재 스코프 안에서만 접근 가능하고 스코프가 끝나면 메모리 공간도 사라진다 그래서 상위 스코프에서 접근불가
    }
    //#5 == #3
    let local2 = 123
    //    print(local3) //error 하위 스코프에 선언되어 있기 때문에 접근할 수 없음
}

//#2 == #1
//let g1 = 456 // 에러남
let g2 = 456
print(g2)

struct Scope {
    //#6
    //error 선안이 와야하는데 print 는 선언하는 코드가 아니라 에러남
    //Declaration Scope
    //    print(g1)
    //    print(g2)
    
    func doSomething() {
        //#7
        //g1 g2에 접근 가능
        //        print(g1) 프린트가 왜 안찍히나 했더니 한게 없어서 안찍히는거네
    }
}

/*
 1. 동일한 스코프에 접근할 수 있다
 2. 글로벌 스코프에서는 선언 순서에 상관없이 접근할 수 있다
 3. 글로버 스코프에서 만들어진 메모리는 실행이 종료 되면 사라진다 프로그램 실행이 끝나면
 4. 스코프가 다르면 같은 이름으로 실행 할 수 있다
 5. 글로벌 스코프 외엔 스코프의 끝을 정확히 할 것 !!!잘 닫아랑
 */

 

로컬 스코프에선 상위 스코프에 접근 할 수 있다

 

 

질문 !!

첫번째 print(g2) 왜 값이 0으로 나옴?
중간에 g1 프린트 왜 안찍히지 ㅠㅠ 옆에두 안나옴 그리고 글씨 색도 흰색이야

 

728x90

댓글