๐ ํ์ ํธํ ์ด๋?
ํ์ ์คํฌ๋ฆฝํธ ์ฝ๋์์ ํน์ ํ์ ์ด ๋ค๋ฅธ ํ์ ์ ์ ๋ง๋์ง๋ฅผ ์๋ฏธํ๋ค. ํ์ ์คํฌ๋ฆฝํธ๊ฐ ์ฝ๋๋ฅผ ํด์ํด ๋๊ฐ๋ ๊ณผ์ ์์ ๋ ๊ฐ์ ํ์ ์ด ์๋ก ํธํ์ด ๋๋์ง๋ฅผ ์ ๊ฒํ๋ ๊ฒ์ ํ์ ํธํ์ฑ์ด๋ผ๊ณ ํ๋ค.
interface Developer {
name: string;
skill: string;
}
interface Person {
name: string;
}
var developer: Developer;
var person : Person;
person = developer;
์ด๋ ๊ฒ Developer์ Person์ ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ๊ณ ์ค๋ณต๋๋ ์์ฑ์ name๋ฟ์ด๋ค. Developer๋ name๊ณผ skill์ด๋ผ๋ ์์ฑ์ด ์ด 2๊ฐ๋ ์๊ณ , Person์ name์ด๋ผ๋ ์์ฑ 1๊ฐ๋ฟ. ๋ง์ฝ ์์๋ ์ธํฐํ์ด์ค๋ฅผ ์ ์ธํ๊ณ ์๋๋ ํด๋์ค๋ฅผ ์ ์ธํด๋ ์ค์ ๋ก ์ด ๋ ๊ฐ์ ํ์ ์ ๊ฐ๋ค๊ณ ํ๋ค. ํ์ ์ ์ ์๋์ด ์๋ ํ์ ์ ๊ฐ์ง๊ณ ์ค์ ๋ก ํธํ ๋๋์ง๋ฅผ ์ ๊ฒํ๋๋ฐ ์ด๋ฐ ๊ฒ์ ๊ณต์๋ฌธ์์์๋ ๊ตฌ์กฐ์ ํ์ดํ์ด๋ผ๊ณ ํ๋ค.
์ด๋ ๊ฒ ๋์ ๋,
person = developer;
์ด์ฒ๋ผ ์ค๋ฅธ์ชฝ์๋ ๋ ๋ง์ ์์ฑ์ ๊ฐ์ง๊ณ ์๊ฑฐ๋ ๋ ํฐ ๊ด๊ณ๋ฅผ ๊ฐ๊ณ ์์ ๋์ ์ผ์ชฝ๊ณผ ํธํ์ด ๋๋ค. ๋ ๊ฐ์ฒด๊ฐ ๋ง์ ์์ฑ์ ๊ฐ์ง, ๊ตฌ์กฐ์ ์ผ๋ก ๋ ํฐ ๊ด๊ณ๋ฅผ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๐ ๋ค๋ฅธ ์์ 01
var add = function(a: number) {
console.log(a);
}
var sum = function(a: number, b: number) {
return a + b;
}
์ฌ๊ธฐ์ add์ sum์ ์ฐจ์ด์ ์ sumํจ์๊ฐ ํ๋ผ๋ฏธํฐ ํ ๊ฐ๊ฐ ๋ ๋ค์ด์๋ค. ๊ทธ๋์ sum์ด๋ผ๋ ํจ์ ์์ฒด๊ฐ add๋ผ๋ ํจ์๋ณด๋ค ๋ ํฌ๋ค๊ณ ๋ณผ ์ ์๋ค. ํฌ๋ค๋ผ๋ ์๋ฏธ๋ ์ถ๊ฐ์ ์ผ๋ก ์ต์ ๋ค์ ๋ ์ ๊ณตํ๋ค.
๐ ๋ค๋ฅธ ์์ 02
interface Empty<T> {
}
var empty1: Empty<string>;
var empty2: Empty<number>;
empty1 = empty2;
empty2 = empty1;
๋งจ ์์ ์ธํฐํ์ด์ค๋ ์์ ๊ฐ์ด ๋น์ด์์ด์ ์ด๋ค ๊ฐ์ด ๋ค์ด์๋ ๋์ผํ ํ์ ์ด๋ผ๊ณ ๊ฐ์ฃผํ๋ค.
๐ ๋ค๋ฅธ ์์ 03 : ์ ๋ค๋ฆญ
interface NotEmpty<T> {
data:T;
}
var notEmpty1: NotEmpty<string>;
var notEmpty2: NotEmpty<number>;
notEmpty1 = notEmpty2;
notEmpty2 = notEmpty1;
์ด๋ ๊ฒ ์ ๋ค๋ฆญ์ผ๋ก ์ธํฐํ์ด์ค ํธ์ถํด์ฃผ๋ฉด ํ์ ์ด ๋ฐ๋๊ฑธ๋ก ๊ฐ์ฃผ๋์ด ์๋ก ํ์ ํธํ์ด ๋์ง ์์ ์๋ฌ๊ฐ ๋๋ค.