티스토리 뷰

컨퍼런스/WWDC

[WWDC 2023] Swift와 C++ 같이 사용하기

말차프라푸치노 2023. 6. 21. 16:49

Apple WWDC 2023

 

WWDC 2023에서 C++과 관련해 새로운 내용이 발표되었다. 이번 글에서는 Swift와 함께 C++를 사용하는 법을 배워보자.

 

 

Mix Swift and C++ - WWDC23 - Videos - Apple Developer

Learn how you can use Swift in your C++ and Objective-C++ projects to make your code safer, faster, and easier to develop. We'll show you...

developer.apple.com

 

영상에서 확인할 수 있지만 크게 추가된 기능은 3가지이다. 

 

  1. Objective-C 브릿지 레이어 없이 C++ 코드 사용하기
  2. C++ 코드에서 Swift 코드 사용하기
  3. Swift에서 C++ 라이브러리 사용하기

 

 

기존에 Swift에서 C++ 코드를 사용하려면 직접 사용하지 못하고 Objective-C 브릿지 헤더를 거쳐서 사용했어야 했다.

기존에는 ObjC를 거쳐야 했다.

 

 

MacOS 14.0, XCode 15.0 이상 부터는 Swift 코드에서 바로 C++ 프레임워크 코드를 사용할 수 있고, C++에서도 Swift 코드를 사용할 수 있다.

우리 소통해요~

 

C++ 코드 사용하는 법은 간단하다. C++ 프레임워크를 추가해 주고 Project - Build Settings - Swift Compiler - Languages 에서 설정을 C/Objective-C -> C++/Objective-C++ 로 변경해주면 된다.

 

WWDC 2023 - Mix Swift and C++

 

설정 해주고 빌드가 성공하면 Swift 모듈처럼 C++ 프레임워크를 import할 수 있다.

WWDC 2023 - Mix Swift and C++

 

Jump To Definition (단축키 cmd + 마우스 좌클릭)를 통해 모듈의 정의로 들어가면, Swift 컴파일러가 C++ 코드를 Swift API로 생성해준 것을 확인할 수 있다.

 

 

WWDC 2023 - Mix Swift and C++

 

Swift에서 C++ 클래스와 메소드를 사용하면 된다.

WWDC 2023 - Mix Swift and C++

 

 

C++ 에서도 Swift코드를 사용할 수 있다. 예제에서는 Objective-C++에서 SwiftUI 코드를 호출했다.

 

우선 swift 헤더를 추가해준다.

WWDC 2023 - Mix Swift and C++

 

 

Objective-C++ 버튼 코드 안에 SwiftUI의 Image Picker 코드를 작성해준다.

WWDC 2023 - Mix Swift and C++

 

Swift코드를 사용하는 것처럼 C++ 코드를 손쉽게 사용할 수 있다.

 

참 쉽죠잉?

 

 

WWDC 2023 - Mix Swift and C++

 

Swift는 대부분의 c++ 컬렉션을 가져올 수 있다. Swift는 함수 템플릿 및 클래스 template specialization을 처리할 수 있다. 또 공유 포인터 및 유사한 사용자 정의 타입을 사용해 메모리를 관리할 수 있다.

 

WWDC 2023 - Mix Swift and C++

 

C++에서도 구조체, 클래스, 메소드 등 Swift API를 사용할 수 있다.

 

 

값 타입 변환

앞서 본 것처럼 Swift 컴파일러가 C++ 코드를 Swift API로 자동 변환해준다. 이 때 스마트 포인터와 같은 C++ 코드를 안전한 Swift 코드로 바꿔줄 필요가 있다.

 

여기서 안전 = 값 타입이다.

 

스마트 포인터는 Swift에서 클래스를 생각하면 된다. Swift는 ARC를 통해 자동으로 클래스(참조 타입)를 메모리 해제해준다. 

 

구글 스마트 포인터 검색

 

WWDC 2023 - Mix Swift and C++

 

Swift는 값 타입과 참조 타입을 가진다. 그에 반해 C++는 값 타입만을 가진다.

 

