고성능 ArkTS 프로그래밍: 고효율 코드를 위한 모범 사례
Source: Dev.to
번역할 텍스트가 제공되지 않았습니다. 번역이 필요한 본문을 알려주시면 한국어로 번역해 드리겠습니다.
소개
ArkTS는 개발자에게 강력한 TypeScript‑와 유사한 문법과 런타임 성능 향상을 위한 최적화를 제공합니다. 성능 좋은 애플리케이션을 작성하려면 올바른 프레임워크를 사용하는 것뿐만 아니라 저수준 최적화에 대한 인식도 필요합니다. 이 기사에서는 사용자 인터페이스를 구축하든, 계산 로직을 구현하든, 데이터 구조를 다루든, 더 빠르고 가볍고 효율적인 코드를 작성할 수 있도록 돕는 ArkTS 실전 활용 방법을 살펴봅니다.
불변 변수에 const 사용
변수의 값이 절대 변하지 않는다면 const 로 정의하세요. 이렇게 하면 엔진이 메모리와 접근 경로를 보다 효율적으로 최적화할 수 있습니다.
const index = 10000;
정수와 부동소수점 타입 혼합 금지
ArkTS는 내부적으로 정수와 부동소수점 타입을 구분합니다. 이들을 혼합하면 타입 재평가로 인해 성능이 저하될 수 있습니다.
let num = 1;
num = 1.1; // ❌ Don't mix types after initialization
Avoid Arithmetic Overflow
INT32_MAX를 초과하거나 INT32_MIN 이하가 되는 연산은 엔진을 느린 실행 경로로 밀어넣습니다. +, -, *, **, &, >>>와 같은 연산자에 대해 성능에 민감한 로직에서 오버플로를 피하십시오.
루프 외부에 상수 추출
루프 안에서 클래스 속성이나 정적 값을 반복적으로 접근하면 속성 조회 비용이 증가합니다. 루프 외부에서 캐시해 두세요.
const info = Time.info[num - Time.start];
for (let index = 0x8000; index > 0x8; index >>= 1) {
if ((info & index) !== 0) {
total++;
}
}
클로저보다 매개변수 전달을 선호하세요
클로저는 메모리와 성능 오버헤드를 발생시킵니다. 핫 경로에서는 변수를 함수 매개변수로 직접 전달하세요.
function foo(arr: number[]): number {
return arr[0] + arr[1];
}
핫 경로에서 선택적 매개변수 피하기
선택적 매개변수는 추가적인 undefined 검사를 발생시켜 실행 속도를 늦춥니다. 대신 기본값을 사용하세요.
// Instead of this:
function add(a?: number, b?: number): number | undefined { /* ... */ }
// Use this:
function add(a: number = 0, b: number = 0): number {
return a + b;
}
TypedArray를 사용한 숫자 데이터
산술 연산을 수행할 때, TypedArray(예: Int8Array, Float32Array)는 일반 Array보다 더 나은 성능을 제공합니다.
const arr1 = new Int8Array([1, 2, 3]);
const arr2 = new Int8Array([4, 5, 6]);
let result = new Int8Array(3);
희소 배열 피하기
희소 배열(예: arr[9999] = 0)은 내부적으로 해시 테이블로 저장되며 접근 속도가 훨씬 느립니다. 성능이 중요한 경우 항상 연속된 요소를 가진 배열을 초기화하십시오.
Union 배열 및 혼합 타입 피하기
하나의 배열에 서로 다른 타입(number | string)을 결합하면 최적화가 떨어집니다. 배열당 하나의 일관된 타입만 사용하세요.
let arrInt: number[] = [1, 2, 3];
let arrStr: string[] = ["a", "b"];
빈번한 예외 회피
예외를 자주 발생시키면 비용이 많이 드는 스택 프레임이 생성되어 성능에 부정적인 영향을 미칩니다. 특히 루프 안에서는 빈번한 예외 발생을 조건 검사로 대체하세요.
최적화 전
function div(a: number, b: number): number {
if (a <= 0 || b <= 0) {
throw new Error('Invalid numbers.');
}
return a / b;
}
function sum(num: number): number {
let sum = 0;
try {
for (let t = 1; t < 100; t++) {
sum += div(t, num);
}
} catch (e) {
console.log(e.message);
}
return sum;
}
최적화 후
function div(a: number, b: number): number {
if (a <= 0 || b <= 0) {
return NaN;
}
return a / b;
}
function sum(num: number): number {
let sum = 0;
for (let t = 1; t < 100; t++) {
if (t <= 0 || num <= 0) {
console.log('Invalid numbers.');
}
sum += div(t, num);
}
return sum;
}
결론
성능이 뛰어난 ArkTS 코드를 작성한다는 것은 불필요한 타입 변환을 최소화하고, 메모리 사용량을 줄이며, 무거운 예외를 피하고, 시스템에 맞는 데이터 타입을 사용하는 것을 의미합니다. 이러한 모범 사례를 개발 워크플로에 통합하면 더 빠른 애플리케이션을 작성할 뿐만 아니라 성능‑민감한 환경에서 코드 유지보수성과 신뢰성을 향상시킬 수 있습니다. ArkTS로 개발하거나 HarmonyOS를 탐색하고 있다면, 이러한 작고 집중된 변경을 채택함으로써 큰 성능 향상을 얻을 수 있습니다. 즐거운 코딩 되세요!