2023. 3. 19. 19:39γμΈμ΄/Javascript(Node, TS...)
κ°μ²΄μ§ν₯ ν¨λ¬λ€μμμ λΉΌλμ μ μλ κ°λ μ΄ λ°λ‘ μΈν°νμ΄μ€μ μΆμ ν΄λμ€μ΄λ€.
μ΄λ€μ λͺ¨λ κ°μλ₯Ό μμν ꡬνμ²΄κ° μνν νλμ μΆμννμ¬ λͺ μνκ³ μ΄λ₯Ό ꡬ체νν κ²μ κ°μ νλ€.
λν μ΄λ€λ§μΌλ‘λ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μλ€λ 곡ν΅μ λ μ‘΄μ¬νλ€.
κ²°κ΅ νΉμ μΈμ€ν΄μ€κ° μΆμνμ μμ‘΄νκ² νμ¬,
κ²°λ‘ μ μΌλ‘ κ°μ²΄μ§ν₯ ν¨λ¬λ€μμ λ€νμ±, μΊ‘μνλΌλ 곡ν΅μ λͺ©νλ₯Ό μμ½κ² λ¬μ±νκ² ν΄ μ€λ€.
λ€λ§ μ΄λ€ κ°μλ λΆλͺ ν μ°¨μ΄κ° μ‘΄μ¬νκΈ° λλ¬Έμ
μ΄λ₯Ό μμλ₯Ό ν΅ν΄ μ 리νκ³ μ νλ€.
Interface vs Abstract Class
μμλ₯Ό μν΄ μ UMLμ κ΄κ³λ₯Ό ꡬννκ² λ€.
Interface μμ
// μΈν°νμ΄μ€
interface IHuman {
spendOneDay(): void;
work(): string;
}
// μΈν°νμ΄μ€ ꡬν
class Student implements IHuman {
spendOneDay(): void {
console.log("κΈ°μ...!");
console.log(this.work());
console.log("μλ©΄...!");
}
work() {
return "νκ΅μμ 곡λΆν©λλ€.";
}
}
// μΈν°νμ΄μ€(μΆμν)μ νμ
μμ‘΄
const student:IHuman = new Student();
student.spendOneDay();
// μ»΄νμΌ μλ¬ λ°μ
console.log(student instanceof IHuman);
Abstract Class μμ
// μΆμ ν΄λμ€
abstract class Human {
spendOneDay() {
console.log("κΈ°μ...!");
console.log(this.work());
console.log("μλ©΄...!");
}
abstract work(): string;
}
// μΆμ ν΄λμ€μ λν μμ ν΄λμ€(ꡬν)
class Student extends Human{
work() {
return "νκ΅μμ 곡λΆν©λλ€.";
}
}
// μΆμ ν΄λμ€(μΆμν)μ νμ
μμ‘΄
const student: Human = new Student();
student.spendOneDay();
// μ μμ μΌλ‘ true λ°ν
console.log(student instanceof Human);
λΉκ΅
1. λ΄λΆ λ‘μ§ ν¬ν¨ μ¬λΆ
μΈν°νμ΄μ€ μμλ₯Ό λ€μ¬λ€λ³΄λ©΄ μΈν°νμ΄μ€ λ΄μλ ν΄λΉ μΈν°νμ΄μ€κ° ꡬνμ κ°μ ν λ©μλμ μ΄λ¦κ³Ό μΈμ, λ°ν νμ λ§μ΄ λͺ μλμ΄μλ€.
κ·Έμ λ¬λ¦¬ μΆμ ν΄λμ€ λ΄μλ μΈν°νμ΄μ€μ λ§μ°¬κ°μ§μΈ λ©μλλ μ‘΄μ¬νλ λ°λ©΄(abstract λ©μλ), μ€μ λ‘μ§μ΄ μμ±λ λ©μλλ μ‘΄μ¬νλ€.
λ°λΌμ 첫λ²μ§Έ μ°¨μ΄λ μ€μ λ°νμμμ μλνλ μ½λκ° ν¬ν¨λμ΄ μλμ§ μ¬λΆμ΄λ€.
μΆμ ν΄λμ€λ λ³΄ν΅ μμ ν΄λμ€μμ 곡μ ν κ³΅ν΅ λ‘μ§μ λΆλͺ¨ μΆμ ν΄λμ€μ μμ±νμ¬
λΆνμν μ½λ μ¬λ°λ³΅ λ° ν₯ν μμ μμλ₯Ό μ€μ΄λ λ°©μμΌλ‘ νμ©νλ€.
2. μμ ν΄λμ€ κ΅¬ν λ°©μ
μΈν°νμ΄μ€ μμλ₯Ό 보면, Student ν΄λμ€κ° IHuman μΈν°νμ΄μ€μ μμ‘΄νλ€λ κ²μ λͺ μνκΈ° μν΄ implementsλ₯Ό μ¬μ©νλ€.
λ°λ©΄ μΆμ ν΄λμ€ λ°©μμμλ extendsλ₯Ό μ¬μ©νμ¬ λΆλͺ¨ ν΄λμ€λ₯Ό μμνκ² λλ€.
μ¬κΈ°μ μ μ μλ λλ²μ§Έ μ°¨μ΄λ μμ ν΄λμ€ κ΅¬ν μ μ¬μ©νλ implements, extends μ¬λΆμ΄λ€.
implementsμ extendsμλ μ°¨μ΄κ° μ‘΄μ¬νλλ°,
implementsλ₯Ό ν΅ν΄μλ μ¬λ¬ μΈν°νμ΄μ€λ₯Ό λμμ μμν μ μλ λ°λ©΄ extendsλ₯Ό ν΅ν΄μλ μ€μ§ νλμ λΆλͺ¨ ν΄λμ€λ₯Ό κ°μ§ μ μλ€.
λ°λΌμ implementsλ₯Ό μ¬μ©νλ κ΄κ³λ₯Ό has-A κ΄κ³,
extendsλ₯Ό μ¬μ©νλ κ΄κ³λ₯Ό is-A κ΄κ³λΌκ³ νλ€.
3. λ°νμμ μ‘΄μ¬ μ¬λΆ
κ° μμμ κ°μ₯ λ§μ§λ§ λΌμΈμ 보면 instanceof λ₯Ό μ΄μ©νμ¬ ν΄λΉ μΈμ€ν΄μ€κ° 무μμμ νμλ μΈμ€ν΄μ€μΈμ§ νμΈνλ λ‘μ§μ΄ μ‘΄μ¬νλ€.
ν΄λΉ λ‘μ§μ μΆμ ν΄λμ€ λ°©μμμλ λ¬Έμ μμ΄ μλνμ§λ§,
μΈν°νμ΄μ€ λ°©μμμλ μ»΄νμΌ μλ¬κ° λ°μνλ€.
μ΄μ λ λ°λ‘ μΈν°νμ΄μ€λ μ»΄νμΌ μ μ¬λΌμ§λ, λ°νμμμ μ‘΄μ¬νμ§ μλ μ½λμ΄κΈ° λλ¬Έμ΄λ€.
μλ°μ κ°μ μΈμ΄μ λ¬λ¦¬, νμ μ€ν¬λ¦½νΈμμλ μΈν°νμ΄μ€κ° μ»΄νμΌ νμμλ§ μ‘΄μ¬νκ² λλ€.
λ°λΌμ μΈν°νμ΄μ€λ₯Ό ν΅ν μΆμνλ₯Ό ꡬνν λ‘μ§μμ ν΄λΉ κ°μ²΄κ° μ΄λ€ μΈν°νμ΄μ€μ ꡬν체μΈμ§ νμΈνκΈ° μν΄μλ
νμ κ°λλ₯Ό λ°λ‘ μμ±ν΄μ£Όμ΄μΌνλ€.
λ°λ©΄ μΆμ ν΄λμ€λ μ»΄νμΌ μ μΌλ° ν΄λμ€λ‘ λ³νλμ΄ λ°νμμλ μ‘΄μ¬νκΈ° λλ¬Έμ instanceofλ₯Ό ν΅ν κ°νΈν νμ λΉκ΅κ° κ°λ₯νλ€.
μ¦ μΈλ²μ§Έ μ°¨μ΄λ λ°νμμ μ½λκ° μ‘΄μ¬νλμ§μ λν μ¬λΆμ΄λ€.
κ²°λ‘
μΈν°νμ΄μ€μ μΆμ ν΄λμ€ λͺ¨λ νμ μ€ν¬λ¦½νΈ νκ²½μμ μΆμνμ μμ‘΄ν λ‘μ§μ μμ±ν μ μκ² λμμ£Όλ λꡬμ΄λ€.
μ΄λ₯Ό μ νμ©νλ©΄, ν₯ν μΈλΆ μꡬμ¬νμ΄ μΆκ°λλλΌλ κΈ°μ‘΄ μ½λλ₯Ό μμ νμ§ μλ μ μμ λμ²κ° κ°λ₯νλ€.
κΈ°μ‘΄μ μ μλνκ³ μλ μ½λλ₯Ό μμ νλ κ²μ νμ μλ¬λ₯Ό μλ°νκΈ° λλ¬Έμ νμ₯μ±μ κ³ λ €ν μ½λλ₯Ό μμ±νλ κ²μ λ§€μ° μ€μνλ€.
μμ±λ κΈμ 보면 μΆμ ν΄λμ€ λ°©μμ΄ λ μ΄μ μ΄ λ§λ€κ³ μ°©κ°ν μ μμ§λ§,
μΆμ ν΄λμ€ λ°©μλ κ²°κ΅ λΆλͺ¨μ μμ κ°μ κ²°ν©λλ₯Ό λμ΄λ μ€κ³μ΄κΈ° λλ¬Έμ
μΆκ° μꡬ μ¬νμ μν΄ λΆλͺ¨ ν΄λμ€μ λ‘μ§μ΄ μμ λμ΄μΌ νλ μν©μ΄ μμ λ μ μ°ν λμ²κ° νλ€ μλ μλ€.
λ°λΌμ νΈλ μ΄λμ€νλ₯Ό μ κ³ λ €νμ¬ μ μ ν μ€κ³λ₯Ό νλ κ²μ΄ μ€μνλ€.
'μΈμ΄ > Javascript(Node, TS...)' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Interface in TS (vs Java) (0) | 2023.03.19 |
---|---|
TypeScript νμ : any, unknown, never (0) | 2023.03.09 |
NodeJS Child_processμ spawn(), exec(), fork() (0) | 2023.03.05 |