[ios] JavaScriptCore와 iOS 네이티브 코드 간의 상호작용 방법

iOS 앱을 개발하다 보면 JavaScript 코드를 iOS 네이티브 코드와 상호작용해야 하는 경우가 있습니다. JavaScriptCore 프레임워크를 사용하면 JavaScript 코드와 Objective-C 또는 Swift 코드 간에 데이터를 교환하고 상호작용할 수 있습니다. 이 글에서는 JavaScriptCore를 사용하여 iOS 앱의 네이티브 코드와 JavaScript 코드 간에 상호작용하는 방법을 알아보겠습니다.

JavaScriptCore란 무엇인가?

JavaScriptCore는 WebKit 프레임워크의 일부로, JavaScript 코드를 실행하고 iOS 및 macOS 애플리케이션에서 JavaScript와 Objective-C/Swift 코드 간의 상호작용을 지원합니다.

JavaScript 코드 실행하기

JavaScriptCore를 사용하여 JavaScript 코드를 실행하려면 JSContext를 생성하고 evaluateScript 메서드를 사용하여 JavaScript 코드를 실행하면 됩니다.

import JavaScriptCore

let context = JSContext()
let result = context.evaluateScript("1 + 2")
print(result?.toInt32() ?? "nil")

위 코드에서 JSContext를 생성한 후 evaluateScript 메서드를 사용하여 “1 + 2”의 결과를 출력합니다.

JavaScript 함수 호출하기

JavaScript 함수를 iOS 네이티브 코드에서 호출하려면 JSValuecall(withArguments:) 메서드를 사용합니다.

let context = JSContext()
context.evaluateScript("function add(a, b) { return a + b; }")
let addFunction = context.objectForKeyedSubscript("add")
let result = addFunction?.call(withArguments: [3, 4])
print(result?.toInt32() ?? "nil")

위 코드에서는 JavaScript 함수 add를 정의하고 iOS 네이티브 코드에서 해당 함수를 호출하여 결과를 출력합니다.

iOS 네이티브 코드 호출하기

JavaScript 코드에서 iOS 네이티브 코드를 호출하려면 JSContext에 네이티브 객체를 추가하고 해당 객체의 메서드를 JavaScript 코드에서 호출할 수 있습니다.

class MyNativeObject: NSObject {
    @objc func sayHello() {
        print("Hello from iOS")
    }
}

let context = JSContext()
let nativeObject = MyNativeObject()
context.setObject(nativeObject, forKeyedSubscript: "myNativeObject" as NSString)

context.evaluateScript("myNativeObject.sayHello()")

위 코드에서는 MyNativeObject 클래스를 정의하고 JSContext에 이 객체를 추가한 후 JavaScript 코드에서 해당 객체의 sayHello 메서드를 호출합니다.

결론

JavaScriptCore를 사용하면 iOS 앱의 네이티브 코드와 JavaScript 코드 간의 상호작용이 가능합니다. JavaScript 코드를 실행하고 함수를 호출하며, iOS 네이티브 코드를 JavaScript 코드에서 호출하는 방법에 대해 알아보았습니다. JavaScriptCore를 적절히 활용하여 iOS 앱의 확장성을 높일 수 있습니다.

이상으로 JavaScriptCore를 사용하여 iOS 네이티브 코드와 상호작용하는 방법에 대해 알아보았습니다.

참고 자료: