(λ¬λ νμ μ€ν¬λ¦½νΈ) 7~8μ₯
π κΈ°μ μ± μ€ν°λ
23λ
1μλΆν° νλ μ€μΈ κ΅μ‘μμ, λ»μ΄ λ§λ λλ£λ€κ³Ό ν¨κ» μ§ννκ² λ μ€ν°λ
μμΌλ‘λ κΎΈμ€ν κΈ°μ μμ μ μ½κ³ ν¨κ» λ°μ νλ μκ°μ΄ λμμΌλ©΄ μ’κ² λ€!
7μ₯. μΈν°νμ΄μ€
- μΈν°νμ΄μ€λ
κ°μ²΄ ννλ₯Ό μ€λͺ νλ λ λ€λ₯Έ λ°©λ²
- types aliasλ‘ μ μλ κ°μ²΄ νμ
κ³Ό μ μ¬νμ§λ§ μ°¨λ³μ μ‘΄μ¬
- λ μ½κΈ° μ¬μ΄ μ€λ₯ λ©μμ§
- λ λΉ λ₯Έ μ»΄νμΌλ¬ μ±λ₯
- ν΄λμ€μμ λ λμ μνΈ μ΄μ©μ±
Type alias VS Interface
λ κ°μ§ λͺ¨λ μΈλ―Έμ½λ‘ κ³Ό μΌν λ λ€ κ°λ₯νλ€.
μΈν°νμ΄μ€μ νΉμ§
- μμ± μ¦κ°λ₯Ό μν΄ λ³ν©μ΄ κ°λ₯νλ€.
- ν΄λμ€κ° μ μΈλ ꡬ쑰μ νμ μ νμΈνλλ° μ¬μ© κ°λ₯νλ€.
- μΌλ°μ μΌλ‘ μΈν°νμ΄μ€μμ νμ κ²μ¬κΈ°κ° λ 빨리 μλνλ€. λ΄λΆμ μΌλ‘ λ μ½κ² μΊμν μ μλ λͺ λͺ λ νμ μ μ μΈνκΈ° λλ¬Έμ΄λ€.
- μ΄λ¦ μλ κ°μ²΄ 리ν°λ΄μ λ³μΉμ΄ μλ μ΄λ¦μ΄ μλ νλμ κ°μ²΄λ‘ κ°μ£Όλλ―λ‘ μ€λ₯ λ©μμ§λ₯Ό μ’λ μ½κ² μ½μ μ μλ€.
μ½κΈ° μ μ© μμ±(readonly)
- μΈν°νμ΄μ€μ μ μλ κ°μ²΄μ μμ±μ μ¬ν λΉνμ§ λͺ»νλλ‘ μ°¨λ¨ν λ, readonly ν€μλλ₯Ό μΆκ°νλ€.
- readonly μ°μ°μλ νμ μμ€ν μλ§ μ‘΄μ¬νλ©° μΈν°νμ΄μ€μμλ§ μ¬μ©ν μ μλ€. λ¨μ§, κ°λ° μ€μ κ·Έ μμ±μ΄ μμ λμ§ λͺ»νλλ‘ λ³΄νΈνλ€.
λ©μλμ μμ± ν¨μ
- λ©μλ ꡬ문:
test(): void;
- μμ± ν¨μ ꡬ문:
test: () => void;
λ©μλλ readonly μ μΈμ΄ λΆκ°λ₯, μμ± ν¨μλ κ°λ₯
νΈμΆ μκ·Έλμ²
ν¨μ νμ κ³Ό μ μ¬νμ§λ§, μ½λ‘ (:)μ΄ μλ νμ΄ν(=>)λ‘ νμνλ€.
interface TestImpl {
(input: string): number;
}
const test: TestImpl = (input: string) => input.length;
μΈλ±μ€ μκ·Έλμ²
- μλ°μ€ν¬λ¦½νΈ κ°μ²΄ μμ± μ‘°νλ μ묡μ μΌλ‘ ν€λ₯Ό λ¬Έμμ΄λ‘ λ³ννκΈ° λλ¬Έμ μΈν°νμ΄μ€μ κ°μ²΄λ μΌλ°μ μΌλ‘ λ¬Έμμ΄ ν€λ₯Ό μ¬μ©νλ€.
interface Example {
[i: string]: number;
}
- μΈλ±μ€ μκ·Έλμ²λ κ°μ²΄μ κ°μ ν λΉν λ νΈλ¦¬νμ§λ§
νμ μμ μ±μ μλ²½νκ² λ³΄μ₯νμ§λ λͺ»νλ€.
- λͺ λͺ λ μμ±μ΄ λ ꡬ체μ μΈ νμ μ μ 곡νκ³ , λ€λ₯Έ λͺ¨λ μμ±μ μΈλ±μ€ μκ·Έλμ²μ νμ μ λ체νλ κ²μΌλ‘ νΌν©ν΄μ μ¬μ©ν μ μλ€.
- μΌλ°μ μΌλ‘λ μΈλ±μ€ μκ·Έλμ²μ μμ μμ±λ³΄λ€ λ ꡬ체μ μΈ μμ± νμ 리ν°λ΄μ μ¬μ©νλ€.
interface Dog {
name: 'hodu'; // λ ꡬ체μ μΈ λ¦¬ν°λ΄
[i: string]: string;
}
μΈν°νμ΄μ€ νμ₯
- μΈν°νμ΄μ€κ° λ€λ₯Έ μΈν°νμ΄μ€μ λͺ¨λ λ©€λ²λ₯Ό 볡μ¬ν΄μ μ μΈν μ μλ νμ₯λ μΈν°νμ΄μ€
- νμ₯ν μΈν°νμ΄μ€μ μ΄λ¦ λ€μ
extends
ν€μλλ₯Ό μΆκ°νλ€.
μ¬μ μλ μμ±
- νμ κ²μ¬κΈ°λ μ¬μ μλ μμ±μ΄ κΈ°λ³Έ μμ±μ ν λΉλμ΄μλλ‘ κ°μνλ€.
- μ¦, μ¬μ μν μμ±μ μ΄μ μ μλ³΄λ€ λ μ’μ λ²μμ¬μΌ νλ€.
λ€μ€ μΈν°νμ΄μ€ νμ₯
- μΈν°νμ΄μ€λ μ¬λ¬ κ°μ μΈν°νμ΄μ€λ₯Ό νμ₯ν΄μ μ μΈν μ μλ€.
- extends ν€μλ λ€μ μΌνλ‘ μΈν°νμ΄μ€ μ΄λ¦μ ꡬλΆν΄ μ¬μ©νλ©΄ λλ€.
μΈν°νμ΄μ€ λ³ν©
- μ¬λ¬ κ°μ μΈν°νμ΄μ€κ° λμΌν μ΄λ¦μΌλ‘ λμΌν μ€μ½νμ μ μΈλ κ²½μ°, μ μΈλ λͺ¨λ νλλ₯Ό ν¬ν¨νλ λ ν° μΈν°νμ΄μ€κ° λλ€.
- μΈν°νμ΄μ€ λ³ν©μ μμ£Ό μ¬μ©νμ§λ μλλ€.
- μΈν°νμ΄μ€ λ³ν©μ μΈλΆ ν¨ν€μ§ λλ Windowμ κ°μ λ΄μ₯λ μ μ μΈν°νμ΄μ€λ₯Ό 보κ°νλλ° νΉν μ μ©νλ€.
μ΄λ¦μ΄ μΆ©λλλ λ©€λ²
- μμ±μ΄ μ΄λ―Έ μΈν°νμ΄μ€μ μ μΈλμ΄ μλ€λ©΄ λμ€μ λ³ν©λ μΈν°νμ΄μ€μμλ λμΌν λμΌν νμ μ μ¬μ©ν΄μΌ νλ€.
- κ°μ μ΄λ¦μ μμ±μ΄ νμ μ΄ μλ‘ λ€λ₯΄λ©΄ μ€λ₯κ° λ°μνλ€.
- λ€λ§, λμΌν μ΄λ¦κ³Ό λ€λ₯Έ μκ·Έλμ²λ₯Ό κ°μ§ λ©μλλ μ μν μ μλ€.(ν¨μ μ€λ²λ‘λ)
8. ν΄λμ€
λͺ
μ¬ν λ΄μ©: νμ
μ€ν¬λ¦½νΈλ ν΄λμ€ μ¬μ©μ΄λ λ€λ₯Έ μΈκΈ° μλ μλ°μ€ν¬λ¦½νΈ ν¨ν΄μ κΆμ₯νμ§λ λ§μ§λ μλλ€.
κ°μΈμ μΈ μκ°: κ·Έλ μ§λ§ μλ° μΈμ΄κ° ν΄λμ€λ‘ κ°μ²΄λ₯Ό νννλ κ°μ²΄ μ§ν₯ μΈμ΄μΈλ§νΌ νμ μ€ν¬λ¦½νΈλ ν΄λμ€λ‘ ꡬνμ λ§μ΄ νλ κ² κ°λ€.
ν΄λμ€ μμ±
- νμ μ€ν¬λ¦½νΈμμ ν΄λμ€μ μμ±μ μ½κ±°λ μ°λ €λ©΄ ν΄λμ€μ λͺ μμ μΌλ‘ μ μΈν΄μΌνλ€.
class Example {
test: string; // μ΄λ° μμΌλ‘ μμ±μ νμ
μ λͺ
μμ μΌλ‘ μ μΈν΄μΌλλ€.
constructor() {
this.test = 'ttt';
}
}
νμ μ€ν¬λ¦½νΈλ μμ²μ λ΄μ ν λΉμ λν΄μ κ·Έ λ©€λ²κ° ν΄λμ€μ μμ¬νλ λ©€λ²μΈμ§ μΆλ‘ νλ €κ³ μλνμ§ μμ΅λλ€.
μ¦, μμ²λΌ λͺ μλ₯Ό ν΄μ£Όμ§ μμΌλ©΄ TSκ° μ€μ€λ‘ μΆλ‘ νμ§ λͺ»νλ κ²μ μλ―Ένλ€.
ν¨μ μμ±
class T {
arrow: () => void;
constructor() {
this.arrow = () => {
console.log(this)
}
}
nonArrow() {
console.log(this)
}
}
const t = new T();
t.arrow(); // 'T: {}'κ° μ°νλ€.
t.nonArrow(); // 'T: {}'κ° μ°νλ€.
t.arrow.bind('arrowμ
λλ€.')(); // 'T: {}'κ° μ°νλ€.
t.nonArrow.bind('λ©μλμ
λλ€.')(); // 'λ©μλμ
λλ€.'κ° μ°νλ€.
class T {
t = 111;
}
// μμ μλλ κ°μ ννμ΄λ€.
class T {
t: number;
constructor() {
this.t = 111
}
}
μ΄κΈ°ν κ²μ¬
- μ격ν μ»΄νμΌλ¬ μ€μ μ΄ νμ±νλ μνμμλ νμ μ€ν¬λ¦½νΈκ° undefined νμ μΌλ‘ μ μΈλ κ° μμ±μ΄ μμ±μμμ ν λΉλμλμ§ νμΈνλ€.
μ격ν μ΄κΈ°ν κ²μ¬λ₯Ό μ μ©νλ©΄ μλλ μμ±μΈ κ²½μ°μλ μ΄λ¦ λ€μμ
!
λ₯Ό μΆκ°νμ¬ κ²μ¬λ₯Ό λΉνμ±νν μ μλ€. κ·Έλ¬λ μ΄λ typeμ anyλ‘ λλ κ²κ³Ό κ°μ΄ νμ μμ μ±μ μ€μ΄λ νμμ΄λ―λ‘ κ°κΈμ μ΄λ©΄ μ½λλ₯Ό 리ν©ν λ§νμ.
μ½κΈ° μ μ© μμ±
- readonlyλ‘ μ μΈλ μμ±μ μ μΈλ μμΉ λλ μμ±μμμ μ΄κΉκ°λ§ ν λΉν μ μλ€. ν΄λΉ μμ±μ μ½μ μλ§ μκ³ κ°μ λ³κ²½ν μλ μλ€.
- letμ΄ μλ constλ‘ λ³μλ₯Ό ν λΉνλ κ²κ³Ό μ μ¬νλ€.(μΆν μ΄κΈ°ν λ° μλ‘μ΄ κ° ν λΉμ΄ λΆκ°λ₯νλ€.)
readonlyλ TSμλ§ μ‘΄μ¬νλ κΈ°λ₯μ΄λ€. κ·Έλ¬λ―λ‘ μ§μ ν μ½κΈ° μ μ© λ³΄νΈκ° νμνλ€λ©΄ privateμ΄λ getterλ₯Ό μ¬μ©νμ.
νμ μΌλ‘μμ ν΄λμ€
νμ μμ€ν μμμ ν΄λμ€λ λ°νμ μμ κ°(ν΄λμ€ κ°μ²΄ μ체)κ³Ό νμ μΌλ‘μλ μμ±λλ€.
- ν΄λμ€μ λμΌν(μ΄λ¦μ΄ κ°μ) λ©€λ²λ₯Ό λͺ¨λ ν¬ν¨νλ λͺ¨λ κ°μ²΄ νμ
μ κ·Έ ν΄λμ€μ ν λΉν μ μλ κ²μΌλ‘ κ°μ£Όνλ€.
- μ΄λ νμ μ€ν¬λ¦½νΈμ ꡬ쑰μ νμ΄νμ΄ μ μΈλλ λ°©μμ΄ μλλΌ κ°μ²΄μ ννλ§ κ³ λ €νκΈ° λλ¬Έμ΄λ€.
class Example {
test: () => void;
constructor() {
this.test = () => {
console.log('test');
}
}
}
const example: Example = {
test() {
console.log('κ°μ²΄μ
λλ€.')
}
}
// class μμ±μλ₯Ό ν΅ν΄ μμ±λ κ°μ²΄κ° μλ, κ°μ²΄ 리ν°λ΄μμλ λμΌν λ©€λ²λ§ κ°κ³ μλ€λ©΄ ν λΉμ΄ κ°λ₯νλ€.
μ΄λ»κ² 보면 μ‘°κΈμ νμ ν΄λ³΄μΌ μ μμ§λ§, μ€μ λ‘ μ°λ¦¬κ° μ½λλ₯Ό μμ±ν λ classλ‘ μ μΈλ νμ μ κ°μ Έμμ κ°μ²΄ 리ν°λ΄λ‘ κ°μ ν λΉνλ μΌμ κ±°μ μλ€.
ν΄λμ€μ μΈν°νμ΄μ€
- ν΄λμ€ μ΄λ¦ λ€μ
implements
ν€μλμ μΈν°νμ΄μ€ μ΄λ¦μ μΆκ°ν¨μΌλ‘μ¨ ν΄λμ€μ μΈμ€ν΄μ€κ° μ΄ μΈν°νμ΄μ€λ₯Ό λ°λ₯Έλ€κ³ μ μΈν μ μλ€.
interface ExampleImpl {
test: string;
}
class Example implements ExampleImpl {
test: string;
constructor() {
this.test = 'testμ
λλ€.';
}
}
- νμ μ€ν¬λ¦½νΈλ μΈν°νμ΄μ€μμ ν΄λμ€μ λ©μλ λλ μμ± νμ μ μ μΆνμ§ μλλ€.
interface ExampleImpl {
test: string;
do: (something: string) => void;
play: (something: string) => void;
}
class Example implements ExampleImpl {
test; // νλ‘νΌν°λ μλ¬ μλ¨.
play; // νλ‘νΌν°λ‘ μ μΈλ ν¨μ μ체λ μλ¬ μλ¨.
constructor() {
this.test = 'testμ
λλ€.';
this.play = (something) => { // Parameter 'something' implicitly has an 'any' type. μ¬κΈ°μ νμ
μλ¬ λ°μ
console.log(`Let's play ${something}`)
}
}
do(something) { // Parameter 'something' implicitly has an 'any' type.
console.log(something);
}
}
// μ¦, something μΈμλ stringμΌλ‘ μΆλ‘ λμ§ λͺ»νκ³ any νμ
μΌλ‘ μ§μ λλ€. κ·Έλ¬λκΉ μμ κ°μ any νμ
μ€λ₯κ° λμ€λ κ²μ΄λ€.
μΈν°νμ΄μ€λ₯Ό ꡬννλ κ²μ μμ ν μμ μ± κ²μ¬λ₯Ό μν¨μ΄λ€!
λ€μ€ μΈν°νμ΄μ€ ꡬν
interface FirstImpl {}
interface SecondImpl {}
class Example implements FirstImpl, SecondImpl {} // λκ°μ μΈν°νμ΄μ€μ κ·μΉμ λͺ¨λ λ€ μ§μΌμΌ νλ€.
μΆμ ν΄λμ€(Abstract Class)
μΌλΆ λ©μλμ ꡬνμ μ μΈνμ§ μκ³ , νμ ν΄λμ€κ° ν΄λΉ λ©μλλ₯Ό μ 곡ν κ²μ μμνμ¬ κΈ°λ³Έ ν΄λμ€λ₯Ό λ§λ€ λ μ¬μ©νλ€.
- class μμ abstractλ₯Ό μΆκ°νλ€.
- μμ±μλ‘μμ μν μ νμ§ λͺ»νλ€.
λ©€λ² μ κ·Όμ±
- public(default): μ΄λμλ μ κ·Ό κ°λ₯
- protected: ν΄λΉ ν΄λμ€ λ΄λΆ λλ νμ ν΄λμ€μμλ§ μ κ·Ό κ°λ₯
- private: ν΄λΉ ν΄λμ€ λ΄λΆμμλ§ μ κ·Ό κ°λ₯
JSμμλ μ묡μ μΌλ‘ protectedλ
_
νμνκ³ privateλ#
μΌλ‘ μ λ§ privateμ κΈ°λ₯μ κ°μ§λ€. TSμ λ©€λ² μ κ·Όμ±μ νμ μμ€ν μλ§ μ‘΄μ¬νλ λ°λ©΄, JSμ privateλ λ°νμμλ μ‘΄μ¬νλ€.
μ μ νλ μ νμ
- classμμ static λν readonlyκ° μ μ©λλ€.