๋ฐ˜์‘ํ˜•

ํด๋ž˜์Šค ์ •์˜


์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„  ์ƒ์„ฑ์ž ๋‚ด๋ถ€์—์„œ ํ”„๋กœํผํ‹ฐ๋ฅผ ์„ ์–ธํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. ํด๋ž˜์Šค ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณค ํด๋ž˜์Šค ๋ฐ”๋””์— ํ”„๋กœํผํ‹ฐ๋ฅผ ๋”ฐ๋กœ ์„ ์–ธํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๋ฐ˜๋ฉด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„  ๋จผ์ € ํด๋ž˜์Šค ๋ฐ”๋””์— ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ฏธ๋ฆฌ ์„ ์–ธํ•˜๊ณ  ํƒ€์ž…์„ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค. ํด๋ž˜์Šค ๋ฐ”๋””์— ํ”„๋กœํผํ‹ฐ๋ฅผ ์„ ์–ธํ•˜์ง€ ์•Š์œผ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

class User {
  name: string; // ํ”„๋กœํผํ‹ฐ ์„ ์–ธ ๋ฐ ํƒ€์ž… ์ง€์ •

  constructor(name: string) {
    this.name = name; // ํ”„๋กœํผํ‹ฐ ์ดˆ๊ธฐํ™”
  }
}

const user = new User('John');
console.log(user); // { name: 'John' }

 

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„  public, protected, private ์ ‘๊ทผ ์ œํ•œ์ž๋ฅผ ๋ณ„๋„๋กœ ์ œ๊ณตํ•˜๋Š”๋ฐ, ์ƒ์„ฑ์ž ํŒŒ๋ผ๋ฏธํ„ฐ์— ์ ‘๊ทผ ์ œํ•œ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•”๋ฌต์ ์œผ๋กœ ํด๋ž˜์Šค ํ”„๋กœํผํ‹ฐ๋ฅผ ์„ ์–ธํ•˜๊ณ  ์ดˆ๊ธฐํ™”๊ฐ€ ์ง„ํ–‰๋œ๋‹ค. ์ฆ‰, ์ƒ์„ฑ์ž ํŒŒ๋ผ๋ฏธํ„ฐ์— ์ ‘๊ทผ ์ œํ•œ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ž˜์Šค ๋ฐ”๋””์— ํ”„๋กœํผํ‹ฐ๋ฅผ ์„ ์–ธํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. ์ผ์ผ์ด ํ”„๋กœํผํ‹ฐ๋ฅผ ์„ ์–ธํ•˜๊ณ  ์ƒ์„ฑ์ž ๋‚ด์— ์ดˆ๊ธฐํ™” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋ผ์„œ ์ฝ”๋“œ๊ฐ€ ๋”์šฑ ๊ฐ„๊ฒฐํ•ด์ง„๋‹ค.

class User {
  constructor(public name: string) {}
}

const user = new User('John');
console.log(user); // { name: 'John' }

 

 

์ ‘๊ทผ ์ œํ•œ์ž Access Modifier


์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํด๋ž˜์Šค์™€ ํ”„๋กœํผํ‹ฐ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ public์œผ๋กœ ์„ ์–ธ๋œ๋‹ค. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์—ญ์‹œ ๋™์ผํ•˜์ง€๋งŒ ์ด๋ฅผ ๋” ๋ช…์‹œ์ ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” public ์ ‘๊ทผ ์ œํ•œ์ž๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํ”„๋กœํผํ‹ฐ ํ˜น์€ ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ์•ž์— # ๊ธฐํ˜ธ๋ฅผ ๋ถ™์ด๋ฉด ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” private ๋ฉค๋ฒ„๋กœ ์„ ์–ธ๋œ๋‹ค. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„  private ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ ‘๊ทผ ์ œํ•œ์„ ๋” ๋ช…์‹œ์ ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๊ณณ public protected private
ํด๋ž˜์Šค ๋‚ด๋ถ€ O O O
์ž์‹ ํด๋ž˜์Šค ๋‚ด๋ถ€ O O X
ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค O X X

 

๐Ÿ’ก ํ”„๋กœํ† ํƒ€์ž…์— ์ €์žฅ๋œ ๋ฉ”์„œ๋“œ๋„ ํด๋ž˜์Šค ๋‚ด๋ถ€๋กœ ์ทจ๊ธ‰ํ•œ๋‹ค

 

public

public ์ ‘๊ทผ ์ œํ•œ์ž๋Š” ํด๋ž˜์Šค ๋‚ด๋ถ€, ์ž์‹ ํด๋ž˜์Šค ๋‚ด๋ถ€, ์ธ์Šคํ„ด์Šค์—์„œ ์ž์œ ๋กญ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉค๋ฒ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์•„๋ฌด๋Ÿฐ ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์ด์ง€ ์•Š์•˜์„ ๋• ๊ธฐ๋ณธ์ ์œผ๋กœ public ๋ฉค๋ฒ„๋กœ ์ทจ๊ธ‰๋œ๋‹ค.

class User {
  constructor(public name: string) {}

  public printName() {
    console.log(this.name); // ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ public ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ
  }
}

const user = new User('John'); // { name: 'John' }
user.name; // 'John'
user.printName(); // 'John'

 

protected

protected ์ ‘๊ทผ ์ œํ•œ์ž๋Š” ํ•ด๋‹น ํด๋ž˜์Šค์™€ ์ž์‹ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉค๋ฒ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ์—์„œ name ํ”„๋กœํผํ‹ฐ์™€ sayHello() ๋ฉ”์„œ๋“œ๋Š” protected ๋ฉค๋ฒ„์ด๋ฏ€๋กœ ์ธ์Šคํ„ด์Šค์—์„  ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

class User {
  constructor(protected name: string) {}

  protected sayHello() {
    console.log(`${this.name}, Hello`);
  }
}

class PaidUser extends User {
  public printName() {
    console.log(this.name); // ์ž์‹ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ protected ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ
  }

  public callSayHello() {
    this.sayHello(); // ์ž์‹ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ protected ๋ฉ”์„œ๋“œ ์ ‘๊ทผ
  }
}

const paidUser = new PaidUser('John'); // { name: 'John' }
paidUser.name; // Error! (์ธ์Šคํ„ด์Šค์—์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€)
paidUser.sayHello(); // Error! (์ธ์Šคํ„ด์Šค์—์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€)

paidUser.printName(); // 'John'
paidUser.callSayHello(); // 'John, Hello'

 

ํ•œํŽธ paidUser.printName() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. printName() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ƒ์† ๋ฐ›์€ ์ž์‹ ํด๋ž˜์Šค์ธ PaidUser ๋‚ด๋ถ€์—์„œ name ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

callSayHello() ๋ฉ”์„œ๋“œ ์—ญ์‹œ ์ž์‹ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ protected ๋ฉ”์„œ๋“œ์ธ sayHello()๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

๐Ÿ’ก ์ƒ์† ๋ฐ›๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค์˜ constructor ์ธ์ž๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค์™€ ๊ฐ™๋‹ค๋ฉด constructor๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค. ์ƒ๋žต์‹œ ์•”๋ฌต์ ์œผ๋กœ constructor(...args) { super(...args) }๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

 

private

private ์ ‘๊ทผ ์ œํ•œ์ž๋Š” ํ•ด๋‹น ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉค๋ฒ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ ์ ‘๊ทผ ๋ฒ”์œ„๊ฐ€ ๊ฐ€์žฅ ์ œํ•œ์ ์ด๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ์—์„œ name ํ”„๋กœํผํ‹ฐ๋Š” paidUser ์ธ์Šคํ„ด์Šค์— ์ €์žฅ๋˜์ง€๋งŒ User ํด๋ž˜์Šค์—์„œ private์œผ๋กœ ์„ ์–ธ๋œ ๋ฉค๋ฒ„์ด๊ธฐ ๋•Œ๋ฌธ์— PaidUser ์ž์‹ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„  ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

class User {
  constructor(private name: string) {}

  public get getName() {
    return this.name; // ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ private ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ
  }
}

class PaidUser extends User {
  public printName() {
    console.log(this.name); // Error! ์ž์‹ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ private ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ ๋ถˆ๊ฐ€
  }
}

const paidUser = new PaidUser('John');
paidUser.name; // Error! (์ธ์Šคํ„ด์Šค์—์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€)
paidUser.printName(); // Error! (์ž์‹ ํด๋ž˜์Šค์—์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€)
paidUser.getName; // 'John'

 

 

readonly ํ‚ค์›Œ๋“œ


์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„  ํด๋ž˜์Šค์˜ ํŠน์ • ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋”ฐ๋กœ ์ œ๊ณตํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Setter ์—†์ด Getter๋งŒ ์„ ์–ธํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

class User {
  constructor(name) {
    this._name = name;
  }

  get name() {
    return this._name;
  }
}

const user = new User('John');
console.log(user.name); // 'John'
user.name = 'Bill'; // Cannot set property name of #<User> which has only a getter

 

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„  ์œ„ ๊ฐ™์€ ๋ฒˆ๊ฑฐ๋กœ์šด ์ฝ”๋“œ์—†์ด readonly ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ํŠน์ • ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. readonly๋กœ ์„ ์–ธ๋œ ํ”„๋กœํผํ‹ฐ๋Š” ์ดˆ๊ธฐ ์„ ์–ธ ์‹œ ๋˜๋Š” ์ƒ์„ฑ์ž ๋‚ด๋ถ€์—์„œ๋งŒ ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๊ณ , ์ดํ›„๋ถ€ํ„ด ์˜ค์ง ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค. ์ƒ์ˆ˜ ํ˜น์€ ๋ณ€๊ฒฝํ•˜๋ฉด ์•ˆ๋˜๋Š” ๊ฐ’์„ ์ •์˜ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

class User {
  public readonly name: string;

  constructor(name: string) {
    this.name = name;
  }
}

const user = new User('John');
console.log(user); // 'John'
user.name = 'Bill'; // Error! ์ฝ๊ธฐ ์ „์šฉ ์†์„ฑ์ด๋ฏ€๋กœ 'name'์— ํ• ๋‹นํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.ts(2540)

 

 

implement ํ‚ค์›Œ๋“œ


implements ํ‚ค์›Œ๋“œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜ํ•œ ๋ชจ๋“  ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๊ฐ€ ํด๋ž˜์Šค์—์„œ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„๋˜๋„๋ก ๊ฐ•์ œํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์ฆ‰, ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์„ค์ •๋œ ํด๋ž˜์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ๋“  ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•ด์•ผํ•œ๋‹ค. ๋งŒ์•ฝ ์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜ํ•œ ํ”„๋กœํผํ‹ฐ๋‚˜ ๋ฉ”์„œ๋“œ๊ฐ€ ํด๋ž˜์Šค์— ๊ตฌํ˜„๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ์ปดํŒŒ์ผ ์‹œ์ ์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

interface UserClass {
  name: string;
  age: number;
  printName(): void;
}

// Error! age, printName ์†์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค.ts(2420)
class User implements UserClass {
  name: string;

  constructor(name: string) {
    this.name = name;
  }
}

 

UserClass์— ์žˆ๋Š” ๋ชจ๋“  ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด๋‘๋‹ˆ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ์—์„  ํด๋ž˜์Šค ๋ฐ”๋”” ๋Œ€์‹  ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ์— ์ ‘๊ทผ ์ œํ•œ์ž๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ”„๋กœํผํ‹ฐ๋ฅผ ์„ ์–ธํ•˜๊ณ  ํƒ€์ž…์„ ์ง€์ •ํ–ˆ๋‹ค.

class User implements UserClass {
  constructor(
    public name: string,
    public age: number,
  ) {}

  printName() {
    console.log(this.name);
  }
}

const user = new User('John', 30);
console.log(user); // { name: 'John', age: 30 }

 

 

abstract ํ‚ค์›Œ๋“œ


abstract ํ‚ค์›Œ๋“œ๋Š” ์ถ”์ƒ ํด๋ž˜์Šค์™€ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

์ถ”์ƒ ํด๋ž˜์Šค๋Š” ๋‹ค๋ฅธ ํด๋ž˜์Šค๊ฐ€ ์ƒ์†๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ ํด๋ž˜์Šค๋กœ(์ƒ์†๋งŒ์„ ์œ„ํ•ด ์‚ฌ์šฉ), ํด๋ž˜์Šค์˜ ๊ณตํ†ต ๊ธฐ๋Šฅ์ด๋‚˜ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ…œํ”Œ๋ฆฟ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ผ๋ฐ˜ ํด๋ž˜์Šค์™€ ๋‹ฌ๋ฆฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์€ ์ƒ์†๋ฐ›๋Š” ํด๋ž˜์Šค์—์„œ ์ด๋ฃจ์–ด์ง„๋‹ค. ๊ณตํ†ต๋œ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ์˜ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๋Š” ์ ์€ interface์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ, ์ถ”์ƒ ํด๋ž˜์Šค๋Š” ์„ธ๋ถ€์‚ฌํ•ญ์ด ๊ตฌํ˜„๋œ ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ์™€ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜(์ธ์Šคํ„ด์Šค์— ์†ํ•˜๋Š” ๋ณ€์ˆ˜)๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ ์ด ๋‹ค๋ฅด๋‹ค.

 

๐Ÿ’ก interface์— ์ •์˜ํ•œ ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋Š” ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋‹ค.

 

์ถ”์ƒ ๋ฉ”์„œ๋“œ๋Š” ์„ ์–ธ๋งŒ ๋˜์–ด ์žˆ๊ณ  ์‹ค์ œ ๊ตฌํ˜„์€ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ๊ตฌํ˜„ ๋‚ด์šฉ ์—†์ด ์ด๋ฆ„, ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž…, ๋ฐ˜ํ™˜ ํƒ€์ž…๋งŒ ์„ ์–ธ๋œ ๋ฉ”์„œ๋“œ๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋Š” ์ถ”์ƒ ํด๋ž˜์Šค ๋‚ด์— ์„ ์–ธํ•˜๊ณ , ์ƒ์†๋ฐ›๋Š” ํด๋ž˜์Šค์—์„œ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„๋ผ์•ผ ํ•œ๋‹ค.

abstract class UserClass {
  name: string; // ๋ฉค๋ฒ„ ๋ณ€์ˆ˜
  age: number; // ๋ฉค๋ฒ„ ๋ณ€์ˆ˜

  constructor(name: string, age: number) {
    this.name = name; // ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™”
    this.age = age; // ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™”
  }

  // ์„ธ๋ถ€์‚ฌํ•ญ์ด ๊ตฌํ˜„๋œ ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ
  printName() {
    console.log(this.name);
  }

  // ์„ธ๋ถ€์‚ฌํ•ญ์ด ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ์ถ”์ƒ ๋ฉ”์„œ๋“œ
  abstract printAge(): void;
}

class User extends UserClass {
  // ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›์€ ํด๋ž˜์Šค๋Š” ๋ฐ˜๋“œ์‹œ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค
  printAge() {
    console.log(this.age);
  }
}

const abUser = new UserClass('John', 30); // Error! ์ถ”์ƒ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.ts(2511)
const user = new User('John', 30);
console.log(user); // { name: 'John', age: 30 }
user.printName(); // 'John'

 

 

๋ ˆํผ๋Ÿฐ์Šค


 

TypeScript - Class | PoiemaWeb

ES6์—์„œ ์ƒˆ๋กญ๊ฒŒ ๋„์ž…๋œ ํด๋ž˜์Šค๋Š” ๊ธฐ์กด ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด๋ณด๋‹ค ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์–ธ์–ด์— ์ต์ˆ™ํ•œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ˆœ๋ช…๋ฃŒํ•œ ์ƒˆ๋กœ์šด ๋ฌธ๋ฒ•์„ ์ œ์‹œํ•˜๊ณ  ์žˆ๋‹ค. ํ•˜์ง€๋งŒ

poiemaweb.com

 


๊ธ€ ์ˆ˜์ •์‚ฌํ•ญ์€ ๋…ธ์…˜ ํŽ˜์ด์ง€์— ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”
๋ฐ˜์‘ํ˜•