영상에서는 라이프 타임 이슈, 참조 불가능한 메모리 접근과 같은 참조 타입의 단점들이 나온다. 이를 방지하기 위해 C++ -> Swift 변환시 기본적으로 값 타입으로 변환을 해준다고 설명한다.

 

WWDC 2023 - Mix Swift and C++

 

C++ 타입은 위 사진과 같이 Swift 타입으로 변환된다. C++ 벡터(vector)를 예시로 들자 

 

Swift는 벡터를 구조체로 가져온다. (값 타입으로) 벡터로 가져온 구조체와 Swift 다른 구조체가 다른 점은, Swift 구조체는 라이프 사이클을 관리하기 위한 copy constructor/ destructor 를 사용한다는 것이다. -> Swift 구조체는 copy-on-write를 한다.

 

벡터 구조체의 경우 constructor는 주로 깊은 복사를 한다. copy-on-write를 하는 배열과 다르게, 복사하면 모든 엘리먼트가 다 복사된다.

 

 

 

그렇다면 무조건 C++ 클래스를 값 타입으로만 사용해야하는 걸까?? 

 

물론 아니다! Swift의 어트리뷰트(Attribute)를 사용해 간편하게 참조 타입으로 바꿔줄 수 있다.

 

WWDC 2023 - Mix Swift and C++

 

SWIFT_SHARED_REFERENCE(retain, release) 어트리뷰트를 사용해 강제로 Swift의 포인터/레퍼런스 타입으로 바꾼다. → unsafePointer를 간접적으로 없앤다.

 

ARC를 위해 Swift 코드에 reatin함수와 release 함수를 제공해야 한다.

 

WWDC 2023 - Mix Swift and C++

 

코드에서 구조체에 SWIFT_SHARED_REFERENCE(retain, release) 어트리뷰트를 사용했다. CxxRefrenceType을 클래스처럼 사용할 수 있다. 

 

 

C++의 get, set 메소드도 Swift_COMPUTED_PROPERTY 어트리뷰트를 사용하면 Swift의 get set 프로퍼티로 사용이 가능하다.

 

WWDC 2023 - Mix Swift and C++

 

기존의 샘플 코드를 보자. getImages() 메소드를 사용하고 있다. 이는 Swift스럽지 않다.

 

WWDC 2023 - Mix Swift and C++

 

 

C++에서 Swift로 변환된 코드에 Swift_COMPUTED_PROPERTY 어트리뷰트를 사용해준다.

 

WWDC 2023 - Mix Swift and C++

 

get 메소드가 아닌 images 프로퍼티를 통해 접근할 수 있다.

 

WWDC 2023 - Mix Swift and C++

 

 

이제 Swift스러워졌다. 

 

 

 

정리

이번 기능 추가를 통해 C++ 코드를 더 쉽게 사용할 수 있게 되었다. Swift보다 더 많은 사람들이 사용하는 코드인만큼 더 많은 기능을 추가할 수 있을 것이다.

 

WWDC2023에 나온 프로젝트를 다운받아 실행해보려고 XCode 15.0을 설치했는데 macOS 14.0 이상부터 실행이 가능하다. 지금(23년 6월) 베타로 업데이트하는 건 도박이라 정식 버전이 나오면 실행해봐야겠다.

 

애플 공식 샘플 코드

 

 

모바일 게임의 경우 C++ 코드를 래핑해야 하는데 Objective-C 없이 사용함으로써 개발 효율을 상당히 늘어날 것 같다. 이번 WWDC2023에 나온 게임 포팅 툴킷부터 해서 게임에 조금 더 힘을 실어주는 느낌이다. 

 

 

끝끝끝끝끝끝

 

 

 

 

출처

 

Mix Swift and C++ - WWDC23 - Videos - Apple Developer

Learn how you can use Swift in your C++ and Objective-C++ projects to make your code safer, faster, and easier to develop. We'll show you...

developer.apple.com

 

 

 

Swift.org

Swift is a general-purpose programming language built using a modern approach to safety, performance, and software design patterns.

www.swift.org

 

apple 공식 Github에서 C++ <-> Swift 호환 여부를 확인할 수 있다.

 

 

GitHub - apple/swift: The Swift Programming Language

The Swift Programming Language. Contribute to apple/swift development by creating an account on GitHub.

github.com

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함