전체 글

개발자 린다씨
👶 TypeScript

함수 선언과 호출

함수 선언과 호출 JavaScript에서 함수는 first-class 객체입니다. 즉, 객체를 다루듯이 함수를 변수에 할당하거나, 함수를 다른 함수로 전달하거나, 함수에서 함수를 반환하거나, 객체와 프로토타입에 할당하거나, 함수에 프로퍼티를 기록하거나, 함수에 기록된 프로퍼티를 읽는 등의 작업을 할 수 있습니다. JavaScript에서 함수로 할 수 있는 일이 정말 많은 덕분에 TypeScript도 이 모든 것을 자신의 타입 시스템에 녹여낼 수 있었습니다. 다음은 TypeScript 예제입니다. function add(a: number, b: number){ return a + b } 보통 함수 매개변수의 타입은 명시적으로 정의합니다. TypeScript는 항상 함수의 본문에서 사용된 타입을 추론하지만 ..

👶 TypeScript

열거형

열거형(enum) 열거형(enum)은 해당 타입으로 사용할 수 있는 값을 열거하는 기법입니다. 열거형은 키를 값에 할당하고 순서가 없는 자료구조입니다. 따라서 TypeScript는 키에 접근할 때 주어진 키가 실제 존재하는지 확인할 수 있습니다. 문자열에서 문자열로 매핑하거나 문자열에서 숫자로 매핑하는 열거형, 이렇게 두 가지가 있습니다. 아래의 예시는 열거형의 예입니다. enum Language { English, Spanish, Korean } 열거형의 이름은 단수 명사로 쓰고, 첫 문자는 대문자로 하는 것이 관례입니다. 키도 앞 글자를 대문자로 표시합니다. TypeScript는 자동적으로 열거형의 각 멤버에 적절한 숫자를 추론해 할당하지만, 값을 명시적으로 설정할 수도 있습니다. TypeScript..

👶 TypeScript

유니온과 인터섹션 타입

유니온과 인터섹션 타입 A, B라는 두 사물이 있을 때 이를 유니온(union; 합집합)하면 둘을 합친 (A나 B에 해당하는 것 전부) 결과가 나오며 인터섹션(intersection; 교집합)하면 둘의 공통부분(A, B 모두에 속하는 것)이 결과로 나옵니다. TypeScript는 타입에 적용할 수 있는 특별한 연산자인 유니온(|)과 인터섹션(&)을 제공합니다. 타입은 집합과 비슷하므로 집합처럼 연산을 수행할 수 있습니다. type Cat = {name: string, purrs: boolean} type Dog = {name: string, barks: boolean, wags: boolean} type CatOrDogOrBoth = Cat | Dog type CatAndDog = Cat & Dog Ca..

👶 TypeScript

타입 별칭

타입 별칭 let, const, var로 변수를 선언해서 값 대신 변수로 칭하듯이 타입 별칭으로 타입을 가리킬 수 있습니다. type Age = number type Person = { name: string age: Age } Age는 number입니다. 타입 별칭을 이용하면 Person의 형태를 조금 더 이해하기 쉽게 정의할 수 있습니다. 그러나 TypeScript는 별칭을 추론하진 않으므로 반드시 별칭의 타입을 명시적으로 정의해야 합니다. let age: Age = 24 let girl: Person = { name: 'Cozy Linda', age: age } Age는 number의 별칭이므로 number에도 할당할 수 있습니다. 따라서 코드를 아래처럼 바꿀 수 있습니다. let age = 24 ..

👶 TypeScript

타입 시스템

타입 시스템 최신 언어들은 저마다의 타입 시스템을 갖추고 있습니다. 타입 시스템(type system) 타입 검사기가 프로그램에 타입을 할당하는 데 사용하는 규칙 집합 타입 시스템은 어떤 타입을 사용하는지를 컴파일러에 명시적으로 알려주는 타입 시스템과 자동으로 타입을 추론하는 타입 시스템으로 구분되며, 두 시스템은 서로 장단점이 있습니다. TypeScript는 두 가지 시스템 모두의 영향을 받았습니다. 즉, 개발자는 타입을 명시하거나 TypeScript가 추론하도록 하는 방식 중에서 선택할 수 있습니다. 어노테이션을 이용하면, TypeScript에 명시적으로 타입을 지정할 수 있습니다. 어노테이션은 'value: type' 형태로 쓰이며 타입 검사기에게 이 value의 타입은 type이라고 알리는 역할을..

👶 TypeScript

컴파일러

컴파일러 프로그램은 프로그래머가 작성한 다수의 텍스트 파일로 구성됩니다. 해당 텍스트를 컴파일러(compiler)라는 특별한 프로그램이 파싱 하여 추상 문법 트리(Abstract Syntax Tree, AST)라는 자료구조로 변환합니다. AST는 공백, 주석, 그리고 탭 등의 결과를 완전히 무시하고, 다시 AST를 바이트코드(bytecode)라는 하위 수준의 표현으로 변환합니다. 바이트코드가 만들어졌으면 런타임(runtime)이라는 다른 프로그램에 바이트코드를 입력해 평가하고 결과를 얻을 수 있습니다. 즉, 프로그램을 실행하는 것은 컴파일러가 소스 코드를 파싱해 AST로 만들고, 다시 AST를 바이트코드로 변환한 것을 런타임이 평가하도록 지시한다는 의미입니다. 위의 과정을 요약하면, 아래와 같습니다. 프..

👶 TypeScript

bigint

bigint bigint는 JavaScript와 TypeScript에 새로 추가된 타입으로, 이를 이용하면 라운딩 관련 에러 걱정 없이 큰 정수를 처리할 수 있습니다. number는 253까지의 정수를 표현할 수 있지만, bigint를 이용하면 이보다 큰 수도 표현할 수 있습니다. bigint 타입은 모든 BigInt의 집합으로 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 비교(

👶 TypeScript

void

void void는 어떤 타입도 가지지 않는 빈 상태를 의미합니다. 값은 없고, 타입만 있으며, 소문자입니다.(따라서 할당 가능한 값은 undefined입니다.) 명시적으로 아무것도 반환하지 않는 함수의 반환 타입(ex: console.log)을 가리며 이러한 함수의 리턴 타입으로 사용합니다. 그 외에는 사용할 일이 거의 없습니다. function returnVoid(message): void { console.log(message); } returnVoid('리턴이 없슴돠'); let unusable: void = undefined;

👶 TypeScript

never

never never는 절대 반환하지 않는(예외를 던지거나 영원히 실행되는) 함수 타입을 가리킵니다. never는 리턴에서 사용되며, 리턴에 사용되는 경우, 아래 3가지 정도의 경우가 대부분입니다. function error(message: string): never { throw new Error(message); } function fail() { return error("뭔가 실패했슴다만...?"); } function infiniteLoop(): never { while(true) { } } unknown이 모든 타입의 상위 타입이라면, never는 모든 타입의 서브 타입입니다. 즉, 모든 타입에 never를 할당할 수 있으며, never 값은 어디서든 안전하게 사용할 수 있습니다. 하지만 nev..

개발자 린다씨
Cozy_Linda