레일웨이 지향 프로그래밍
try/catch 없이 실패할 수 있는 연산을 연결합니다.
레일웨이 지향 프로그래밍은(는) CoddyKit의 무료 TypeScript Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 TypeScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
철도 비유
철도 지향 프로그래밍에서는 계산을 두 개의 평행 경로, 즉 성공 경로와 실패 경로로 표현합니다. 실패 경로로 전환하면 그곳에 머물면서 나머지 단계를 건너뜁니다.
결과 함수 연결하기
각 단계는 값을 받아 Result를 반환합니다. 첫 번째 실패가 연쇄를 조기에 중단하고 마지막까지 전달되도록 단계들을 연결하려고 합니다.
type Result<T, E> = { ok: true; value: T } | { ok: false; error: E };
const ok = <T>(value: T): Result<T, never> => ({ ok: true, value });
const err = <E>(error: E): Result<never, E> => ({ ok: false, error });map: 성공 값 변환하기
map은 결과가 성공일 때 값에 일반 함수를 적용하고, 실패는 변경하지 않은 채 전달합니다. 따라서 성공 경로에 계속 머뭅니다.
function map<T, U, E>(r: Result<T, E>, f: (t: T) => U): Result<U, E> {
return r.ok ? ok(f(r.value)) : r;
}
console.log(map(ok(2), n => n + 1)); // { ok: true, value: 3 }flatMap: 실패할 수 있는 단계 연결하기
다음 단계 자체가 결과 타입을 반환할 때는 flatMap(andThen이라고도 함)을 사용하십시오. 결과 타입이 중첩되는 것을 막고 실패 시 연쇄를 조기에 중단합니다.
function flatMap<T, U, E>(r: Result<T, E>, f: (t: T) => Result<U, E>): Result<U, E> {
return r.ok ? f(r.value) : r;
}map이 아닌 flatMap을 사용하는 이유
결과 타입을 반환하는 함수에 map을 사용하면 Result<Result<U,E>,E>를 얻게 됩니다. flatMap은 이를 한 단계 평탄화해 하나의 결과 타입으로 유지합니다.
첫 번째 오류에서 조기 중단하기
단계가 err를 반환하는 즉시 이후의 모든 flatMap은 이를 변경하지 않고 전달합니다. 실패 경로로 전환하는 것과 마찬가지로 남은 단계는 실행되지 않습니다.
const start = err("boom") as Result<number, string>;
const out = flatMap(start, n => ok(n + 1));
console.log(out); // { ok: false, error: "boom" }처리 흐름 구성하기
각각 결과 타입을 반환하는 유효성 검사 단계들을 조합하십시오. 첫 번째 실패가 처리 흐름의 결과가 되고, 모두 통과하면 성공 값이 마지막까지 전달됩니다.
function parseNum(s: string): Result<number, string> {
const n = Number(s);
return Number.isNaN(n) ? err("not a number") : ok(n);
}
function positive(n: number): Result<number, string> {
return n > 0 ? ok(n) : err("must be positive");
}처리 흐름 실행하기
flatMap을 연결하면 값이 실패할 수 있는 각 단계를 차례로 통과합니다. 어느 곳에서든 실패하면 연쇄가 중단되고 해당 오류가 나타납니다.
const good = flatMap(parseNum("5"), positive);
console.log(good); // { ok: true, value: 5 }
const bad = flatMap(parseNum("-3"), positive);
console.log(bad); // { ok: false, error: "must be positive" }map과 flatMap 결합하기
실패할 수 있는 단계에는 flatMap을 사용하고 순수한 변환에는 map을 사용하십시오. 두 도구를 함께 사용하면 정상 경로는 직선적으로 유지되고 오류 처리는 자동으로 이루어집니다.
const result = map(flatMap(parseNum("10"), positive), n => n * 2);
console.log(result); // { ok: true, value: 20 }예외 처리 구문이 필요하지 않습니다
전체 처리 흐름이 값으로 성공과 실패를 표현합니다. try/catch가 필요하지 않으며, 각 단계의 타입이 오류 경로를 명시적이고 피할 수 없게 만듭니다.
규모가 커져도 좋은 이유
철도 지향 코드는 복잡한 작업 흐름을 읽기 쉽게 유지합니다. 각 단계가 작고 순수하며, 오류는 자동으로 전파되고, 단계를 추가해도 기존 오류 처리가 복잡해지지 않습니다.
간단 확인
이 레슨을 간단히 확인해 보겠습니다.
복습
철도 지향 프로그래밍은 Result를 반환하는 단계들을 map(성공 변환) 및 flatMap/andThen(실패할 수 있는 단계 연결 및 중첩 결과 타입 평탄화)과 함께 연결합니다. 첫 번째 err가 나머지 단계를 조기에 중단시키고, try/catch 없이 마지막까지 전파됩니다.
자주 묻는 질문
“레일웨이 지향 프로그래밍” 강의는 무료인가요?
네 — “레일웨이 지향 프로그래밍” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 TypeScript Academy 강의 전체를 잠금 해제할 수 있습니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“레일웨이 지향 프로그래밍”에서 뭘 배우나요?
try/catch 없이 실패할 수 있는 연산을 연결합니다. 브라우저에서 직접 실행하는 실습 코드로 TypeScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
TypeScript Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 TypeScript Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“레일웨이 지향 프로그래밍” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 TypeScript Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 TypeScript Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 오류를 발생시키는 문제
- Result 타입 모델링
- Option과 Maybe 타입
- 레일웨이 지향 프로그래밍