스위프트 소스 파일이 읽혀지는 규칙(Top-level code)

Lily·2022년 4월 13일
1

한 번쯤은 봤을 법한 빨간 줄.
저 말이 무슨 말인지 알아볼게요!

Top-level code 가 뭘까?

스위프트 앱은 함수, 클래스들이 적혀진 많은 파일들로 이루어져 있습니다. 그리고 대부분의 앱 스위프트 파일은 순서에 독립적(order-independent)입니다. 그 말인 즉슨, 30번재 라인에 타입을 정의하고 5번째 라인에서 사용 하는 그런 경우가 있잖아요? 코드를 실행하는 순서가 top-down 방식이 아니란 의미입니다.

그런데 대부분의 스위프트 소스 파일에서는 이 Top-level code가 허용되지 않습니다.
(대부분이라는 말은 가능한 파일도 있다는 의미!)

Top-level code란 함수 본문이나 클래스 내부에 적혀져있지 않은 실행 가능한 코드, 캡슐화되지 않은 실행 가능한 코드를 의미합니다.

스위프트 소스 파일에서는 이 Top-level code가 허용하지 않는 이유는 다수의 소스 파일에 Top-level code가 있으면 프로그램이 어디에서부터 시작해야할지 결정하기 어렵기 때문입니다.

그래서 캡슐화 되지 않은 실행가능한 코드를 작성하면 위와 같은 오류가 나는것이었습니다🫢

playground는 예외

그런데, playground는 좀 다릅니다.

보통 playground를 만들어서 바로 위 와 같은 반복문을 실행할 수 있잖아요?

그 이유는 playground는 Top-level code를 허용하기 때문입니다. 그리고 playground는 순서 의존적(order-dependent)으로 실행됩니다. (위에서부터 아래로 읽음) 사람들이 스위프트 언어와 새로운 API를 좀 더 쉽게 배울 수 있도록 하기 위해서 이렇게 만들었다고 합니다.

Top-level code를 허용하는 단 하나의 파일, main.swift

대부분의 소스 파일에서 Top-level code는 불허라고 했습니다. 대부분이니 가능한 파일도 있다는 말이겠쥬?

그건 바로 프로그램의 Entrypoint로 사용되는 “main.swift”라는 이름의 파일입니다. “main.swift”은 Top-level code가 허용되고, 순서 의존적으로 실행됩니다. 따라서 main.swift의 첫번째 라인의 코드는 암시적으로 프로그램의 메인 엔트리 포인트로 결정됩니다.

iOS 프로젝트에는 main.swift가 없는 대신 @UIApplicationMain 키워드가 entry point를 만들어줍니다. 컴파일러가 @UIApplicationMain 을 보고 메인 엔트리 포인트를 합성해준다고 합니다.


Reference
Files and Initialization - Swift Blog
https://zeddios.tistory.com/69

profile
i🍎S 개발을 합니다

0개의 댓글