TypeScript/ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ TypeScript

[ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] class์˜ getter์™€ setter

Rainbow๐ŸŒˆCoder 2022. 4. 18. 19:06
728x90
class User {
  firstName: string;
  lastName: string;
  fullName: string;
  constructor(firstName: string, lastName: string) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.fullName = `${firstName} ${lastName}`;
  }
}
let user = new User("Steve", "Jobs");
console.log(user.fullName); //Steve Jobs
console.log(user.firstName); //Steve
user.firstName = "Jimmy";
console.log(user.fullName); //Steve Jobs !!!
console.log(user.firstName); //Steve

user.fullName = "Pretty Jobs";
console.log(user.fullName); //Pretty Jobs
console.log(user.firstName); //Jimmy
console.log(user.lastName); //Jobs

ํ’€๋„ค์ž„์€ ์ƒ์„ฑ์ž์—์„œ ํ•œ๋ฒˆ ํ• ๋‹น๋œ ๋’ค๋กœ,

constructor๋กœ firstName๊ณผ lastName์„ ํ†ตํ•ด fullName์ด ์„ค์ •๋œ ๋’ค๋กœ  ํผ์ŠคํŠธ๋„ค์ž„ ํ˜น์€ ๋ผ์ŠคํŠธ๋„ค์ž„์˜ ๊ฐœ๋ณ„ ๋ณ€๊ฒฝ ์ง„ํ–‰ํ•˜์—ฌ๋„, ๊ทธ์— ๋”ฐ๋ฅธ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ƒˆ๋กœ์ด ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.(๊ทธ ํ”„๋กœํผํ‹ฐ์— ์ง์ ‘ ์ ‘๊ทผํ•˜์ง€ ์•Š๋Š” ์ด์ƒ,) ํ•œ๋ฒˆ ํ• ๋‹น๋˜์–ด๋„ ๊ทธ ์ƒํƒœ๋กœ ๊ณ„์† ์ง€์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

์ด๋Ÿด ๋•Œ ๊ฒŒํ„ฐ์™€ ์„ธํ„ฐ๊ฐ€ ์œ ์šฉํ•˜๋‹ค. 

 

์›๋ณธ

class User {
  firstName: string;
  lastName: string;
  fullName: string;
  constructor(firstName: string, lastName: string) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.fullName = `${firstName} ${lastName}`;
  }
}

๋ณ€๊ฒฝ ํ›„(๋ฉค๋ฒ„๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ๋ฐ”๋กœ ์„ค์ •ํ•˜์ง€ ๋ง๊ณ ,

 

  get fullName(): string {
    return `${this.firstName} ${this.lastName}`;
  }

์œ„ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด

 

fullName์€ string ํƒ€์ž…์ด๊ณ ,

fullName์— ์ ‘๊ทผํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

fullName์„ ํ˜ธ์ถœํ•˜๋ฉด ํ˜ธ์ถœํ•œ ์‹œ์ ์— firstName๊ณผ lastName์„ ๊ฒฐํ•ฉํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

 

๋ณ€๊ฒฝ ํฌ์ธํŠธ

  firstName: string;
  lastName: string;
  
  //fullName์€ string ํƒ€์ž…์ด๊ณ ,
  get fullName(): string {
    return `${this.firstName} ${this.lastName}`;
  }
  constructor(firstName: string, lastName: string) {
    this.firstName = firstName;
    this.lastName = lastName;
  }
}

 ๋น„๋ก ํ•จ์ˆ˜์˜ ํ˜•ํƒœ์ง€๋งŒ,  ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ๊ธฐ์กด ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์— ๋™์ผํ•˜๊ฒŒ ์ ‘๊ทผํ•˜๋“ฏ์ด ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

class User {
  firstName: string;
  lastName: string;
  get fullName(): string {
    return `${this.firstName} ${this.lastName}`;
  }
  constructor(firstName: string, lastName: string) {
    this.firstName = firstName;
    this.lastName = lastName;
  }
}
let user = new User("Steve", "Jobs");
console.log(user.fullName); //Steve Jobs
console.log(user.firstName); //Steve
user.firstName = "Jimmy";
console.log(user.fullName); //Jimmy Jobs ๐Ÿ˜š๐Ÿ˜š๐Ÿ˜š
console.log(user.firstName); //Jimmy

์ด์ฒ˜๋Ÿผ ์„ธํ„ฐ์™€ ๊ฒŒํ„ฐ๋Š” ์ผ๋ฐ˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์–ด๋– ํ•œ ๊ณ„์‚ฐ์„ ํ•ด์•ผ ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ํด๋ž˜์Šค๋‚ด ์ƒ์„ฑ์ž ๋งค๊ฐœ๋ณ€์ˆ˜์— private๋ฅผ ์จ์ฃผ๋Š” ๊ฒƒ์ด ์ œ์ผ ๊ฐ„๊ฒฐํ•˜๋‹ค.

  constructor(private firstName: string, private lastName: string) {
  }

 

 

์ด๋ ‡๊ฒŒ

class User {
  get fullName(): string {
    return `${this.firstName} ${this.lastName}`;
  }
  constructor(private firstName: string, private lastName: string) {
  }
}

 constructor(private firstName: string, private lastName: string) {
  }

