Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 프로그래머스
- React
- 그리디
- 동적계획법
- tanstack query
- Form
- JavaScript
- 타입스크립트
- tailwind
- react router dom
- React Query
- 토이프로젝트
- reduxtoolkit
- 리액트 라우터 돔
- 리액트
- react pattern
- 토이 프로젝트
- 스택
- 리덕스
- 리액트 패턴
- 코딩테스트
- 코어자바스크립트
- Supabase
- 코테
- TypeScript
- styled component
- Next.js
- 자바스크립트
- 프론트엔드
- revalidatepath
Archives
- Today
- Total
느려도 한걸음씩
📘 TypeScript - 인터페이스 본문
interface는 TypeScript에서 객체의 구조를 정의할 때 사용하는 문법입니다. 객체를 더 명확하고 안전하게 사용할 수 있도록 도와주는 중요한 기능 중 하나입니다.
이번 글에서는 인터페이스의 기본 개념부터 클래스와의 연결까지 간단한 예제들과 함께 정리해보겠습니다.
✅ 왜 인터페이스를 사용할까?
let user: object;
user = {
name: 'xx',
age: 30
};
console.log(user.name); // ❌ 오류 발생
object 타입으로 지정하면 해당 객체의 속성에 직접 접근할 수 없습니다. 이럴 때 interface를 사용하면 해결할 수 있습니다.
✨ 인터페이스 기본 사용법
interface User {
name: string;
age: number;
}
let user: User = {
name: 'xx',
age: 30
};
console.log(user.name); // 'xx'
console.log(user.age); // 30
// user.gender = 'male'; // ❌ 오류 발생
- interface 이름은 관례적으로 대문자로 시작합니다.
- 인터페이스에 정의되지 않은 속성을 추가하려고 하면 오류가 발생합니다.
🟡 옵셔널 프로퍼티 (?)
interface User {
name: string;
age: number;
gender?: string;
}
let user: User = {
name: 'xx',
age: 30
};
user.gender = 'male'; // 가능
?를 붙이면 해당 프로퍼티는 선택적으로 존재할 수 있음을 의미합니다.
🔒 읽기 전용 프로퍼티 (readonly)
interface User {
name: string;
age: number;
gender?: string;
readonly birthYear: number;
}
let user: User = {
name: 'xx',
age: 30,
birthYear: 1990
};
// user.birthYear = 1992; // ❌ 오류 발생
readonly 키워드를 사용하면 해당 속성은 초기 설정 이후 변경 불가합니다.
🔢 숫자 인덱스 시그니처
interface User {
name: string;
age: number;
gender?: string;
readonly birthYear: number;
[grade: number]: string;
}
let user: User = {
name: 'xx',
age: 30,
birthYear: 1990,
1: 'A',
2: 'B',
3: 'C'
};
숫자 인덱스를 통해 동적으로 속성을 추가할 수 있게 합니다.
🧮 인터페이스로 함수 타입 정의
interface Add {
(num1: number, num2: number): number;
}
const add: Add = function (x, y) {
return x + y;
};
함수의 매개변수와 반환값의 타입을 명확히 정의할 수 있습니다.
🚗 클래스에 인터페이스 적용 (implements)
interface Car {
color: string;
wheels: number;
start(): void;
}
class Bmw implements Car {
color;
wheels = 4;
constructor(c: string) {
this.color = c;
}
start() {
console.log('go...');
}
}
const b = new Bmw('green');
console.log(b);
b.start();
implements 키워드로 클래스가 해당 인터페이스를 따르도록 강제할 수 있습니다.
🔗 인터페이스 확장 (extends)
interface Benz extends Car {
door: number;
stop(): void;
}
class Bmw implements Benz {
color;
wheels = 4;
door = 4;
constructor(c: string) {
this.color = c;
}
start() {
console.log('go....');
}
stop() {
console.log('stop');
}
}
const b = new Bmw('green');
console.log(b);
b.start();
b.stop();
extends를 사용하면 인터페이스를 확장하여 재사용할 수 있습니다.
🔄 다중 확장
interface Toy {
name: string;
}
interface ToyCar extends Car, Toy {
price: number;
}
여러 인터페이스를 동시에 상속하여 다양한 속성을 결합할 수 있습니다.
'FE develop > Typescript' 카테고리의 다른 글
📘 TypeScript - 제네릭 (0) | 2025.05.26 |
---|---|
📘 TypeScript - 클래스 (0) | 2025.05.23 |
📘 TypeScript - 리터럴, 유니온/교차 타입 (0) | 2025.05.23 |
📘 TypeScript - 함수 (1) | 2025.05.23 |
📘 TypeScript - 기본 타입 (0) | 2025.05.23 |