![[TypeScript] Interface์ Type์ ์ฐจ์ด](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIGbpF%2FbtsCpCIilmt%2FOwXxhL2H0z5LsqY2nIEIk0%2Fimg.png)
๐ Interface์ Type์ ๋ฌด์์ธ๊ฐ์?
์ด ๋ ๊ตฌ๋ฌธ์ ํ์ ์ ์ ์ํ๋ ๋ฐฉ๋ฒ์ผ๋ก, TypeScript ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํฌ๊ฒ ํฅ์ํด์. ์ด ๋์ ๋ฐ์ดํฐ์ ํํ์ ๊ณ์ฝ์ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋์ง๋ง, ๊ทธ ์ฌ์ฉ ๋ชฉ์ ๊ณผ ๋ฐฉ๋ฒ์์ ์ฝ๊ฐ์ ์ฐจ์ด๊ฐ ์์ด์.
- Interface:
interface
๋ ๊ฐ์ฒด์ ํํ๋ฅผ ์ ์ํ๊ณ , ํด๋์ค์์ ๊ณ์ฝ์ ์ค์ ํ๋ ๋ฐ ์ฃผ๋ก ์ฌ์ฉ๋ผ์. ์ด๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ๋ ๊ณผ ๋ฐ์ ํ๊ฒ ์ฐ๊ด๋์ด ์์ผ๋ฉฐ, ํ์ฅ ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํด์. - Type:
type
์interface
๋ณด๋ค ๋ ๋ค์ํ ํ์ ํํ์ ๊ฐ๋ฅํ๊ฒ ํด์. ์ด๋ ๊ธฐ๋ณธ์ ์ธ ๊ฐ์ฒด ํํ๋ฟ๋ง ์๋๋ผ, ์ ๋์จ, ์ธํฐ์น์ , ๊ธฐ๋ณธ ํ์ ๋ฑ ๋ณต์กํ ํ์ ์กฐํฉ์ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋ผ์.
interface
๋ ๊ฑด๋ฌผ์ ์ฒญ์ฌ์ง๊ณผ ๊ฐ์์, ๊ฐ์ฒด์ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ฒด์ ์ผ๋ก ์ค๊ณํ๊ณ ํ์ฅํ ์ ์์ด์. ๋ฐ๋ฉด, type
์ ์ฌ๋ฃ ๋ช
์ธ์์ ๊ฐ์์, ์ฌ๋ฌ ํ์
์ ์กฐํฉํ๊ฑฐ๋ ํน์ ํ์
์ ์ธ๋ถ ์ฌํญ์ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋ผ์.
๐ฅ๏ธ Interface์ Type์ ์ฌ์ฉ ์
1. Interface
interface
๋ ๊ฐ์ฒด์ ํํ๋ฅผ ์ ์ํ๊ณ , ํด๋์ค์์ ๊ณ์ฝ์ ์ค์ ํ๋ ๋ฐ ์ฃผ๋ก ์ฌ์ฉ๋ผ์. ์ด๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ๋ ๊ณผ ๋ฐ์ ํ๊ฒ ์ฐ๊ด๋์ด ์์ผ๋ฉฐ, ํ์ฅ ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํด์.
interface User {
name: string;
age: number;
}
// Interface ํ์ฅ
interface AdminUser extends User {
adminLevel: number;
}
function printAdminUser(user: AdminUser) {
console.log(`Name: ${user.name}, Age: ${user.age}, Admin Level: ${user.adminLevel}`);
}
const adminUser: AdminUser = { name: "Alice", age: 25, adminLevel: 1 };
printAdminUser(adminUser);
์์ ์์ ๋ Interface์ ํ์ฅ์ฑ์ ๋ณด์ฌ์ค๋๋ค:
- User ์ธํฐํ์ด์ค๋ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ์ํฉ๋๋ค.
- AdminUser ์ธํฐํ์ด์ค๋ User ์ธํฐํ์ด์ค๋ฅผ ํ์ฅํ์ฌ ๊ด๋ฆฌ์ ๋ ๋ฒจ(adminLevel)์ ์ถ๊ฐํฉ๋๋ค.
- printAdminUser ํจ์๋ AdminUser ํ์ ์ ๊ฐ์ฒด๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
2. Type
type
์interface
๋ณด๋ค ๋ ๋ค์ํ ํ์ ํํ์ ๊ฐ๋ฅํ๊ฒ ํด์. ์ด๋ ๊ธฐ๋ณธ์ ์ธ ๊ฐ์ฒด ํํ๋ฟ๋ง ์๋๋ผ, ์ ๋์จ, ์ธํฐ์น์ , ๊ธฐ๋ณธ ํ์ ๋ฑ ๋ณต์กํ ํ์ ์กฐํฉ์ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋ผ์.
type User = {
name: string;
age: number;
};
// Type ์กฐํฉ
type AdminUser = User & {
adminLevel: number;
};
function printAdminUser(user: AdminUser) {
console.log(`Name: ${user.name}, Age: ${user.age}, Admin Level: ${user.adminLevel}`);
}
const adminUser: AdminUser = { name: "Bob", age: 28, adminLevel: 2 };
printAdminUser(adminUser);
์์ ์์ ๋ Type์ ์กฐํฉ ๊ฐ๋ฅ์ฑ์ ๋ณด์ฌ์ค๋๋ค:
- User ํ์ ์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ์ํฉ๋๋ค.
- AdminUser ํ์ ์ User ํ์ ๊ณผ ์ถ๊ฐ์ ์ธ ์์ฑ(adminLevel)์ ์กฐํฉํ์ฌ ์๋ก์ด ํ์ ์ ์์ฑํฉ๋๋ค.
- printAdminUser ํจ์๋ ์ฌ๊ธฐ์์๋ AdminUser ํ์ ์ ๊ฐ์ฒด๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
๐ค Interface์ Type์ ์ฅ์
ํ์
์คํฌ๋ฆฝํธ์์ interface
์ type
์ ๊ฐ๊ฐ ์ฅ์ ์ ์์ฝํ๋ฉด ๋ค์๊ณผ ๊ฐ์์.
1. Interface
- ํ์ฅ์ฑ:
interface
๋ ์์์ ํตํด ํ์ฅํ ์ ์์ด, ๊ธฐ์กด์ ์ธํฐํ์ด์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ์ธํฐํ์ด์ค๋ฅผ ์ฝ๊ฒ ๋ง๋ค ์ ์์ด์. ์ด๋ ํฌ๊ณ ๋ณต์กํ ๊ฐ์ฒด ๊ตฌ์กฐ๋ฅผ ๊ด๋ฆฌํ ๋ ์ ์ฉํด์. - ๋ช
ํํ ๊ณ์ฝ ์ ์:
interface
๋ ํด๋์ค์ ๊ฐ์ฒด์ ๋ช ํํ ๊ณ์ฝ์ ์ ์ํ๋ ๋ฐ ์ ํฉํด์. ์ด๋ฅผ ํตํด ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์์น์ ํจ๊ณผ์ ์ผ๋ก ์ ์ฉํ ์ ์์ด์. - ์ฝ๋ ์ฌ์ฌ์ฉ๊ณผ ์กฐ์งํ: ์์์ ํตํด ๊ณตํต ๊ธฐ๋ฅ์ ์ฌ์ฌ์ฉํ๊ณ , ์ฝ๋๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ์กฐ์งํํ ์ ์์ด์.
2. Type
- ์ ์ฐ์ฑ๊ณผ ๊ฐ๋ ฅํ ์กฐํฉ:
type
์ ๋ค์ํ ํ์ ์ ๊ฒฐํฉํ์ฌ ์๋ก์ด ํ์ ์ ์์ฑํ ์ ์์ด์. ์ด๋ ์ ๋์จ, ์ธํฐ์น์ ๋ฑ์ ๋ณต์กํ ํ์ ์กฐํฉ์ ๊ฐ๋ฅํ๊ฒ ํด์. - ๊ธฐ์กด ํ์ ํ์ฉ: ๊ธฐ์กด์ ๊ธฐ๋ณธ ํ์ ์ด๋ ๋ณตํฉ ํ์ ์ ํ์ฉํ์ฌ ์๋ก์ด ํ์ ์ ํจ์จ์ ์ผ๋ก ์ ์ํ ์ ์์ด์.
- ์กฐ๊ฑด๋ถ ํ์ดํ: ์กฐ๊ฑด๋ถ ํ์ ๊ณผ ๊ฐ์ ๊ณ ๊ธ ํ์ดํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ด, ๋ ์ ๊ตํ ํ์ ์ ์๊ฐ ๊ฐ๋ฅํด์.
์ฆ, interface๋ ๊ฐ์ฒด์ ๊ณ์ฝ๊ณผ ํ์ฅ์ ์ด์ ์ ๋๊ณ , type์ ํ์ ์ ์กฐํฉ๊ณผ ๋ณต์กํ ํ์ ์ ์์ ๊ฐ์ ์ ๊ฐ์ง๊ณ ์์ด์.
๐จ ์ฃผ์ํ ์
1. Interface ์ฌ์ฉ ์ ์ฃผ์ํ ์
- ์๋ ๋ณํฉ: ๊ฐ์ ์ด๋ฆ์
interface
๋ ์๋์ผ๋ก ํฉ์ณ์ ธ์. ์ด๋ ํธ๋ฆฌํ ์ ์์ง๋ง, ์์์น ๋ชปํ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์๋ ์์ด์. - ํ์ฅ์ฑ:
interface
๋ ๋ค๋ฅธinterface
๋ฅผ ์์๋ฐ์ ํ์ฅํ ์ ์์ด์. ์ด๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ ์ฉํด์.
2. Type ์ฌ์ฉ ์ ์ฃผ์ํ ์
- ๋ณต์กํ ํ์
์ ์:
type
์ ๋ณต์กํ ํ์ ์กฐํฉ์ ๋ง๋ค ์ ์์ง๋ง, ๋๋ฌด ๋ณต์กํด์ง๋ฉด ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ์ด๋ ค์์ง ์ ์์ด์. - ์ฌ์ฌ์ฉ๊ณผ ์ ์ง๋ณด์:
type
์ ์ฌ์ฌ์ฉ๊ณผ ํ์ฅ์ดinterface
๋ณด๋ค ์ ํ์ ์ผ ์ ์์ด์. ๋ฐ๋ผ์ ์ฝ๋์ ์ ์ง๋ณด์๋ฅผ ๊ณ ๋ คํด์ผ ํด์.
3. ๊ณตํต ์ฃผ์์ฌํญ
- ์ฑ๋ฅ: ํฐ ํ๋ก์ ํธ์์๋
interface
์type
์ ์ฌ์ฉ์ด ์ปดํ์ผ ์๊ฐ์ ์ํฅ์ ์ค ์ ์์ด์. ์ผ๋ฐ์ ์ผ๋กinterface
๊ฐ ๋ ๋น ๋ฅด๊ฒ ์ปดํ์ผ๋ผ์.
๐ ๊ฒฐ๋ก
interface
์ type
์ ๊ฐ๊ฐ์ ์ฌ์ฉ ์ฌ๋ก์ ํ์์ ๋ฐ๋ผ ์ ํํ ์ ์์ด์. ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฒด์ ํํ๋ฅผ ์ ์ํ๊ณ ํด๋์ค์์ ์ํธ์์ฉ์ด ์ค์ํ ๊ฒฝ์ฐ์๋ interface
๋ฅผ, ๋ ๋ณต์กํ๊ฑฐ๋ ์ ์ฐํ ํ์
์ ์๊ฐ ํ์ํ ๊ฒฝ์ฐ์๋ type
์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์์. TypeScript๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ, ๋ ์์ ์ ์ด๊ณ ๋ช
ํํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ๋๋ฉฐ, ์ด๋ ํ๋ก์ ํธ์ ์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ์ ํฌ๊ฒ ํฅ์ํด์.
๐ ์ถ๊ฐ ์ ๋ณด
- ํ์
์คํฌ๋ฆฝํธ์
interface
์type
์ ๋ํ ๋ ๊น์ ์ดํด๋ฅผ ์ํ์ ๋ค๋ฉด, TypeScript ๊ณต์ ๋ฌธ์์์ ์์ธํ ์ ๋ณด๋ฅผ ์ฐพ์๋ณผ ์ ์์ด์.
'Language > TypeScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TypeScript] Never ํ์ (1) | 2024.10.06 |
---|---|
[TypeScript] ์ด๊ฑฐํ(Enums) (2) | 2024.10.05 |
[TypeScript] ํ์ ๊ฐ๋(Type Guard) (0) | 2024.04.20 |
[TypeScript] ์กฐ๊ฑด๋ถ ํ์ (0) | 2024.02.19 |
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!