접근 제어자접근 제어자(Access Modifier)는 타입스크립트에서만 제공되는 기능으로 클래스의 특정 필드나 메서드를 접근할 수 있는 범위를 설정하는 기능입니다.타입스크립트에서는 다음과 같은 3개의 접근 제어자를 사용할 수 있습니다.public : 모든 범위에서 접근 가능private : 클래스 내부에서만 접근 가능proteced : 클래스 내부 또는 파생 클래스 내부에서만 접근 가능public첫번째 접근 제어자는 public 입니다. public은 공공의 라는 뜻으로 어디서든지 이 프로퍼티에 접근할 수 있음을 의미합니다. 필드의 접근 제어자를 지정하지 않으면 기본적으로 public 접근 제어자를 갖게 됩니다.class Employee { // 필드 name: string; // 자동으로..

전체 글
타입스크립트의 클래스타입스크립트에서는 클래스의 필드를 선언할 때 타입 주석으로 타입을 함께 정의해주어야 합니다. 그렇지 않으면 함수 매개변수와 동일하게 암시적 any 타입으로 추론되는데 엄격한 타입 검사 모드(strict 옵션이 true로 설정되어 있을 경우)일 때에는 오류가 발생하게 됩니다.추가로 생성자에서 각 필드의 값을 초기화 하지 않을 경우 초기값도 함께 명시해주어야 합니다.class Employee { // 필드 name: string = ""; age: number = 0; position: string = ""; // 메서드 work() { console.log("일함"); }} 만약 다음과 같이 생성자 함수에서 필드의 값들을 잘 초기화 해 준다면 필드 선언시의 초기값은 생..
선언 합침타입 별칭은 동일한 스코프 내에 중복된 이름으로 선언할 수 없는 반면 인터페이스는 가능합니다.type Person = { name: string;};type Person = { ❌ age: number;};interface Person { name: string;}interface Person { // ✅ age: number;}이렇게 되는 이유는 중복된 이름의 인터페이스 선언은 결국 모두 하나로 합쳐지기 때문입니다.따라서 위 코드에 선언한 Person 인터페이스들을 결국 합쳐져 다음과 같은 인터페이스가 됩니다.interface Person { name: string; age: number;} 이렇게 동일한 이름의 인터페이스들이 합쳐지는 것을 선언 합침(Declaration Merging..
인터페이스 확장인터페이스 확장이란 하나의 인터페이스를 다른 인터페이스들이 상속받아 중복된 프로퍼티를 정의하지 않도록 도와주는 문법입니다. 말로만 하면 어려우니 예제와 함께 살펴보겠습니다.다음과 같이 3개의 타입이 정의되어있다고 가정하겠습니다.interface Animal { name: string; age: number;}interface Dog { name: string; age: number; isBark: boolean;}interface Cat { name: string; age: number; isScratch: boolean;}interface Chicken { name: string; age: number; isFly: boolean;}각 타입 들을 자세히 살펴보면 Ani..
인터페이스인터페이스란 타입 별칭과 동일하게 타입에 이름을 지어주는 또 다른 문법입니다.예를 들어 간단한 Person 객체의 타입을 정의한다면 다음과 같이 할 수 있습니다.interface Person { name: string; age: number;}이렇게 정의한 인터페이스를 타입 주석과 함께 사용해 변수의 타입을 정의할 수 있습니다.const person: Person = { name: "이정환", age : 27}; 이렇듯 인터페이스는 타입 별칭과 문법만 조금 다를 뿐 기본적인 기능은 거의 같다고 볼 수 있습니다. 선택적 프로퍼티인터페이스에서도 동일한 방법으로 선택적 프로퍼티 설정이 가능합니다.interface Person { name: string; age?: number;}const ..
사용자 정의 타입 가드사용자 정의 타입가드란 참 또는 거짓을 반환하는 함수를 이용해 우리 입맛대로 타입 가드를 만들 수 있도록 도와주는 타입스크립트의 문법입니다.type Dog = { name: string; isBark: boolean;};type Cat = { name: string; isScratch: boolean;};type Animal = Dog | Cat;function warning(animal: Animal) { if ("isBark" in animal) { console.log(animal.isBark ? "짖습니다" : "안짖어요"); } else if ("isScratch" in animal) { console.log(animal.isScratch ? "할큅니다..
함수 오버로딩함수 오버로딩이란 하나의 함수를 매개변수의 개수나 타입에 따라 다르게 동작하도록 만드는 문법입니다./** * 함수 오버로딩 * 같은 함수를 매개변수의 개수나 타입에 따라 * 여러가지 버전으로 만드는 문법 * -> 하나의 함수 func * -> 일단 모든 매개변수는 넘버타입 * -> Ver1. 매개변수가 1개일 때에는 매개변수에 20을 곱한 값을 출력 * -> Ver2. 매개변수가 3개일 때에는 모든 매개변수를 더한 값을 출력 */ 타입스크립트에서 함수 오버로딩을 구현하려면 먼저 다음과 같이 버전별 오버로드 시그니쳐를 만들어 줘야 합니다.// 버전들 -> 오버로드 시그니쳐function func(a: number): void;function func(a: number, b: number, c:..
함수 타입의 호환성이란?함수 타입의 호환성이란 특정 함수 타입을 다른 함수 타입으로 괜찮은지 판단하는 것을 의미합니다.다음 2가지 기준으로 함수 타입의 호환성을 판단하게 됩니다.두 함수의 반환값 타입이 호환되는가?두 함수의 매개변수의 타입이 호환되는가? 기준 1 : 반환값 타입이 호환되는가?A와 B 함수 타입이 있다고 가정할 때 A 반환값 타입이 B 반환값 타입의 슈퍼타입이라면 두 타입은 호환됩니다.type A = () => number;type B = () => 10;let a: A = () => 10;let b: B = () => 10;a = b; // ✅b = a; // ❌ A의 반환값 타입은 Number, B의 반환값 타입은 Number Literal 입니다. 따라서 변수 a에 b를 할당하는 것은..