🔥 레거시 코드를 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 영상

채널 보기
행렬의 가장 중요한 연산 - 행렬 곱셈 | 선형대수학
행렬의 기본 연산 - 행렬 덧셈, 스칼라 곱, 전치 | 선형대수학
트라이(Trie) 자료구조: 파이썬으로 삽입(Insert) 연산 구현하기 | Trie 자료구조 이야기
숫자 하나가 AI 모델의 운명을 바꾼다? | 선형대수학
스칼라 곱셈과 내적의 기하학적 의미 | 선형대수학
트라이(Trie)를 이용한 자동 완성 알고리즘 | Trie 자료구조 이야기
투영과 예측, 그리고 선형 결합 | 선형대수학
숫자 하나가 AI 모델의 운명을 바꾼다? | 선형대수학