2021. 10. 3. 02:39ㆍProgramming Language/Typescript
Bithumb API를 활용하여 가상 자산 정보를 처리하는 과정에서 발생할 수 있는 문제 중 하나는, API 메서드의 반환 타입이 동적으로 변하는 경우입니다. 특히, post /info/balance
메서드는 전달되는 파라미터에 따라 반환되는 값의 타입이 달라지기 때문에, 이 문제를 처리하는 데 유용한 제네릭(Generic)을 활용하는 방법을 다뤄보겠습니다.
이 글에서는 Node.js 환경에서 Bithumb API를 사용할 때 발생할 수 있는 동적 반환 타입 문제를 어떻게 해결할 수 있는지 구체적으로 설명합니다.
1. Bithumb API 기본 개요
Bithumb는 가상 자산 거래소로, 다양한 API를 제공하여 사용자가 거래소에서 발생하는 여러 정보를 처리하고 활용할 수 있도록 돕습니다. Bithumb의 API는 RESTful API로, 자산 조회, 거래, 주문 상태 확인 등을 할 수 있습니다. 예를 들어, post /info/balance
메서드는 특정 자산의 잔액을 조회하는 데 사용됩니다.
하지만, post /info/balance
API에서 파라미터 값에 따라 반환되는 데이터 구조가 달라지므로, 이를 처리할 때 문제가 발생할 수 있습니다.
2. post /info/balance
메서드의 동적 반환 타입 문제
post /info/balance
메서드를 호출할 때, 반환되는 값은 currency
파라미터에 따라 다릅니다. 예를 들어, currency
가 BTC
일 경우 BTC
라는 필드로 반환하고, currency
가 ETH
일 경우 ETH
라는 필드로 반환합니다.
이러한 동적 반환 타입 문제를 어떻게 해결할 수 있을까요?
2.1. 동적 반환 타입 문제 예시
const balanceBTC = await bithumbApi.postBalance("BTC");
console.log(balanceBTC); // BTC 잔액 정보가 담긴 객체
const balanceETH = await bithumbApi.postBalance("ETH");
console.log(balanceETH); // ETH 잔액 정보가 담긴 객체
위 코드에서 postBalance
메서드가 currency
파라미터에 따라 반환되는 데이터의 구조가 달라지므로, 타입을 정확히 지정하기 어렵습니다. 이럴 경우, 제네릭(Generic)을 활용하여 이를 해결할 수 있습니다.
3. 제네릭(Generic)을 활용한 해결 방법
TypeScript에서 동적 반환 타입을 처리하는 일반적인 방법은 TypeScript의 제네릭(Generic)을 활용하는 것입니다. 제네릭을 사용하면, 함수나 클래스가 사용할 타입을 외부에서 지정할 수 있어, 타입 안전성을 유지하면서 동적으로 변하는 값을 처리할 수 있습니다.
3.1. 제네릭을 활용한 postBalance
메서드 수정
postBalance
메서드를 제네릭을 활용하여 동적으로 반환 타입을 지정하는 방법을 살펴보겠습니다. 우선 currency
파라미터에 따라 반환 타입을 정의해보겠습니다.
// 제네릭을 사용하여 반환 타입을 동적으로 처리
async function postBalance<T>(currency: string): Promise<T> {
const response = await someApiCall(currency); // 실제 API 호출
return response.data; // 반환값
}
// 사용 예시
interface BTCBalance {
BTC: number;
currency: string;
}
interface ETHBalance {
ETH: number;
currency: string;
}
const btcBalance = await postBalance<BTCBalance>("BTC");
console.log(btcBalance.BTC); // BTC 잔액 출력
const ethBalance = await postBalance<ETHBalance>("ETH");
console.log(ethBalance.ETH); // ETH 잔액 출력
3.2. 제네릭 사용의 장점
- 타입 안전성: 각
currency
에 대해 반환되는 데이터의 타입을 명확하게 정의할 수 있습니다. 이를 통해 런타임 오류를 미리 방지할 수 있습니다. - 유연성:
currency
파라미터에 따라 다양한 타입의 데이터를 처리할 수 있습니다. - 가독성: 코드가 더 명확하고 가독성이 좋아집니다.
4. 실제 코드 예시
다음은 postBalance
메서드를 제네릭으로 구현한 후, BTC
와 ETH
의 잔액을 처리하는 실제 코드 예시입니다.
interface BTCBalance {
BTC: number;
currency: string;
}
interface ETHBalance {
ETH: number;
currency: string;
}
async function postBalance<T>(currency: string): Promise<T> {
// 실제 Bithumb API 호출
const response = await fetch(`https://api.bithumb.com/account/balance/${currency}`);
const data = await response.json();
return data as T;
}
// BTC 잔액을 조회
const btcBalance = await postBalance<BTCBalance>("BTC");
console.log(`BTC Balance: ${btcBalance.BTC}`);
// ETH 잔액을 조회
const ethBalance = await postBalance<ETHBalance>("ETH");
console.log(`ETH Balance: ${ethBalance.ETH}`);
위 예시에서는 postBalance
메서드를 제네릭으로 처리하여 BTC
와 ETH
에 대해 각각 다른 타입의 응답을 처리할 수 있도록 했습니다.
5. 결론
이 글에서는 Bithumb API에서 발생할 수 있는 동적 반환 타입 문제를 해결하는 방법을 다뤘습니다. 제네릭을 사용하여 API 호출 시 반환되는 타입을 동적으로 처리하면, 코드의 유연성과 타입 안전성을 확보할 수 있습니다.
제네릭을 활용한 동적 반환 타입 처리 방법은 타입스크립트를 사용한 개발에서 매우 유용하며, 특히 API 호출과 같은 동적 데이터 처리에서 강력한 도구가 됩니다.
여러분도 이 방법을 활용하여 동적 반환 타입 문제를 해결하고, 더 안전하고 효율적인 코드를 작성해보세요! 😊
참고 자료:
- GitHub Issue: 동적 반환 타입 처리 방법
- Bithumb API Documentation
- Bithumb API Documentation POST /info/balance API
이 글은 제네릭을 활용한 동적 반환 타입 처리 방법을 기반으로 작성되었습니다. 추가적인 질문이나 피드백이 있다면 언제든지 댓글로 남겨 주세요! 😊
'Programming Language > Typescript' 카테고리의 다른 글
이펙티브 타입스크립트: 3장 요약 및 핵심 정리 (0) | 2025.01.24 |
---|---|
이펙티브 타입스크립트: 2장 요약 및 핵심 정리 (0) | 2025.01.24 |
TypeScript 의 열거형 (ENUM) 과 대안 패턴 (2) | 2025.01.24 |
이펙티브 타입스크립트: 1장 요약 및 핵심 정리 (0) | 2023.11.02 |