728x90
1. Xcode의 최적화(Optimization) 레벨이란?
최적화 레벨은 코드를 컴파일할 때, 실행 속도/용량/효율을 개선하기 위해 적용되는 컴파일러의 자동 처리 전략
주요 최적화 옵션 (Build Settings > Optimization Level)
설정 이름 | 값 | 설명 |
None | -O0 | 최적화 없음 (디버깅용, 개발 중) |
Fast | -O | 빠른 컴파일을 위한 일부 최적화 |
Fastest, Smallest | -Os | 실행 성능 + 바이너리 크기 최적화 (기본 Release용) |
Aggressive | -O3 | 더 많은 최적화 (주의 필요) |
Whole Module Optimization | -whole-module-optimization | Swift 전용, 모듈 전체로 최적화 |
일반적인 세팅
• Debug 빌드: -O0 (최적화 없음 → 디버깅 쉬움)
• Release 빌드: -Os, -O3 (최적화 적용 → 성능 향상)
2. 최적화가 코드에 미치는 영향
예제 코드:
func add(_ a: Int, _ b: Int) -> Int {
return a + b
}
let result = add(1, 2)
최적화가 없을 때 (Debug -O0)
• 위 코드가 그대로 컴파일됨
• add(1, 2)는 함수 호출로 남아 있음
• 디버깅 가능 (중단점, 스택 추적 등)
최적화가 적용될 때 (Release -O3, -Os)
“인라인 확장(inline expansion)” 발생 (대표적인 최적화 기법 중 하나)
컴파일러가 작은 함수의 실제 내용을 함수 호출이 있는 자리에 ‘복사 붙여넣기’처럼 넣어버림
// 컴파일러가 아래처럼 바꿈
let result = 1 + 2
• 함수 호출을 생략하고 직접 연산으로 치환
• 메서드 호출 오버헤드 제거 → 성능 향상
3. SWIFT_ACTIVE_COMPILATION_CONDITIONS와 #if 분기
컴파일 조건 플래그란?
• Swift에서 #if DEBUG, #if STAGING 같은 조건 분기를 하기 위한 플래그
• 이 플래그는 컴파일 타임에 활성화된 값들만 코드에 포함됨
설정 방법 (이 전 게시물 참조)
Debug.xcconfig
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG
Staging.xcconfig
SWIFT_ACTIVE_COMPILATION_CONDITIONS = STAGING
Swift 코드
#if DEBUG
let api = "https://dev.myapp.com"
#elseif STAGING
let api = "https://staging.myapp.com"
#else
let api = "https://prod.myapp.com"
#endif
이 코드에서 Debug로 빌드하면 오직 #if DEBUG 부분만 컴파일되고 나머지는 아예 버려짐
4. 플래그와 최적화가 만났을 때 생기는 흐름
조건동작
#if DEBUG 사용 + Debug 빌드 (-O0) | 코드 포함됨, 최적화 없음 |
#if DEBUG 사용 + Release 빌드 (-Os, -O3) | DEBUG 조건이 없으므로 해당 코드 블록 제거 |
실전 예제 흐름 요약
1. .xcconfig 구성
// Debug.xcconfig
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG
OPTIMIZATION_LEVEL = -O0
// Release.xcconfig
SWIFT_ACTIVE_COMPILATION_CONDITIONS = RELEASE
OPTIMIZATION_LEVEL = -Os
2. Swift 코드
#if DEBUG
let log = "디버그 모드"
#else
let log = "릴리즈 모드"
#endif
3. 결과
설정포함 코드최적화 수준
Debug | 디버그 모드 코드만 포함 | 최적화 없음 (디버깅 가능) |
Release | 릴리즈 모드 코드만 포함 | 최적화 적용 (인라인 확장, dead code 제거 등) |
728x90
'프로그래밍 > Xcode' 카테고리의 다른 글
[Xcode] Entitlements 파일 (0) | 2025.04.08 |
---|---|
[Xcode] Configuration, xcconfig 정리 (1) | 2025.04.04 |
댓글