비동기 프로그래밍, 동시성과 병렬성 실무의 응용 프로그램에선 네트워크 요청을 보내고 데이터베이스 및 파일 시스템과 상호 작용하며, 사용자의 동작에 응답하고, CPU를 많이 소비하는 작업을 별도의 스레드에서 수행해야 하므로 콜백(callback), 프로미스(promise), 스트림(stream) 등 다양한 비동기 API를 사용하게 됩니다. JavaScript는 이런 비동기 작업을 처리할 때 위력을 발휘하며, 멀티스레드를 지원하는 자바나 C++ 등의 다른 주류 언어와 비교하기 어려울 정도의 차별성을 보입니다. V8, SpiderMonkey 같은 유명한 JavaScript 엔진은 태스크 멀티플렉싱 기법을 영리하게 이용하여, 여러 스레드를 이용하던 기존 방식과 달리 스레드 하나로 비동기 작업을 처리합니다. 스레..
Option 타입 특수 목적 데이터 타입을 사용해 예외를 표현하는 방법도 있습니다. 이 방식은 값과 에러의 유니온을 반환하는 방법에 비해 단점이 있지만, 에러가 발생할 수 있는 계산에 여러 연산을 연쇄적으로 수행할 수 있게 됩니다. 가장 많이 사용되는 세 가지로 Try, Option, Either 타입이 있습니다. Try, Option, Either 데이터 타입은 Array, Error, Map, Promise 등과는 달리 JavaScript가 기본적으로 제공하지 않습니다. 따라서 이 타입들을 사용하려면 NPM에서 찾아 설치하거나 직접 구현해야 합니다. Option 타입은 하스켈, 오캐멀, 스칼라, 러스트(Rust) 등의 언어에서 가져온 개념입니다. 어떤 특정 값을 반환하는 대신 값을 포함하거나 포함하지..
예외 반환 TypeScript는 자바가 아니며 throws 문을 지원하지 않습니다. 참고로 throws 문은 메서드가 어떤 종류의 런타임 예외를 발생시킬 수 있는지 알려주어서 해당 메서드의 사용자가 발생 가능한 에러를 적절하게 처리할 수 있도록 도와줍니다. 하지만 유니온 타입을 이용해 비슷하게 흉내 낼 수 있습니다. function ask() { return prompt("생일 언제임?"); } // 커스텀 에러 타입 class InvalidDateFormatError extends RangeError{} class DateISInTheFutureError extends RangeError{} /** * * @throw {InvalidDateFormatError} : 사용자가 생일을 잘못 입력함 * @t..
예외 던지기 문제가 발생하면 null 반환 대신 예외를 던지겠습니다. 그러면 어떤 문제냐에 따라 대처가 가능할 수 있고, 디버깅에 도움 되는 메타 데이터도 얻을 수 있습니다. function ask() { return prompt("생일 언제임?"); } function parse(birthday: string): Date { let date = new Date(birthday); if (!isValid(date)) { throw new RangeError('YYYY/MM/DD 로 입력하셈여') } return date; } 이제 이 코드를 사용할 때 전체 응용 프로그램이 크래시 되지 않도록 매끄럽게 처리하기 위해 주의해서 예외를 잡아야 합니다. function ask() { return prompt("..