[TS] 문법-2

TypeScript의 열거형(Enum)은 특정 값의 집합을 정의할 때 사용된다.

enum Animal {
  Cat,
  Dog,
  Tiger,
}

Animal이라는 열거형을 정의하고 있다. 열거형의 값은 cat, dog, tiger 세 개 이다.

숫자형 열거형(Enum)

열거형은 숫자형과 문자열형, 혹은 이 둘의 조합으로 정의될 수 있다. 숫자형이 기본값이며, 자동으로 0부터 시작해 1씩 증가한다. 물론 수동으로도 값을 지정할 수 있다.

enum Animal {
  Cat = 1,
  Dog = 3,
  Tiger = 7,
}

열거형 값을 가지고 산술 연산도 가능하다.

enum Animal {
  Cat = 1,
  Dog = 3,
  Tiger = 7,
}

let c: Animal = Animal.Cat;
let dogValue: number = Animal.Dog;
let tigerValue: number = Animal.Tiger;

console.log(c);          // 출력: 1
console.log(dogValue);  // 출력: 3
console.log(tigerValue);   // 출력: 7

문자형 열거형(Enum)

문자형 열거형은 숫자형 열거형과 개념적으로는 거의 비슷하며, 열거형의 값을 전부 다 특정 문자 또는 다른 열거형 값으로 초기화해야 한다.

enum Direction {
  Up = "UP",
  Down = "DOWN",
  Left = "LEFT",
  Right = "RIGHT",
}

let myDirection: Direction = Direction.Up;
console.log(myDirection); // 출력: "UP"

문자형 열거형에는 숫자형 열거형과는 다르게 auto-incrementing이 없다. 대신 항상 명확한 값이 나와 읽기 편하다.

역 매핑 (Reverse mappings)

역 매핑은 숫자형 열거형에만 존재하는 특징이다. 거형의 키(key)로 값(value)을 얻을 수 있고 값(value)으로 키(key)를 얻을 수도 있다.

enum Enum {
    K
}
let k = Enum.K;
let nameOfK = Enum[k]; // "K"

인터페이스

TypeScript에서 인터페이스(Interface)는 일반적으로 타입 체크를 위해 사용된다. 인터페이스는 변수, 함수, 클래스에 사용할 수 있으며, 인터페이스에 선언된 프로퍼티 또는 메서드의 구현을 강제하여 일관성을 유지하도록 한다.
TypeScript에서 인터페이스는 객체(Object)의 구조를 정의하기 위해 주로 사용되는 예약어이다.
인터페이스를 사용하여 객체의 프로퍼티 이름과 타입을 정의하고, 함수의 매개변수 타입과 반환 타입도 정의할 수 있다. 또한 클래스에서도 인터페이스를 사용할 수 있다.

인터페이스와 상속

인터페이스는 extends라는 키워드를 사용하여 기존에 존재하던 인터페이스를 상속해 확장이 가능하다. 이는 기존에 존재하던 인터페이스의 프로퍼티를 다른 인터페이스에 복사하는 것을 가능하게 해 주며, 인터페이스의 재사용성을 높여준다.


타입 별칭

타입 별칭(Type Aliases)은 타입의 새로운 이름을 만드는 것으로, 이는 새로운 이름으로 기존의 타입을 참조하는 것을 의미한다. 타입 별칭을 이용하여 타입의 새로운 이름을 만들 때 키워드 type을 사용하여 작성한다.
타입 별칭을 사용하면 코드를 더 간결하고 가독성 좋게 만들 수 있다. 또한 복잡한 타입을 간략하게 표현하고, 타입 정의를 재사용하는 등 가독성을 높일 수 있다.

주의!
타입 별칭으로 만들어진 타입을 참조할 시에는 인터페이스와 마찬가지로 내부에 정의된 프로퍼티를 전부 참조해야만 한다. 또한 타입 별칭으로 만들어진 타입 내부에 정의된 프로퍼티 외에 다른 프로퍼티를 더 작성하게 되면 그 또한 컴파일 에러가 난다.


타입 추론

타입 추론(Type Inference)은 변수나 함수의 타입을 선언하지 않아도 TypeScript가 자동으로 유추하는 기능이다.

타입 추론의 장점

  1. 코드의 가독성 향상
  2. 개발 생산성 향상
  3. 오류 발견 용이성

타입 추론의 단점

  1. 타입 추론이 잘못될 경우 오류 발생
  2. 명시적인 타입 지정이 필요한 경우가 있음

타입스크립트에서의 클래스

TypeScript에서는 클래스의 속성과 메서드에 대한 타입을 명시할 수 있다. TypeScript에서 클래스를 정의할 때, constructor를 이용하여 초기화하는 멤버들은 전부 상단에서 정의를 해줘야 한다. 또한 contructor 내 인자로 받을 때도 정확히 타입을 명시해 줘야 한다.

클래스와 상속(Inheritance)

TypeScript의 클래스(class)는 인터페이스(interface)와 마찬가지로 extends 키워드를 사용하여 기존에 존재하던 클래스를 상속받아 확장하여 새로운 클래스를 만들 수 있다.

public, private 키워드

기본적으로 클래스 내에 선언된 멤버는 외부로 공개된다. 그러나 공개된다고 명시적으로 public 키워드를 사용해 표시해 줄 수 있다.
반대로 외부에 드러내지 않을 멤버가 있다면 private 키워드로 명시해 주면 된다.

readonly 키워드

readonly 키워드를 사용하여 프로퍼티를 읽기 전용으로 만들 수 있다. 읽기 전용 프로퍼티들은 선언 또는 생성자에서 초기화해야 한다.

profile
개발자가 되기 위해 성장 중

0개의 댓글