🔥 독립형 매크로
이번 장에서는 독립형 매크로(Freestanding macros)에 대해 알아보도록 하겠습니다. 독립형 매크로는 함수나 메서드 외부에서 독립적으로 사용할 수 있는 매크로입니다. 이들은 코드의 어느 곳에서나 자유롭게 호출할 수 있으며, 컴파일 시점에 특정 동작을 수행하거나 값을 생성하는 역할을 합니다. 독립형 매크로는 #
기호로 시작하며, 그 뒤에 매크로의 이름과 필요한 인자를 괄호로 묶어 사용합니다.
독립형 매크로 호출하기
독립형 매크로를 호출하려면 매크로 이름 앞에 #
기호를 붙이고, 매크로에 전달할 인자가 있다면 괄호 안에 작성하면 됩니다. 아래 예제 코드를 살펴볼까요?
func myFunction() { print("Currently running \(#function)") // #function 매크로 호출 #warning("Something's wrong") // #warning 매크로 호출 }
swift
첫 번째 줄에서는 Swift 표준 라이브러리에 내장된 function()
매크로를 #function
으로 호출하고 있어요. 이 코드를 컴파일하면 Swift는 해당 매크로의 구현체를 호출하고, #function
을 현재 함수의 이름으로 대체합니다.
따라서 위 코드를 실행하고 myFunction()
을 호출하면 "Currently running myFunction()"이 출력되는 거죠.
두 번째 줄에서는 warning(_:)
매크로를 #warning
으로 호출하여 사용자 정의 컴파일 시간 경고를 생성하고 있습니다.
독립형 매크로의 두 가지 역할
독립형 매크로는 크게 두 가지 역할을 합니다.
#function
처럼 값을 생성하는 역할#warning
처럼 컴파일 시점에 어떤 동작을 수행하는 역할
이를 그림으로 표현하면 다음과 같습니다.
내장 독립형 매크로 예제
Swift 표준 라이브러리에는 유용한 독립형 매크로가 내장되어 있습니다. 몇 가지 예제를 더 살펴볼까요?
#file
#file
매크로는 현재 소스 파일의 경로와 파일명을 문자열로 반환합니다.
print("현재 파일: \(#file)") // 출력 예시: 현재 파일: /Users/John/MyApp/main.swift
swift
#line
#line
매크로는 현재 소스 코드의 줄 번호를 정수로 반환합니다.
print("현재 줄 번호: \(#line)") // 출력 예시: 현재 줄 번호: 42
swift
#error
#error
매크로는 컴파일 시점에 에러를 발생시킵니다.
#error("아직 구현되지 않은 기능입니다!")
swift
위 코드를 컴파일하면 다음과 같은 에러 메시지가 표시됩니다.
error: 아직 구현되지 않은 기능입니다!
text
이처럼 독립형 매크로를 활용하면 코드의 가독성을 높이고, 컴파일 시점에 다양한 작업을 수행할 수 있답니다.