프로그래밍/Xcode

[Xcode] 최적화(Optimization) 레벨

Joo-Topia 2025. 4. 5.
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

댓글