๐ค ๊ธฐ์กด์ ์๊ณ ์๋ Duck typing๊ณผ Typescript ๊ตฌ์กฐ์ ํ์ดํ์ ์ฐจ์ด๋ฅผ ์ธ์งํ๊ณ ํ๊ณ๋ฅผ ํ์ ํฉ๋๋ค.
Duck typing์ด๋ “๋ง์ฝ ์ด๋ค ์๊ฐ ์ค๋ฆฌ์ฒ๋ผ ๊ฑท๊ณ , ํค์์น๊ณ , ๊ฝฅ๊ฝฅ๊ฑฐ๋ฆฌ๋ ์๋ฆฌ๋ฅผ ๋ธ๋ค๋ฉด ๋๋ ๊ทธ ์๋ฅผ ์ค๋ฆฌ๋ผ๊ณ ๋ถ๋ฅผ ๊ฒ์ด๋ค.” ๋ผ๋ ๋ง์์ ํ์ํ์์ผ๋ฉฐ, ๊ฐ์ฒด์ ํ์ ์ ๋ฏธ๋ฆฌ ์ ํ๋ ๊ฒ์ด ์๋๋ผ ๋ฐํ์ ์ ๊ฐ์ฒด์ ํ์์ ๊ธฐ๋ฐํ์ฌ ํ์ ์์ฉ์ฑ์ ์ฒดํฌํ๋๋ก ํ๋ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ ์ ๋๋ค.
type Person = {
name: string,
age: number,
};
const personA = {
name: 'ํฌ์',
age: 27,
};
const duckA = {
name: '์ค๋ฆฌ',
age: 2,
};
const person: Person = duckA; // it's okay
ํ์ ์คํฌ๋ฆฝํธ์ ํ์ ์์คํ ์ ๋ฐํ์์ด ์๋ ์ปดํ์ผ ํ์์ ํ์ ์๋ฌ๋ฅผ ์ก์๋ด๋๋ก ์ค๊ณ ๋์์ผ๋, 2๊ฐ์ ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ชจ์์ด๋ ๊ตฌ์กฐ์ ๋ฐ๋ผ ํ์ ์์ฉ์ฑ์ ์ฒดํฌํ๋๋ก ๊ฐ๋ฐ๋์์ต๋๋ค. ๋ฐ๋ผ์, ๋ฐํ์์ ๋น๊ตํ์ง ์๋ ๋ค๋ ์ ์์ ๋ช ํํ Duck typing ์ด๋ผ ๋ณผ ์๋ ์์ง๋ง ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ์ง์ ๋ class๋ type์ด ์๋ ๊ตฌ์กฐ์ ๊ธฐ๋ฐํ์ฌ ๋น๊ตํ๋ค๋ ์ ์์ ์ ์ฌํ๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
ํ์ ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉํ๋ ์ด๋ฌํ ๋ฐฉ์์ “๊ตฌ์กฐ์ ํ์ดํ” ํน์ “๊ตฌ์กฐ์ ํ์ ์์คํ ”์ด๋ผ๊ณ ์ ์ํฉ๋๋ค. ์ด๋ Java๋ C#์์ ์ฌ์ฉํ๋ “๋ช ๋ชฉ์ ํ์ ์์คํ ” ์ฆ, type์ด๋ class๋ฅผ ๋ณ์์ ์ง์ ์ ํด๋๊ณ ์ด๋ฅผ ํตํด ๋น๊ตํ๋ ๋ฐฉ์๊ณผ ๋์กฐ์ ์ ๋๋ค.
ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์ฒด๊ฐ ์ค์ ๋ก ๊ฐ์ type์ ๊ฐ์ง๋ ์ง๋ฅผ ๋น๊ตํ๋ ค๋ฉด ๊ฐ์ฒด๋ฅผ ๋ณด๋ค Unique ํ๊ฒ ๋ง๋ค๋ฉด ๋ฉ๋๋ค. ์๋์ ๊ฐ์ด ํด๋น ๊ฐ์ฒด๋ง์ด ๊ฐ์ง ์ ์๋ ํ๋๋ฅผ ์ถ๊ฐํ๋ค๋ฉด ๊ตฌ์กฐ๊ฐ ๋น์ทํ ๋ณ์๊ฐ ์๊ธฐ๊ธฐ ํ๋ค๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์๋ ์์ต๋๋ค.
type Person = {
name: string,
age: number,
id: number,
};
const personA = {
name: 'ํฌ์',
age: 27,
id: '970716-xxxxxxx',
};
const duckA = {
name: '์ค๋ฆฌ',
age: 2,
};
const person: Person = duckA; // it's not okay
'์น (WEB) > ๊ณต๋ถ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์น๊ฐ๋ฐ์ ๊ธฐ๋ฐ์ผ๋ก ์ฑ๊ฐ๋ฐ ์์ด๋ณด๊ธฐ :: ๋ ๋ค ํด๋ณธ ๊ฐ๋ฐ์ ๐ (1) | 2024.03.24 |
---|---|
Font Glyph (0) | 2023.09.16 |
[Virtualized List] #3. ๊ฐ์๋ฆฌ์คํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋น๊ต (2) | 2023.01.28 |
[Virtualized List] #2. Virtualized List์ ๊ธฐ๋ฅ (0) | 2023.01.07 |
[Virtualized List] #1. ๊ธฐ๋ณธ (Virtualized List์ ๊ตฌ์ฑ) (2) | 2022.12.02 |
Comment