카테고리 없음

TypeScript 인터페이스란? 객체 타입 정의의 핵심 개념 (6강)

mystory55776 2025. 5. 15. 00:40

인터페이스란? 객체 타입 정의의 핵심 개념

TypeScript에서 **인터페이스(Interface)**는 객체의 구조를 정의하는 중요한 도구입니다. 인터페이스를 사용하면 객체의 속성과 그 타입을 정의하여, 특정 객체가 어떻게 구성되어야 하는지 명확하게 설정할 수 있습니다. 이번 강의에서는 TypeScript에서 인터페이스가 무엇인지, 어떻게 사용하는지에 대해 자세히 알아보겠습니다.

인터페이스는 객체를 정의할 때 유용하게 사용되며, 코드를 더 안전하고 일관되게 만들어줍니다. 객체의 구조를 잘못 작성하거나 예상치 못한 타입이 들어갈 경우, TypeScript가 컴파일 단계에서 오류를 발생시켜 개발자에게 경고를 줍니다.

인터페이스 기본 사용법

인터페이스는 객체의 **속성과 그 타입**을 정의하는 구조입니다. 기본적인 사용법은 다음과 같습니다.

interface Person {
  name: string;
  age: number;
}

const user: Person = {
  name: "John",
  age: 30
};

위 예제에서 Person 인터페이스는 두 가지 속성 nameage를 가진 객체 타입을 정의하고 있습니다. 그런 다음, user 객체는 Person 인터페이스 타입을 따르도록 선언되었습니다.

인터페이스에 선택적 속성 추가하기

인터페이스에서 특정 속성을 선택적으로 지정하려면 속성 이름 뒤에 물음표(?)를 추가하면 됩니다. 선택적 속성은 객체를 생성할 때 해당 속성을 생략할 수 있게 해줍니다.

interface Person {
  name: string;
  age: number;
  email?: string; // 선택적 속성
}

const user1: Person = {
  name: "Alice",
  age: 25
};

const user2: Person = {
  name: "Bob",
  age: 28,
  email: "bob@example.com"
};

위 예제에서 email 속성은 선택적 속성으로 정의되었습니다. 따라서 user1 객체에는 email 속성이 없지만, 오류 없이 유효한 객체로 취급됩니다.

인터페이스 상속하기

TypeScript의 인터페이스는 다른 인터페이스를 상속할 수 있습니다. 이렇게 하면 기존 인터페이스의 속성에 새로운 속성을 추가하거나 수정할 수 있습니다. 인터페이스 상속을 통해 재사용성과 코드의 효율성을 높일 수 있습니다.

interface Animal {
  name: string;
}

interface Dog extends Animal {
  breed: string;
}

const dog: Dog = {
  name: "Rex",
  breed: "Golden Retriever"
};

위 예제에서 Dog 인터페이스는 Animal 인터페이스를 상속받아 name 속성을 물려받고, 추가적으로 breed 속성을 정의합니다.

인터페이스와 클래스 결합하기

인터페이스는 클래스에서 구현할 수 있습니다. 클래스는 인터페이스에서 정의한 속성과 메서드를 반드시 구현해야 하며, 이를 통해 객체의 구조와 동작을 명확히 할 수 있습니다.

interface Person {
  name: string;
  age: number;
  greet(): void;
}

class Student implements Person {
  constructor(public name: string, public age: number) {}

  greet() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

const student = new Student("Tom", 22);
student.greet(); // "Hello, my name is Tom and I am 22 years old."

위 예제에서 Person 인터페이스는 greet() 메서드를 포함하고 있습니다. Student 클래스는 이 인터페이스를 구현하여 해당 메서드를 정의하고, 객체를 생성하여 사용할 수 있습니다.

함수 타입 정의하기

인터페이스는 함수의 타입을 정의하는 데에도 유용합니다. 함수 타입을 인터페이스로 정의하면, 함수의 매개변수와 반환값의 타입을 명확히 지정할 수 있습니다.

interface AddFunction {
  (a: number, b: number): number;
}

const add: AddFunction = (a, b) => a + b;

위 예제에서 AddFunction 인터페이스는 두 개의 숫자 매개변수를 받아 숫자를 반환하는 함수 타입을 정의합니다. 그런 다음 add 함수는 이 인터페이스를 구현하여 두 숫자의 합을 반환하는 함수로 사용됩니다.

인터페이스를 사용해야 하는 이유

인터페이스는 객체나 클래스의 구조를 명확히 정의하는 데 중요한 역할을 합니다. 객체나 클래스가 어떻게 구성되어야 하는지에 대한 강력한 규약을 제공하여, 타입 안전성을 높이고 코드의 오류를 미리 방지할 수 있습니다. 또한, 협업 시 코드의 일관성을 유지하는 데도 큰 도움이 됩니다.

  • 명확한 타입 정의: 객체나 함수의 구조를 명확히 지정할 수 있습니다.
  • 재사용성: 인터페이스를 상속하거나 재사용하여 코드를 효율적으로 관리할 수 있습니다.
  • 유지 보수성: 타입 오류를 사전에 잡을 수 있어, 코드의 유지 보수성이 향상됩니다.

마무리: TypeScript의 인터페이스 활용하기

이번 강의에서는 TypeScript에서 **인터페이스**를 사용하여 객체와 클래스의 구조를 정의하는 방법을 배웠습니다. 인터페이스는 타입을 정의하는 데 매우 중요한 역할을 하며, 타입스크립트를 잘 활용하기 위한 핵심 개념 중 하나입니다.

인터페이스를 잘 활용하면 코드의 오류를 미리 방지하고, 더 나아가 코드의 유지 보수성을 크게 향상시킬 수 있습니다. 인터페이스의 다양한 활용법을 익히고 프로젝트에 적용해보세요!

다음 강의에서는 제네릭(Generic)을 사용하여 더 유연하고 재사용 가능한 코드를 작성하는 방법을 다뤄보겠습니다.