0Pricing
TypeScript Academy · 강의

Result 타입 모델링

Result를 사용해 성공과 실패를 데이터로 표현합니다.

Result 타입 모델링은(는) CoddyKit의 무료 TypeScript Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 TypeScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

결과 타입

결과 타입은 어떤 연산이 값과 함께 성공하거나 오류와 함께 실패하는 상황을 모델링하는 판별 유니온입니다. 예외를 발생시키는 대신 반환할 수 있습니다.

결과 타입 정의하기

일반적인 형태는 ok 판별자를 사용합니다. ok가 참이면 value가 있고, 거짓이면 error가 있습니다.

type Result<T, E> =
  | { ok: true; value: T }
  | { ok: false; error: E };

생성 도우미

작은 ok 및 err 도우미를 사용하면 매번 객체 리터럴을 직접 작성하는 대신 결과를 간결하고 읽기 쉽게 만들 수 있습니다.

const ok = <T>(value: T): Result<T, never> => ({ ok: true, value });
const err = <E>(error: E): Result<never, E> => ({ ok: false, error });

결과 반환하기

실패할 수 있는 함수는 ok(value) 또는 err(error)를 반환합니다. 반환 타입을 통해 모든 호출자에게 두 가지 가능성을 알립니다.

function divide(a: number, b: number): Result<number, string> {
  return b === 0 ? err("divide by zero") : ok(a / b);
}

ok로 타입 좁히기

result.ok를 확인하면 유니온 타입이 좁혀집니다. 참인 분기 안에서 TypeScript는 value가 존재한다는 것을 알고, 거짓인 분기 안에서는 error가 존재한다는 것을 압니다.

const r = divide(10, 2);
if (r.ok) console.log(r.value); // 5
else console.log(r.error);

판별자가 안전성을 결정합니다

ok 필드는 컴파일러가 올바른 분기를 선택하게 하는 판별자입니다. 먼저 ok가 참임을 증명하지 않으면 value에 접근할 수 없습니다.

const r = divide(1, 0);
// r.value here is a type error until we check r.ok
if (!r.ok) console.log("err:", r.error);

타입이 지정된 오류

오류는 문자열보다 풍부한 정보를 담을 수 있습니다. 타입이 지정된 오류 유니온을 사용하면 타입을 좁힌 뒤 호출자가 각 종류를 정확하게 처리할 수 있습니다.

type DivErr = { kind: "zero" } | { kind: "overflow" };
function div(a: number, b: number): Result<number, DivErr> {
  if (b === 0) return err({ kind: "zero" });
  return ok(a / b);
}

모든 오류를 빠짐없이 처리하기

오류 타입이 유니온이므로 판별자를 기준으로 한 switch가 모든 경우를 처리하는지 검사할 수 있습니다. 이를 통해 모든 실패 유형이 처리되었는지 확인할 수 있습니다.

const r = div(1, 0);
if (!r.ok) {
  switch (r.error.kind) {
    case "zero": console.log("no zero"); break;
    case "overflow": console.log("too big"); break;
  }
}

기본값 도우미

때로는 값이나 대체값만 원할 수 있습니다. 작은 unwrapOr를 사용하면 읽기 쉽고 실패 처리를 해당 위치에 유지할 수 있습니다.

function unwrapOr<T, E>(r: Result<T, E>, fallback: T): T {
  return r.ok ? r.value : fallback;
}
console.log(unwrapOr(divide(1, 0), -1)); // -1

결과 타입과 예외 발생 방식 비교

Result는 실패를 반환 타입으로 옮기므로 호출자가 반드시 처리해야 합니다. 그 대가로 코드가 더 명시적이 되지만, 예상 가능한 오류에는 대개 그만한 가치가 있습니다.

완전한 예시

지금까지의 내용을 합치면 다음과 같습니다. 도우미를 정의하고, 결과를 반환하며, 사용하기 전에 타입을 좁힙니다. 컴파일러가 오류 분기가 처리되었음을 보장합니다.

function safeParse(s: string): Result<number, string> {
  const n = Number(s);
  return Number.isNaN(n) ? err("NaN") : ok(n);
}
const p = safeParse("42");
console.log(p.ok ? p.value : p.error); // 42

간단 확인

이 레슨을 간단히 확인해 보겠습니다.

복습

결과<T, E>는 { ok: true; value } 또는 { ok: false; error } 형태의 판별 유니온입니다. ok/err 도우미로 만들고 ok를 기준으로 타입을 좁히면 value 또는 error에 안전하게 접근할 수 있습니다. 타입이 지정된 오류를 사용하면 모든 경우를 빠짐없이 처리할 수 있습니다.

자주 묻는 질문

“Result 타입 모델링” 강의는 무료인가요?

네 — “Result 타입 모델링” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 TypeScript Academy 강의 전체를 잠금 해제할 수 있습니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“Result 타입 모델링”에서 뭘 배우나요?

Result를 사용해 성공과 실패를 데이터로 표현합니다. 브라우저에서 직접 실행하는 실습 코드로 TypeScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

TypeScript Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 TypeScript Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“Result 타입 모델링” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 TypeScript Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 TypeScript Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 오류를 발생시키는 문제
  2. Result 타입 모델링
  3. Option과 Maybe 타입
  4. 레일웨이 지향 프로그래밍
← TypeScript Academy(으)로 돌아가기