기존에 자바로 개발을 했기에, 이런 인터페이스라는 개념은 정말 많이 사용했었다.
다형성, 추상화의 필수 개념으로 각 클래스들에서 공통적인 부분을 뽑아 상위 클래스 혹은 인터페이스 타입으로 각각 다른 동작을 수행할 수 있도록 만드는 방법이다.
이런 개념이 타입스크립트에도 존재한다고 한다.
물론 이 인터페이스를 통해 얼마나 객체 지향적인 개발을 할 수 있을지는 모르겠지만, 그래도 개념을 최대한 사용할 수 있도록 해보자.
전에 잠깐 블로그에 사용해서 글을 작성한 적이 있기는 하다.
interface Person{
name: string;
age: number;
email: string;
}
이런 방법으로 선언한다.
사람이라는 객체가 가지고 있는 공통적인 특징들을 추출해서 정의한 것이다.
그리고 이러한 인터페이스를 바탕으로 함수를 파라미터로 넘긴다.
function sendEmail(person: Person){
console.log(`${person.email}에게 메일을 전송했습니다.`);
}
만약 이런 함수가 존재한다면, 해당 key와 타입을 멤버로 가지고 있는 객체 혹은 객체 리터럴만 파라미터로 사용이 가능한 것이다.
let seungkyu_student = {
name: "seungkyu",
age: 27,
email: "trust1204@gmail.com"
}
이런 객체 리터럴이나
아니면 그냥 이렇게 타입으로 인터페이스를 지정해둔
let seungkyu_army: Person = {
name: "seungkyu",
age: 25,
email: "trust1204@gmail.com"
}
이런 객체 리터럴만 사용이 가능한 것이다.
여기에서 seungkyu_student라는 친구에 study()라는 함수를 추가해보자.
let seungkyu_student = {
name: "seungkyu",
age: 27,
email: "trust1204@gmail.com",
study(){
console.log("승규는 공부 중입니다.")
}
}
이렇게 추가를 하더라도
name: string,
age: number,
email: string
이런 멤버들은 여전히 객체 리터럴 안에 존재한다.
그렇기에 sendEmail 함수에 위의 객체 리터럴을 사용하더라도 에러가 발생하지 않는다.
이게 자바의 인터페이스와 다른 부분인 것 같다.
자바에서 인터페이스는 안의 멤버가 같더라도 상속을 받은 객체가 아니면 해당 함수들을 사용할 수는 없었다.
인터페이스에는 멤버 변수 외에도 함수를 넣을 수도 있다.
interface Person{
name: string;
age: number;
email: string;
walk(): void
}
이렇게 ()로 함수를 지정하고 반환타입을 지정해주면 된다.
이렇게 수정하면 기존에 Person 타입으로 수정해둔 모든 객체 리터럴에도 함수의 생성이 강요된다.
그리고 seungkyu_student에도 walk() 함수가 구현되어 있지 않기 때문에, Person 타입으로 볼 수 없어 파라미터로 사용할 수 없다고도 나온다.
분명 인터페이스는 좋은 방법이지만, 기존의 자바보다 더욱 자유로운 개념을 가진 것 같다.
최대한 객체지향으로 맞추어 타입스크립트에서의 인터페이스를 사용해보자.
'Node > TypeScript' 카테고리의 다른 글
TypeScript에서 튜플 (0) | 2025.06.29 |
---|---|
TypeScript에서 배열 (1) | 2025.06.29 |
TypeScript에서 any 타입 (0) | 2025.06.29 |
TypeScript의 타입 어노테이션 및 타입 추론 (0) | 2025.06.29 |
TypeScript를 쓰는 이유 (0) | 2025.06.28 |