์ด๊ฑธ ๋ณด๋ฉด,

private firstName: string๋ฅผ ๋ณด๊ณ  ๋“ค์–ด์˜จ ์ฒซ๋ฒˆ์งธ ์ธ์ž๊ฐ€ ์ž๋™์œผ๋กœ this.firstName์œผ๋กœ ๋“ค์–ด๊ฐ„ ๊ฒฉ์ด ๋˜๊ณ 

private lastName: string๋ฅผ ๋ณด๊ณก ๋“ค์–ด์˜จ ๋‘๋ฒˆ์งธ ์ธ์ž๊ฐ€ ์ž๋™์œผ๋กœ this.lastName์œผ๋กœ ๋“ค์–ด๊ฐ„ ๊ฒฉ์ด ๋œ๋‹ค.

 

class User {
  get fullName(): string {
    return `${this.firstName} ${this.lastName}`;
  }
  constructor(private firstName: string, private lastName: string) {
  }
}

์œ„ ์ฝ”๋“œ์™€ ์•„๋ž˜ ์ฝ”๋“œ๋Š” ๋™์ผํ•œ ์ฝ”๋“œ์ด๋‹ค.

๋‹น์—ฐํžˆ ์œ„ ์ฝ”๋“œ๊ฐ€ ๋” ๊ฐ„๊ฒฐํ•˜๋‹ค.

class User {
  private firstName: string;
  private lasName: string;
  get fullName(): string {
    return `${this.firstName} ${this.lastName}`;
  }
  constructor(firstName: string, lastName: string) {
    this.firstName = firstName;
    this.lasName = lastName;
  }
}

<์ถ”๊ฐ€ ์—ฐ์Šต>

class User {
  private internalAge = 20;
  get fullName(): string {
    return `${this.firstName} ${this.lastName}`;
  }
  get age(): number {
    return this.internalAge;
  }
  set age(num: number) {
    this.internalAge = num;
  }
  constructor(private firstName: string, private lastName: string) {}
}

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด internalAge์—๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†์ง€๋งŒ, 

age๋ฅผ ํ†ตํ•ด์„œ ์ ‘๊ทผํ•  ์ˆ˜๊ฐ€ ์žˆ๊ฒŒ ๋œ๋‹ค.

class User {
  private internalAge = 20;
  get fullName(): string {
    return `${this.firstName} ${this.lastName}`;
  }
  get age(): number {
    return this.internalAge;
  }
  set age(num: number) {
    this.internalAge = num;
  }
  constructor(private firstName: string, private lastName: string) {}
}
let user = new User("Steve", "Jobs");
console.log(user.fullName); //Steve Jobs
console.log(user.age); //20
user.age = 9;
console.log(user.age); //9

์‹ฌ์ง€์–ด ์ „๋‹ฌ๋œ ๊ฐ’์— ๋Œ€ํ•œ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ๊นŒ์ง€ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

class User {
  private internalAge = 20;
  get fullName(): string {
    return `${this.firstName} ${this.lastName}`;
  }

  get age(): number {
    return this.internalAge;
  }
  set age(num: number) {
    if (num < 0) {
      throw Error("์Œ์ˆ˜์˜ ๋‚˜์ด๋ž€ ์—†์–ด!");
    }
    this.internalAge = num;
  }
  constructor(private firstName: string, private lastName: string) {}
}
let user = new User("Steve", "Jobs");
console.log(user.fullName); //Steve Jobs
console.log(user.age); //20
user.age = 9;
console.log(user.age); //9
user.age = -9;
console.log(user.age);

<์—ฐ์Šต ๊ฒฐ๊ณผ>

  class User {
    private static cloth: boolean = true;
    private internalAge: number = 10;
    get age():number {
      return this.internalAge;
    }
    set age(newAge: number) {
      if (num < 0) {
      throw Error("์Œ์ˆ˜์˜ ๋‚˜์ด๋ž€ ์—†์–ด!");
    }
      this.internalAge = newAge;
    }
    get fullName():string {
      return `${this.firstName}${this.lastName}`;
    }
    constructor(private firstName: string, private lastName: string) {}
  }
  let user1 = new User("ํ™", "๊ธธ๋™");
  console.log(user1.fullName);//ํ™๊ธธ๋™
  user1.age = 18;
  console.log(user1.age);//18

getter setter์˜ ํšจ์šฉ : ๋‹ค์–‘ํ•œ ์—ฐ์‚ฐ ๊ฐ€๋Šฅ + ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ฐ€๋Šฅ(๋‚˜์ด์—์„œ ์Œ์ˆ˜ ๊ฑฐ๋ฅด๊ธฐ) + ์‹ฌ์ง€์–ด ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ๋งŒ๋“ค์–ด์„œ ๋ฐ˜ํ™˜๊ฐ€๋Šฅ(fullName์˜ ์˜ˆ์‹œ) ์ ์ ˆํ•˜๊ฒŒ ํด๋ž˜์Šค๋ฅผ ์บก์Аํ™”ํ•˜๊ณ ์ž ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ๋„์™€์ฃผ์–ด ๋” ๋›ฐ์–ด๋‚œ OOP ๊ฐ€๋Šฅ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90