인터페이스 (interface)

인터페이스 (interface)

1. 인터페이스

  • TypeScript의 인터페이스에 대해 알아봅시다.
  • 인터페이스란? 코드의 구조를 정의하는데 사용되는 도구입니다.
  • 인터페이스를 사용하면, 객체의 형태, 메서드, 속성 등을 명시적으로 정의할 수 있으며, 이를 통해 코드의 가독성을 높이고 유지 보수성을 향상시킬 수 있습니다.

2. 사용방법

  • 처음엔 다음과 같이 입력하여, 정의하여 줍니다.
interface User {
    name: string;
    age: number;
}

 

  • 그 후 객체를 선언하고 출력해봅시다.
interface User {
    name : string;
    age : number;
}

let user : User = {
    name : 'Kim',
    age : 30
}

console.log(user.age);

 

  • 속성 뒤에 ?를 넣게 되면 선택사항으로 사용할 수 있습니다.
  • 다음과 같이 입력하면, user에 gender를 정의해주지 않아 오류가 발생해야 하지만, 인터페이스에서 gender?로 선택 옵션으로 정의하였기 때문에, 무조건 정의해주지 않아도 됩니다.  
interface User {
    name: string;
    age: number;
    gender?: string;
}

let user: User = {
    name: 'Kim',
    age: 30
}

user.gender = "male";

 

  • 이번에는 값을 변경할 수 없게끔 만들어 보겠습니다.
  • 속성 앞에 readonly를 입력하면, 한번 정해진 값은 변경할 수 없습니다.
interface User {
    name: string;
    age: number;
    gender?: string;
    readonly year: number;
}

let user: User = {
    name: 'Kim',
    age: 30,
    year: 2002,
}

user.gender = "male";
// user.year = 1988; (오류발생)

 

  • 이번에는 학년 및 성적을 지정해봅시다.
  • 4학년까지 있어서 일일히 입력하기 쉽지 않으니, 대괄호를 사용하여 입력할 수 있습니다.
interface User {
    name: string;
    age: number;
    gender?: string;
    readonly year: number;
    [grade: number]: string;
}

let user: User = {
    name: 'Kim',
    age: 30,
    year: 2002,
    1: 'A',
    2: 'B'
}

 

  • 여기서 type 키워드를 사용하여, 새로운 타입을 정의할 수 있습니다.
// 새로운 타입 정의
type Score = 'A' | 'B' | 'C' | 'F';

interface User {
    name: string;
    age: number;
    gender?: string;
    readonly year: number;
    [grade: number]: Score;
}

let user: User = {
    name: 'Kim',
    age: 30,
    year: 2002,
    1: 'A',
    2: 'B'
}

 

3. 예시

  • 인터페이스를 사용해봅시다.
  • 예시 1

    → 인터페이스를 이용하여 숫자를 더할 수 있습니다.

interface Add {
    (num1: number, num2: number): number;
}

const add: Add = function (x, y) {
    return x + y;
}

add(10,20);

 

  • 예시 2

    → 인터페이스를 이용하여 참, 거짓을 나타낼 수 있습니다.

interface IsAdult {
    (age: number): boolean;
}

const a: IsAdult = (age) => {
    return age > 19;
}

a(30) // true

 

4. 인터페이스로 클래스 정의하기

  • 이번엔 인터페이스로 클래스를 정의해봅시다.

    → 이 때, constructor를 적용하여 나타낼 수 있습니다.

interface Car {
    color: string;
    wheels: number;
    start(): void;
}

class Bmw implements Car {
    color;
    wheels = 4;
    constructor(a: string) {
        this.color = a;
    }
    start() {
        console.log("go!");
    }
}

const b = new Bmw('green');
console.log(b);
b.start();

 

  • 인터페이스는 extends를 사용하여, 확장도 가능합니다.
interface Car {
    color: string;
    wheels: number;
    start(): void;
}

interface Benz extends Car {
    door: number;
    stop(): void;
}

const benz : Benz = {
    door: 4,
    stop() {
        console.log("stop!");
    },
    // 상속받는 속성까지 전부 입력해야 함
    color: "black",
    wheels: 4,
    start() { },
}

benz.stop();

 

  • 다음과 같이 입력하여 두개를 동시에 확장도 가능합니다.
interface Car {
    color: string;
    wheels: number;
    start(): void;
}

interface Toy {
    name: string;
}

interface ToyCar extends Car, Toy {
    price: number;
}

 

3. 정리하며

  • 지금까지 TypeScript인터페이스에 대해 알아보았습니다.
  • 다음 시간엔 TypeScript 함수에 대해 알아보겠습니다.
 

함수 (function)

함수 (function) 1. 함수 (function) 이번엔 함수에 대해 알아보겠습니다. 함수는 JavaScript와 유사하지만 몇가지 차이가 있습니다. 2. 함수 선언과 정의 1) 선언 및 정의 방법 TypeScript는 다음과 같이 정의

newbean-j.tistory.com

 

※ 코딩앙마님의 유튜브 강좌를 참고하였습니다.

'Front-End Study > TypeScript' 카테고리의 다른 글

제네릭(Generics)  (0) 2024.02.20
클래스(Class)  (0) 2024.02.19
함수 (function)  (0) 2024.01.31
기본 타입  (0) 2024.01.26
TypeScript  (1) 2024.01.26