2020-01-27 TIL

2020-01-27

React Native iOS bridge & Objective-C

TIL이지만 하루동안 본 것은 아니고.. 일주일 봤나

Objective-C

Objective-C를 전혀 모르는 상태에서 공식문서를 읽는것과, 조금이라도 알고 읽는것엔 큰 차이가 있다! 메서드 호출이 일반적인 함수 호출과 완전 다름. 음.. 호출이 아니라 메시지를 보낸다고 해야 맞나?

macro

#define 같은것들을 macro 라고함. preprocessor에서 처리되는 부분이라 컴파일 과정의 밖에 있음.

그냥 상수를 정의하는데 젤 많이 쓰이겠지만, 일종의 함수를 정의할 수 있을 정도의 문법 지원이 된다.

RN의 BrideModule(RCTBridgeModule.h)에 각종 매크로를 정의해놨다. (xcode에서는 go to definition 기능으로 쉽게 볼 수 있다. 아니라면 소스코드를 열어보자.)

Objective-C 클래스를 RN의 모듈로 등록하는데 사용되는 RCT_EXPORT_MODULE() 등이 있음.

RCT_EXPORT_METHOD() 를 이용해 클래스나 인스턴스의 메서드를 노출시킬 수 있다.

필수적인 것들은 공식문서를 참조하고, 공식문서 가이드에 소개되지 않은 매크로들도 소스코드에 정의 및 설명 되어있으니 필요를 느낄 때 뒤져보면 되겠음.

문법

이거 보고나서 약간 읽을 수 있게 됨.

http://snowhouse-textcube.blogspot.com/2010/01/%EC%95%84%EC%9D%B4%ED%8F%B0-%EA%B0%9C%EB%B0%9C-%EC%99%84%EC%A0%84-%EC%B4%88%EB%B3%B4%EB%8F%84-%EB%B3%B4%EB%8A%94-objective-c-%EA%B8%B0%EC%B4%88%EA%B0%9C%EB%85%90.html

이것도 발췌독 https://www.tutorialspoint.com/objective_c/index.htm

React Native - iOS bridge

당연하지만, Objective-C를 기본으로 구현이 되어있음.

매크로에 의존하고 있는데, swift는 매크로를 지원하지 않아서 결국은 objective-c 코드가 최종 경계면이 된다.

swift로 작성한 코드를 objective-c가 볼 수 있도록 @objc 를 달아가며 호환 작업을 해줘야 함. (bridging header는 덤)

그걸로 끝이 아니고, RCT_EXTERN_MODULE를 구현해 스위프트 클래스와 메서드를 objective-c 코드에서 RN에 노출시켜야 한다.

(swift모듈) with @objc -> (objective-c 브릿지) -> RN모듈

RN은 objective-c코드를 통해서만 모듈 등록이 가능하므로, swift 코드를 objective-c 코드로 감싸 RN모듈로 등록하는것

참고자료는 공식문서가 짱인거같지만 iOS개발 해본적이 없어서 이해하기엔 부족하다.

Objective-C 프로젝트에서 Swift 코드 사용하기

http://seorenn.blogspot.com/2014/08/objective-c-swift.html

Swift 프로젝트에서 Objective-C 코드를 함께 사용하기

http://seorenn.blogspot.com/2014/07/swift-objective-c.html

[Swift] Objective C 프로젝트에서 Swift 를, Swift 프로젝트에서 Objective C 를 사용하기

https://beankhan.tistory.com/187

사실 위 글들 읽어도 어떻게 호환시키는지 방법만 알 수 있었다. 타입에 대한 호환성도 다루려면 좀 더 기본기가 필요함.


Minchang Kim
Minchang Kim
웹/앱 개발자 김민창입니다! 좋은 하루 되세요!