🔥 레거시 코드를 Swift 패키지로 감싸기

186자
3분

레거시 코드를 패키징하다 보면 여러 가지 상황에 부딪힐 수 있어요. 가령 여러분이 만들고 있는 코드가 Swift 패키지로도 빌드되고, 그렇지 않은 방식으로도 빌드되는 경우가 있겠죠? 대표적인 예로 Xcode에서도 빌드되고 Swift 패키지로도 빌드되는 프로젝트를 패키징하는 상황을 들 수 있어요.

이런 경우 어떻게 해야 할까요? 코드를 두 번 작성하는 건 너무 비효율적이에요. 그렇다고 한 가지 방식으로만 빌드되게 만들자니 호환성 문제가 생길 것 같고요.

이런 경우에는 전처리기 정의인 SWIFT_PACKAGE를 사용해서 Swift 패키지용 코드를 조건부로 컴파일할 수 있습니다. 코드를 다음과 같이 작성하면 됩니다:

swift
#if SWIFT_PACKAGE
import Foundation
#endif
swift
#if SWIFT_PACKAGE
import Foundation
#endif

이렇게 하면 SWIFT_PACKAGE가 정의되어 있을 때만 Foundation 모듈을 임포트하게 됩니다. 즉, Swift 패키지로 빌드할 때는 필요한 모듈을 사용하고, Xcode로 빌드할 때는 그 모듈을 사용하지 않게 되는 거죠.

이런 식으로 전처리기 정의를 활용하면 하나의 코드 베이스를 가지고 다양한 빌드 환경에 맞춰 유연하게 대응할 수 있습니다. 예를 들어 Swift 패키지에서는 사용 가능하지만 Xcode에서는 사용할 수 없는 기능이 있다면, 전처리기 정의로 그 부분만 감싸주면 됩니다. 반대로 Xcode에서만 사용 가능한 기능도 마찬가지로 처리할 수 있겠죠.

이렇게 전처리기 정의를 잘 활용하면 하나의 코드 베이스를 다양한 환경에서 빌드할 수 있습니다. 코드 중복도 없애고, 관리도 훨씬 수월해지겠죠? 레거시 코드를 패키징할 때 이 테크닉을 꼭 기억해 두세요!

YouTube 영상

채널 보기
AI는 데이터를 어떻게 분류할까? 벡터의 거리와 KNN 알고리즘 | 선형대수학
AI는 왜 수백 차원의 벡터를 사용할까? 고차원 공간과 행렬 | 선형대수학
3편, B-Tree 탐색 프로세스: 수백 개의 갈림길에서 데이터를 찾는 법
숫자 하나가 AI 모델의 운명을 바꾼다? | 선형대수학
AI에서 고차원 임베딩이 무엇일까?
벡터의 정의와 덧셈 연산 | 선형대수학
Trie 자료구조 파이썬 구현: Search와 Starts With 연산 | Trie 자료구조 이야기
숫자 하나가 AI 모델의 운명을 바꾼다? | 선형대수학