🔥 독립형 매크로

284자
4분

이번 장에서는 독립형 매크로(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으로 호출하여 사용자 정의 컴파일 시간 경고를 생성하고 있습니다.

독립형 매크로의 두 가지 역할

독립형 매크로는 크게 두 가지 역할을 합니다.

  1. #function처럼 값을 생성하는 역할
  2. #warning처럼 컴파일 시점에 어떤 동작을 수행하는 역할

이를 그림으로 표현하면 다음과 같습니다.

lecture image

내장 독립형 매크로 예제

Swift 표준 라이브러리에는 유용한 독립형 매크로가 내장되어 있습니다. 몇 가지 예제를 더 살펴볼까요?

#file

#file 매크로는 현재 소스 파일의 경로와 파일명을 문자열로 반환합니다.

print("현재 파일: \(#file)")
// 출력 예시: 현재 파일: /Users/John/MyApp/main.swift
swift

#line

#line 매크로는 현재 소스 코드의 줄 번호를 정수로 반환합니다.

print("현재 줄 번호: \(#line)")
// 출력 예시: 현재 줄 번호: 42
swift

#error

#error 매크로는 컴파일 시점에 에러를 발생시킵니다.

#error("아직 구현되지 않은 기능입니다!")
swift

위 코드를 컴파일하면 다음과 같은 에러 메시지가 표시됩니다.

error: 아직 구현되지 않은 기능입니다!
text

이처럼 독립형 매크로를 활용하면 코드의 가독성을 높이고, 컴파일 시점에 다양한 작업을 수행할 수 있답니다.