티스토리 뷰

안녕하세요.

요즘 왠 버그 하나 때문에 난리를 치고 있는데 해결이 안되네요ㅠ

(나중에 해결되면 박제할 생각입니다.)

 

아무튼 버그 하나에 시간을 너무 쓰다 보니 오늘은 머리 식힐겸 자주 쓰이는거 공부해봅시다. 

 

혹시 코드 작업 하시다가 아래와 같은 코드를 본 적 있나요?

#if DEBUG   // <- 이거
print("It's Debug")
#else
print("It's not Debug")
#endif

 

if 는 if인데 # 이 붙은 특이한 이 친구가 오늘의 주제입니다.

보통은 조건부 컴파일 지시자 혹은 전처리문이라고 부른다고 합니다.

(저도 쓴 적은 있는데 이렇게 부르는건 처음 알았네요)

 

* 조건부 컴파일 지시자  

- 코드베이스의 특정 부분을 감시하고, 특정 조건이 충족되면 자동으로 실행되는 도구나 시스템

- 쉽게 말해서 상황에 따라 코드를 다르게 굴러가도록 해주는 도구입니다. 

- 당연히 Swift 뿐만아니라 C나 C++ 같이 다른 언어에서도 존재하는 기능입니다. 

 

* 전처리문 : 컴파일이 되기전에 미리 처리되는 문장을 말한다고 합니다. 

- 여기서 중요한 것은 컴파일에 조건을 추가해 원하는 방향으로 코드를 컴파일을 할수있다는 겁니다.

 

* 왜 쓰나요?

- 상황에 따라 코드를 다르게 실행해야 하는 경우 사용됩니다. 

- 주로 디버그냐 아니냐 로 쓰이기도 하고 시뮬레이터냐 아니냐로도 쓰입니다.

- 번거로운 수정이나 코드가 길어지는 것보다 처리가 단순한 편입니다. 

 

* 어떻게 쓰나요?

- #if 조건 : 조건에 맞으면 실행합니다.

- #else : 위 조건에 맞지 않는 경우 실행합니다. 

- #endif : 해당 조건문이 끝났다는걸 알려줍니다.

#if targetEnvironment(simulator)
print("It's simulator")
#else
print("It's iOS")
#endif

- 일반 if 문이랑 동일한데 #이랑 #endif 만 추가 되었다고 생각하시면 됩니다.

 

* 어떤 종류가 있나요?

- 여러가지 종류가 있지만 몇개만 소개해 드리겠습니다.

- 시뮬레이터 구분 

#if targetEnvironment(simulator) // 시뮬레이터이면

- 디버그 구분

#if DEBUG // 디버그이면

- 특정 모듈 사용 여부 (이 안에 모듈이름을 적어주시면 됩니다.)

#if canImport(UIKit)// 모듈 사용 가능 여부

- OS 종류

#if os(iOS) // iOS 인 경우

- swift 버전 

#if swift(<5.0) // swift 버전이 5.0 전이면

 

* 깨알 팁(?)

- 자주 쓰일지는 모르겠으나 설정에서 원하는 이름으로 만들 수 있습니다.

- Targets -> BuildSettings > Swift Compiler - Custom Flags 에서

Other 칸을 자세히 봐주세요.

- "-D이름" 으로 Other Swift Flags 에 추가해주시면 아래처럼 사용이 가능해집니다.

- 디버그는 잘되는데 Release 는 잘 안되더라고요;;(이유는 저도 아직 잘 모르겠습니다) 

 

 

가만 생각하면 코드 쓸때 별 생각 안하고 쓴 것 같은데 

은근히 자주 보게 되는 친구여서 정리해보았습니다. 

 

그럼 오늘도 파이팅입니다.

댓글