ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ๊ณต๋ถํ๋ค ๋ณด๋ฉด, ํ์ ์คํฌ๋ฆฝํธ์ ํ์ ์์คํ ์ โ๊ตฌ์กฐ ๊ธฐ๋ฐ ํ์ โ์ด๋ผ๋ ๊ธ์ ํ ๋ฒ์ฏค์ ์ฝ์ด๋ณด๊ฒ๋๋ค. ์ด๋ ๊ฐ๋ฐ์๊ฐ ํ์ ์ด ๋ฌด์์ธ์ง ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋๋ก ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ โ๋ ํ์ดํโ์ ๊ธฐ๋ฐ์ผ๋ก ๋ชจ๋ธ๋งํ ๊ฒ์ด๋ค.
๊ณ ๋ก, ํ์ ์คํฌ๋ฆฝํธ์ ํ์ ์์คํ ์ธ โ๊ตฌ์กฐ ๊ธฐ๋ฐ ํ์ โ์ ์ ๋๋ก ์ดํดํ๊ธฐ ์ํด์๋ ๋ ํ์ดํ์ ์ดํด๊ฐ ๋ฌผ๋ก ํ์ํ ๊ฒ์ด๋ค. ๋ ํ์ดํ์ ์์๋ณด๋ฉด์, ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ ์คํฌ๋ฆฝํธ์ ํ์ ์ฒดํน์ ๋ํด์ ๊ณต๋ถํด๋ณด์.
๐ค ๊ฐ๋จํ ์ดํดํ๊ธฐ์ ์ด ์ฌ์ง๋งํ ๊ฒ ์๋ ๊ฒ ๊ฐ๋ค.
๋ ํ์ดํ์ด๋, โ๋ด๊ฐ ์ ์ํ ๋์์ ํ ์ ์๋ค๋ฉด ๊ทธ ํ์ ์ผ๋ก ์ธ์ ํด์ฃผ๋ ๊ฒ์ด๋ค.โ ์ด๋ ต๊ฒ ๋งํ๋ฉด โ๊ฐ์ฒด์ ๋ณ์, ๋ฉ์๋์ ์งํฉ์ด ๊ฐ์ฒด์ ํ์ ์ ๊ฒฐ์ ํ๋ ๊ฒโ์ ๋งํ๋ค.
์ฌ์ง์ ๋ณด์. ๋น์ฅ ์ ๊ฒ์ ์ด๋ฆ์ด ์ฝ์ผํธ์ธ์ง ๋ผ์ง์ฝ์ธ์ง๋ ์ค์ํ์ง ์๋ค. ๋ด๊ฐ ์ ์ํ ๋์(์ฝ๋๋ฅผ ๊ฝ์ ์ ์๋ค!)๋ฅผ ์คํํ ์ ์๋ค๋ฉด ์ฝ์ผํธ๋ก ๊ฐ์ฃผํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
์๋์์ ์ฝ๋๋ก ์กฐ๊ธ ๋ ์์ธํ ์ดํด๋ณด์.
class Outlet {
stick() {
console.log('...');
}
charge() {
console.log('์ ๋ ฅ ๊ณต๊ธ ์ค!');
}
}
class PigNose {
stick() {
console.log('๊ฟ!');
}
}
function sticking(outlet) {
outlet.stick();
}
function charging(outlet) {
outlet.stick();
outlet.charge();
}
const outlet = new Outlet();
const pigNose = new PigNose();
sticking(outlet);
sticking(pigNose);
charging(outlet);
charging(pigNose); // ๋ฐํ์ ์๋ฌ ๋ฐ์!
์ฌ๊ธฐ์ outlet
๊ณผ pigNose
๋ผ๋ ์ธ์คํด์ค๋ค์ ํด๋์ค๋ฅผ ํตํด ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ ์ํ๋ ๋์์ ์คํํ๋ ํจ์์ธ sticking
๊ณผ charging
์์ ํธ์ถํ๋ค.
์ฝ์ผํธ์ ๋ผ์ง์ฝ๋ ๋ชจ๋ ๊ฝ์ ์ ์๊ธฐ ๋๋ฌธ์ sticking
์์๋ ์ฝ์ผํธ์ ๋ผ์ง์ฝ ๋ชจ๋ ์ฝ์ผํธ๋ก ๊ฐ์ฃผ๋์์ง๋ง, ๋ผ์ง์ฝ๋ ์ ๋ ฅ ๊ณต๊ธ์ด ๋์ง ์๊ธฐ ๋๋ฌธ์ charging
์์๋ ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ด์ฒ๋ผ โ๋์ ์ด๋ฉฐ ๋ฐํ์ ์ค์ ์ก์ธ์ค๋๋ ์ ํ ๊ตฌ์กฐ์ ํด๋น ๋ถ๋ถ๋ง ๊ธฐ์ค์ผ๋ก ์ ํ ํธํ์ฑ์ ๊ฒฐ์ โ ํ๋ ๋ฐฉ์์ ๋ ํ์ดํ์ด๋ผ๊ณ ํ๋ค.
์์์ ๋ดค๋ฏ์ด, sticking
์ด๋ผ๋ ํจ์๋ โ๋ผ์ง์ฝ๋ฅผ ์ฝ์ผํธ๋ก ์๋ชป ๊ฐ์ฃผํ๋คโ ์ด๋ฌํ ์ผ์ด ์ค์ ๋ก ๊ฐ๋ฐํ๊ฒฝ์์ ์ผ์ด๋๋ค๋ฉด ์ํํ ์๋ ์์ด๋ณด์ธ๋ค. ๋ ํ์ดํ์ ํน์ง์ ๋ญ๊ณ , ๋ค์ ์ํํด ๋ณด์ด๋ ๋ฐ๋ ๋ถ๊ตฌํ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ ํ์ดํ์ด ์ฌ์ฉ๋ ์ด์ ๋ ๋ฌด์์ผ๊น?
๋ฐฉ๊ธ ์์์ ๋งํ๋ฏ์ด ๋ ํ์ดํ์ ๋ฎ์ ์์ ์ฑ์ด๋ผ๋ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค. ๋น์ฅ ์ ์ฝ๋์์ ์ดํด๋ณธ sticking
๊ณผ charging
์ด๋ผ๋ ํจ์๋ ๋ชจ๋ ์ฝ์ผํธ๋ฅผ ์ํ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋, ๋ผ์ง์ฝ๋ ํ๋ผ๋ฏธํฐ๋ก ๋ฃ์ ์ ์์๊ณ , ๊ทน๋จ์ ์ผ๋ก๋ ๊ฐ์ฒด๊ฐ ์๋ string, number ๋ฑ๋ฑ ์๋ฌด๊ฑฐ๋ ๋ฃ์ ์๋ ์์ ๊ฒ์ด๋ค.
๊ทธ๋ ๊ฒ ๋ฃ๋๋ผ๋, ์๋์น ์์ ๋์์ ์คํํ๊ฑฐ๋ (์์ ์์์์๋ ๋ผ์ง์ฝ์ stick ๋ฉ์๋๋ฅผ ์คํํ์ ๋ โ๊ฟ!โ์ด ์ฝ์์ ์ฐํ๋ ๊ฒ์ด๋ผ๊ณ ํ ์ ์๊ฒ ๋ค.) ๋ฐํ์์์ ์๋ฌ๊ฐ ๋ฐ์ํ ๋ฟ์ด๋ค. (ํ์ ์ด ๋ง์ง ์์๋ ์คํ์ ๋๋ค.)
๋ ํ์ดํ์ ์์ ์ฑ์ ํฌ๊ธฐํ๊ณ , ํธ๋ฆฌํจ์ ์ก์ ๋ฐฉ์์ด๋ค. ์ด๋ก์จ ์ป๋ ์ด๋์ ๋น์ฅ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐ์ ํ ์ ์๋ค๋ ์ ๊ณผ, ์ฝ๋๋ฅผ ์ ์ฐํ๊ฒ ์์ฑํ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ชจ๋ ๊ฒฝํํด๋ณธ ์ฌ๋์ด๋ผ๋ฉด ์ด๊ฒ ๋ฌด์จ ์๋ฏธ์ธ์ง ๋ฐ๋ก ์๋ฟ์ ๊ฒ์ด๋ค.
ํ์ ์ ๋ํ ๊ณ ๋ฏผ์ด ํ์์์ผ๋ ๊ฐ๋ฐ์ด (๋น์ฅ์) ๋น ๋ฅด๊ฒ ์งํ์ด ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ number
, string
๋ฑ๋ฑ ํจ์ ํ๋ผ๋ฏธํฐ๋ง๋ค ์ค๋ฒ๋ก๋ฉ์ด๋ ์๋ก์ด ํจ์๋ฅผ ๋ง๋ค ํ์๊ฐ ์์ด์ ์ฝ๋๋ฅผ ์ ์ฐํ๊ฒ ์์ฑํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ ๊ฒ์ด๋ค.
๊ทธ๋ผ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ ํ์ดํ์ ๋ชจ๋ธ๋งํ โ๊ตฌ์กฐ ๊ธฐ๋ฐ ํ์ โ์ ์ด๋จ๊น? ํ์ ์คํฌ๋ฆฝํธ์ ๊ตฌ์กฐ์ ํ์ ์์คํ ์ ๊ฐ์ฒด๊ฐ ๊ฐ์ ํ๋กํผํฐ๋ฅผ ๋ชจ๋ ๊ฐ์ง๊ณ , ๋์ผํ ํํ๋ฅผ ๊ฐ์ง๋ฉด ๊ฐ์ ํ์ ์ผ๋ก ํ๋จํ๋ค.
์๋ ์ฝ๋์ ์์๋ฅผ ๋ณด์.
interface Crew {
name: string;
course: string;
}
interface Coach {
name: string;
course: string;
}
const printCrew = (crew: Crew) => {
console.log(crew.name, crew.course);
}
Coach
ํ์
์ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ printCrew
์ ๋์
ํ๋ค๊ณ ํด๋, ํ์
์คํฌ๋ฆฝํธ๋ ์๋ฌด๋ฐ ์๋ฌ๋ฅผ ๋ฐ์์ํค์ง ์๋๋ค. Crew
ํ์
๊ณผ Coach
ํ์
์ ๋์ผํ ํํ๋ฅผ ๊ฐ์ก๊ธฐ ๋๋ฌธ์ ๊ฐ์ ํ์
์ผ๋ก ํ๋จํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ด์๋ ๋ค๋ฅธ ์ด๋ฆ ๊ธฐ๋ฐ ํ์
๋ ์กด์ฌํ๋ค.
๋ ํ์ดํ์ ๊ธฐ๋ฐ์ผ๋ก ํ ๊ตฌ์กฐ ๊ธฐ๋ฐ ํ์ ์ ์ด๋ฆ ๊ธฐ๋ฐ ํ์ ๊ณผ ๋ค๋ฅด๊ฒ ์งํฉ ๋จ์๋ก ์ฒดํฌํ๊ธฐ ๋๋ฌธ์ ์ค๋ณต๋๋ ์์ฑ ํน์ ์ค๋ณต๋๋ ๋ฉ์๋๋ฅผ ํ๊ธฐ์ ์ผ๋ก ์ค์ผ ์ ์๋ ํฐ ์ฅ์ ์ด ์กด์ฌํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฆ ๊ธฐ๋ฐ ํ์ ์ ๋นํด ํ์ ์ด ๋นก๋นกํ์ง ์๊ธฐ ๋๋ฌธ์ ์์ฐ์ฑ์ ๋์ผ๋ฉด์ ๋ ํ์ดํ๊ณผ๋ ๋ฌ๋ฆฌ ์์ ์ฑ๋ ๊ฐ์ง๊ณ ๊ฐ ์ ์๋ค.
์, ์ด์ ๋งจ ์ฒ์์ ์์๋ฅผ ๋ค๊ณ ์์ ๋น๊ตํด ๋ณด์.
interface Outlet {
stick: () => void;
charge: () => void;
}
interface PigNose {
stick: () => void;
}
const sticking = (outlet: Outlet) => {
outlet.stick();
}
์ด๋ ๊ฒ Outlet
๊ณผ PigNose
ํ์
์ ๊ฐ์ ์์ฑํด๋์ ๋ค์ ๋ณ์๋ฅผ ์์ฑํด, sticking
ํจ์์ ํ๋ผ๋ฏธํฐ๋ก ์ค๋ค๋ฉด PigNose
ํ์
์ ๋ณ์๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ์ค ๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
charge
๋ฉ์๋๋ฅผ ๋ด๋ถ์์ ํธ์ถํ์ง ์๋๋ผ๋ ๋ง์ด๋ค. ๋ฐํ์์์ ๋ฐ์ํ ์ค๋ฅ๋ฅผ ์ปดํ์ผ ํ์์ ๋ฏธ๋ฆฌ ๋ฐ๊ฒฌํด ๋ฌธ์ ๋ฅผ ๋ง์ ์ ์๋ ์์ ์ฑ์ด ์๊ฒผ๋ค!
์ด์ ๋ ๊ฐ์ง๋ฅผ ๋ชจ๋ ์์๋ดค์ผ๋, ๋ง์ง๋ง์ผ๋ก ๋ ๊ฐ์ง๋ฅผ ๋น๊ตํด๋ณด์.