νμ μ€ν¬λ¦½νΈ_ν΄λμ€
πμ£Όμ : ν΄λμ€
1. ν΄λμ€λ?
νμ μ€ν¬λ¦½νΈμμμ ν΄λμ€λ μλ°μ€ν¬λ¦½νΈμ κ±°μ λμΌνλ€.
μΌλΆ κΈ°λ₯ μ€μλ νμ μ€ν¬λ¦½νΈμμλ§ μ‘΄μ¬νλ κ³ μ λ¬Έλ²μΈ κ²λ€μ΄ μμ΄ "κ±°μ"λΌκ³ νννλ€.
κ·Έ μΌλΆ κΈ°λ₯λ€μ μ»΄νμΌ ν μ¬λΌμ§λ€.
class PersonStudent {
// νλ
name: string;
age: number;
readonly location: string = 'Korea'
}
const person1 = new PersonStudent();
1-1. μμ±μ
ν΄λμ€κ° μΈμ€ν΄μ€νκ° λ λ μ΄κΈ°νλ₯Ό λ΄λΉνλ€.
class PersonStudent {
// νλ
name: string;
age: number;
readonly location: string = 'Korea'
// μμ±μ!!
constructor(name: string, age:number) {
this.name = name;
this.age = age;
}
}
// λ§€κ°λ³μλ‘ name: stringκ³Ό age:number κ° μλ€.
const person1 = new PersonStudent('kim', 99)
1-2. λ©μλ
λ©μλλ κ°μ²΄(ν΄λμ€)μμ νλμ λ΄λΉνλ€.
class PersonStudent {
// νλ
name: string;
age: number;
readonly location: string = 'Korea'
// μμ±μ!!
constructor(name: string, age:number) {
this.name = name;
this.age = age;
}
// λ©μλ!!
getinfo(): string {
return `${this.name}λμ ${this.age}μΈ μ
λλ€.`
}
}
const person1 = new PersonStudent('kim', 99)
console.log(person1.getinfo());
// "kimλμ 99μΈ μ
λλ€."
1-3. getter / setter
- νλμ μ κ·Όν κΆνμ κ°μ§ μ μ΄μ
- getterκ° μμ§λ§, setterκ° μλ κ²½μ°μλ μλμΌλ‘ readonly μμ±μ κ°μ§λ€.
- setter λ§€κ°λ³μμ νμ X / getterμ λ°ν νμ μμ μΆλ‘ νλ€.
- private μμ±μ .(dot)μ°μ°μλ‘ μ κ·Όν μ μλ€.
class PersonStudent {
// νλ
name: string;
private _age: number | string;
// μμ±μ!!
constructor(name: string, age: number | string) {
this.name = name;
this._age = age;
}
// getter & setter
get age() {
if(this._age === 0) {
return 'μ«μλ₯Ό μ
λ ₯νμΈμ.'
}
return `λμ΄λ ${this._age}μΈ μ
λλ€.`
}
set age(age) {
if(typeof age === 'number') {
this._age = age;
} else {
this._age = 0;
}
}
}
// ageκ° numberκ° μλκΈ° λλ¬Έμ λ¬Έμλ₯Ό λ£μΌλ©΄ μ€λ₯ λ°μ
const person2 = new PersonStudent('kim', 0)
console.log(person2.age)
// "μ«μλ₯Ό μ
λ ₯νμΈμ."
1-4. extends
- μμ or νμ₯μ μνμ νλ€. (μ¬μ©μ κ³ λ―Όν΄λ³Ό νμκ° μλ€.)
class κΈ°λ³Έ1 {
result() {
return 'Base';
}
}
class νμ1 extends κΈ°λ³Έ1 {
}
const test1 = new νμ1();
console.log(test1.result());
// "Base"
class κΈ°λ³Έ2 {
result() {
return 'Base';
}
}
class νμ2 extends κΈ°λ³Έ2 {
result() {
return 'Extends';
}
}
const test2 = new νμ2();
console.log(test2.result());
// "Extends"
1-5. super
- κΈ°λ³Έ ν΄λμ€ νΈμΆ μ μ¬μ©νλ€.
- μμ±μμμ this μ¬μ© μ μ νΈμΆ λμ΄μΌ νλ€.
class Person {
name: string;
constructor(name: string) {
this.name = name;
}
sayHello() {
return `μλ
νμΈμ! ${this.name}λ`
}
}
class Student extends Person {
constructor(name: string) {
super(name);
}
sayHello() {
return `μλ
νμΈμ! ${this.name} νμλ`
}
}
const student1 = new Student('kkan');
console.log(student1.sayHello());
// "μλ
νμΈμ! kkan νμλ"
1-6. μ κ·Όμ μ΄μ
- μμ±κ³Ό λ©μλμ μ κ·Όμ μ νν μ μλ€.
- ν΄λμ€ λ΄λΆ ꡬν μ 보λ₯Ό μ λΉν 곡κ°νμ¬ μΌλΆλΆλ§ λ ΈμΆ μν¨λ€.
+) APIμ λΉμ·ν νλ΄λ₯Ό λΌ μ μλ€.
+) νμ μμ€ν μ μ΄μ©ν΄ κ·μΉμ κ°μ ν μ μλ€.
μ μ΄μ | μ€λͺ |
public | μ΄λμλ μ κ·Ό κ°λ₯ (κΈ°λ³Έκ°, μλ΅κ°λ₯) |
protected | ν΄λΉ ν΄λμ€μ μλΈν΄λμ€μμλ§ μ κ·Ό κ°λ₯ |
private | ν΄λΉ ν΄λμ€μ μΈμ€ν΄μ€μμλ§ μ κ·Ό κ°λ₯ |
class Person {
public name: string;
private age: number;
protected gender: 'M' | 'F';
constructor(name: string, age: number, gender: 'M' | 'F') {
this.name = name;
this.age = age;
this.gender = gender;
}
sayName() {
return `μ΄λ¦μ ${this.name} μ
λλ€.`
}
sayAge() {
return `λμ΄λ ${this.age}`
}
}
const person1 = new Person('kkan', 22, 'M');
console.log(person1.sayAge())
// "λμ΄λ 22"
- private / protectedλ .(dot) μ°μ°μλ₯Ό ν΅ν΄ μ κ·Όμ΄ λΆκ°λ₯νλ€.
1-7. static
- ν΄λμ€μ μμ±κ³Ό λ©μλλ₯Ό newλ‘ μΈμ€ν΄μ€ν νμ§ μκ³ νΈμΆν μ μλ€.
- μ κ·Ό μ μ΄μλ₯Ό νμ©ν μ μλ€.
- λͺκ°μ§ μ μ μ΄λ¦μ μ¬μ©ν μ μλ€.
class StaticClass {
private static type = 'Type';
static getType() {
return StaticClass.type;
}
}
StaticClass.getType();
μ΄λ κ²λ μ¬μ© κ°λ₯νλ€.
1-8. readonly
Tsλ§μ κΈ°λ₯!
μμ νκ² μ¬μ©μ΄ κ°λ₯νλ€.
class Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
}
const person1 = new Person('kkan', 22);
console.log(person1.name) // "kkan"
person1.name = 'kim';
console.log(person1.name) // "kim"
μμ½κ² μ κ·Όνμ¬ μμ μ΄ κ°λ₯νλ€.
1-9. μΆμν΄λμ€
- abstractλ₯Ό μ μΈν ν΄λμ€λ‘ μ§μ μΈμ€ν΄μ€ν λ μ μλ ν΄λμ€μ΄λ€.
- μ§μ μΈμ€ν΄μ€ν λ μ μμ§λ§, extends ν νμλ ν΄λμ€λ₯Ό μΈμ€ν΄μ€ννλλ‘ μ λνλ€.
- μΆμ ν΄λμ€λ ꡬνλ λ©μλλ₯Ό ν¬ν¨ μν¬ μ μλ€.
- abstract μ μΈν λ©μλλ νμλ ν΄λμ€μμ λ©μλλ₯Ό ꡬνν΄μΌνλ€.
- μ€κ³μ λͺ©μ μ κ°μ‘λ€κ³ μκ°νλ©΄ λλ€. (μ μΈλ λ©μλλ₯Ό κ°μ μ μΌλ‘ ꡬνν΄μΌνλ―λ‘!)
abstract class Person {
// μ μΈλ λ©μλ
abstract hello(): string
// ꡬνλ λ©μλ
run() {
return this.hello() + ' run'
}
}
// μ§μ μΈμ€ν΄μ€κ° λ μ μλ€.
// const person1 = new Person();
class Student extends Person {
hello() {
return 'μλ
!'
}
}
const student = new Student();
console.log(student.hello());
1-10. Parameter Properties
μ΄μ μ½λμ κ°λ μ±μ μ¬λ €λ³΄μ!
STEP.01
class Person {
public name: string;
private age: number;
protected gender: 'M' | 'F';
constructor(name: string, age: number, gender: 'M' | 'F') {
this.name = name;
this.age = age;
this.gender = gender;
}
sayName() {
return `μ΄λ¦μ ${this.name} μ
λλ€.`
}
protected sayAge() {
return `λμ΄λ ${this.age} μ
λλ€.`
}
}
class Student extends Person {
id: number;
constructor(name: string, age: number, gender: 'M' | 'F', id: number) {
super(name, age, gender)
this.id = id
}
}
STEP.02
class Person {
constructor(
public name: string,
private age: number,
protected gender: 'M' | 'F') {
//μλ΅λ¨
}
sayName() {
return `μ΄λ¦μ ${this.name} μ
λλ€.`
}
protected sayAge() {
return `λμ΄λ ${this.age} μ
λλ€.`
}
}
class Student extends Person {
id: number;
constructor(name: string, age: number, gender: 'M' | 'F', id: number) {
super(name, age, gender)
this.id = id
}
}
μ‘°κΈ λ³΄κΈ° μ’μμ§λ,,?
1-11. λ©μλ μ€λ²λΌμ΄λ©
λΆλͺ¨ ν΄λμ€μ μ μλ λ©μλλ₯Ό μμ ν΄λμ€μμ μλ‘ κ΅¬ννλ κ²μ΄λ€.
- μ€λ² λΌμ΄λ λ©μλμ λ§€κ°λ³μ νμ μ μ€λ² λΌμ΄λ© λ©μλμ λ§€κ°λ³μ νμ κ³Ό κ°κ±°λ μμ νμ μ΄μ΄μΌ νλ€.
- μ€λ² λΌμ΄λ λ©μλμ λ§€κ°λ³μ κ°μκ° μ€λ² λΌμ΄λ© λ©μλμ λ§€κ°λ³μ κ°μμ κ°κ±°λ λ§μμΌ νλ€. (λ¨, 쑰건 1μ΄ μ±λ¦½λλ€λ μ μ κ° μμ΄μΌ ν¨)
class Person {
run() {
return 'λ¬λ¦¬κΈ°!'
}
}
class Businessman extends Person {
run() {
return 'νμ¬μμ΄ λ¬λ¦°λ€.'
}
}
class Student extends Person {
run() {
return 'νμμ΄ λ¬λ¦°λ€.'
}
}
const person1 = new Person(); // "λ¬λ¦¬κΈ°!"
const student1 = new Student(); // "νμ¬μμ΄ λ¬λ¦°λ€."
const businessman1 = new Businessman(); // "νμμ΄ λ¬λ¦°λ€."
End.