[TypeScript] 타입 스크립트의 인터페이스,,

2025. 2. 26. 18:11·프로그래밍 언어/TypeScript

인터페이스 (interface)

: TypeScript에서 객체의 구조를 정의하는 기능.

클래스나 객체가 특정 솏성과 메서드를 포함하도록 강제할 수 있으며, 코드의 가독성과 유지보수성을 높이는 역할.

 

주요 특징 

  • 객체의 구조 (Shape)를 정의할 때 사용
  • 함수 시그니처 정의 가능
  • `extends` 키워드를 통해 확장 (상속) 가능
  • 같은 이름의 인터페이스가 여러 번 선언되면 자동으로 병합됨 

기본적인 인터페이스 선언

 
 interface Person {
   readonly name: string;
   age?: number;
   //sayHi: () => void; // 오버로딩을 구현할땐 함수 타입은 사용이 안됨
   sayHi(): void; // 메소드의 오버로드 사용하고 싶을 땐 호출 시그니처로 작성해야 함.
   sayHi(a: number, b: number): void;
 }
 

 

 `readonly name`: 객체 생성 후 `name` 값을 변경할 수 없음
 `age?`: 선택적 속성이라 Person 객체에 없어도 됨
 `sayHi()`: 함수 타입이 아닌 메서드 선언 방식을 사용해야 오버로딩 가능!

 

위에서 선언한 인터페이스(Person)를 사용한 객체 생성

 
const person: Person = {
  name: "라라라",
  age: 27,
  sayHi: function () {
    //메서드
    console.log("Hi");
  },
};

person.sayHi();
person.sayHi(1, 2);
 

`sayHi()`는 `sayHi(a: number, b: number)`로도 호출 가능!

함수 타입으로 선언하면 오버로딩이 불가능하므로, 메서드 방식으로 선언해야 함!


인터페이스 확장(Extends) 하기 

인터페이스는 `extends` 키워드를 사용하여 기존 인터페이스를 확장할 수 있습니다. (java랑 비슷한듯)
이를 통해 코드의 재사용성을 높이고, 중복을 줄일 수 있습니다.

 

 
interface Animal {
  name: string;
  color: string;
}
 

 

인터페이스 단일 확장(상속)

 
interface Dog extends Animal {
  // 다시 정의하는 타입이 원본(부모) 타입의 sub타입이어야 함.
  isBark: boolean;
}
 
const dog: Dog = {
  name: "바둑이",
  color: "갈색",
  isBark: true,
};
 

 

인터페이스 다중 확장(상속)

 interface Cat extends Animal {
   isScratch: boolean;
 }
 
 interface DogCat extends Dog, Cat {}

 const dogCat: DogCat = {
   name: "",
   color: "",
   isBark: true,
   isScratch: true,
 } ; // 다중확장 가능하다.
 

`DogCat`은 `Dog`와 `Cat`을 모두 확장한 타입이므로, 두 인터페이스의 속성을 모두 포함해야 함!


인터페이스 합치기

TypeScript에서는 같은 이름의 인터페이스를 여러 번 선언하면 자동으로 합쳐지는 기능이 있음.
이 기능을 선언 합침 이라고 부름.

 

 
interface Person {
  name: string;
}

interface Person {
  // name : number;  오류! (같은 속성의 타입이 다름)  확장(extends) 시 사용했던 서브타입도 안됩니다.
  age: number;
}

const person: Person = {
  name: "",
  age: 27,
};
 

두 개의` Person` 인터페이스가 합쳐져 `name`과 `age` 속성을 모두 포함한 인터페이스가 됨!

 

같은 속성을 다른 타입으로 선언하면 충돌 발생

이미 선언된 속성의 타입을 변경할 수 없으며, 오직 새로운 속성을 추가하는 방식만 가능!

 


모듈 보강 : 이 기능은 특히 라이브러리나 전역 객체를 확장할 때 유용함.

 
interface Lib {
  a: number;
  b: number;
}
interface Lib {
  // 모듈 보강
  c: string;
}
const lib = {
  a: 1,
  b: 2,
  c: "hello",
};

 

같은 인터페이스 `Lib`를 두 번 선언하면, 자동으로 병합되어 새로운 속성 `c`가 추가됨!
모듈 보강은 기존 객체 구조를 변경하지 않고 추가적인 기능을 확장할 때 유용함.

'프로그래밍 언어 > TypeScript' 카테고리의 다른 글

[TypeScript] 제네릭 함수와 타입 변수 응용하기  (0) 2025.03.05
[TypeScript] 클래스와 인터페이스 그리고 접근 제어자.  (0) 2025.03.05
[TypeScript] 함수 오버로딩과 타입 가드  (0) 2025.02.26
[TypeScript] 함수 타입의 호환성  (0) 2025.02.25
[TypeScript] 타입스크립트의 함수 타입, 표현식, 호출 시그니처  (0) 2025.02.25
'프로그래밍 언어/TypeScript' 카테고리의 다른 글
  • [TypeScript] 제네릭 함수와 타입 변수 응용하기
  • [TypeScript] 클래스와 인터페이스 그리고 접근 제어자.
  • [TypeScript] 함수 오버로딩과 타입 가드
  • [TypeScript] 함수 타입의 호환성
“하루하루가 새로운 인생이다.”
“하루하루가 새로운 인생이다.”
제가 배운 지식을 정리하고 오래 기억하고 싶어서 만든 블로그입니다.
  • “하루하루가 새로운 인생이다.”
    땅콩
    “하루하루가 새로운 인생이다.”
  • 전체
    오늘
    어제
    • 분류 전체보기 (63)
      • 일상 (2)
      • 에러처리 (0)
      • 프로그래밍 언어 (34)
        • TypeScript (21)
        • JavaScript (6)
        • 퍼블리싱 ( HTML, CSS ) (7)
        • 코테 (0)
      • 프레임워크 및 라이브러리 (10)
        • React (10)
        • Next.js (0)
        • Vue.js (0)
        • Spring Boot (0)
      • 데이터베이스 (0)
        • Oracle (0)
      • 디자인 (0)
        • Figma (0)
      • 개발 도구 (5)
        • Git (4)
        • Docker (0)
        • IDE (1)
      • 프로젝트 (0)
        • 개인 프로젝트 (0)
        • 팀 프로젝트 (0)
        • 프로젝트 회고 (0)
      • 정보처리기사 (12)
        • 1과목 (4)
        • 2과목 (2)
        • 3과목 (2)
        • 4과목 (2)
        • 5과목 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    React
    Hook
    자바스크립트
    한 입 크기로 잘라먹는 타입스크립트
    벼락치기
    정보처리기사
    정처기
    TypeScript
    인터페이스
    js
    타입스크립트
    javascript
    GIT
    리액트
    HTML
    타입 별칭
    css
    타입 스크립트
    이정환
    웹
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
“하루하루가 새로운 인생이다.”
[TypeScript] 타입 스크립트의 인터페이스,,
상단으로

티스토리툴바