ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ Getter / Setter
    ์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ 2023. 2. 11. 06:29

    TLDR;

    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ Getter / Setter๋Š” ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋กœ, ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์„ ํ†ต์ œํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์ฒ˜ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ์™€ ๋‹ค๋ฅด๊ฒŒ [[Value]]ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์•„, setter์™€ getter๋กœ ์ •์˜ํ•œ ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋Š” ์ฝ๊ณ  ์“ธ ์ˆœ ์žˆ์ง€๋งŒ ์ฝ˜์†”๋กœ ํ™•์ธํ–ˆ์„ ๋•Œ์—๋Š” ์‹ค์ œ๋กœ๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ€์ƒ์˜ ํ”„๋กœํผํ‹ฐ์ด๋‹ค.

     

    ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ vs ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ

    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ”„๋กœํผํ‹ฐ๋Š” ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ์™€ ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๊ตฌ๋ถ„ ์„ค๋ช…
    ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ(data property) ํ‚ค-๊ฐ’์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ผ๋ฐ˜์ ์ธ ํ”„๋กœํผํ‹ฐ, ์ง€๊ธˆ๊นŒ์ง€ ๋‚ด๊ฐ€ ์•Œ๋˜ ๋ˆˆ์— ๋ณด์ด๋Š” ๊ทธ ํ”„๋กœํผํ‹ฐ
    ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ(accessor property) ์ž์ฒด์ ์œผ๋กœ๋Š” ๊ฐ’์„ ๊ฐ–์ง€ ์•Š๊ณ ([[Value]]), ๊ฐ’์„ ์ฝ๊ฑฐ๋‚˜(Getter) ์ €์žฅ(Setter)ํ•  ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ์ ‘๊ทผ์ž ํ•จ์ˆ˜๋กœ ๊ตฌ์„ฑ๋œ ํ”„๋กœํผํ‹ฐ

     

    ๊ตฌ๋ถ„ ๋ฐฉ๋ฒ•

    ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ์™€ ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฐ€์žฅ ๋ช…ํ™•ํ•œ ๋ฐฉ๋ฒ•์€, ๋‘ ํ”„๋กœํผํ‹ฐ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ”„๋กœํผํ‹ฐ ๋””์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ํ™•์ธํ•ด ๋ณด๋Š” ๊ฒƒ์ด๋‹ค. ํ”„๋กœํผํ‹ฐ ๋””์Šคํฌ๋ฆฝํ„ฐ๊ฐ€ ๋ญ”๋ฐ?

     

    ํ”„๋กœํผํ‹ฐ ๋””์Šคํฌ๋ฆฝํ„ฐ๋ž€?

    ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค.

    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ํ”„๋กœํผํ‹ฐ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ”„๋กœํผํ‹ฐ์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ž๋™ ์ •์˜ํ•œ๋‹ค. ํ”„๋กœํผํ‹ฐ์˜ ์ƒํƒœ๋ž€ ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’(value), ๊ฐ’์˜ ๊ฐฑ์‹  ๊ฐ€๋Šฅ ์—ฌ๋ถ€(writable), ์—ด๊ฑฐ ๊ฐ€๋Šฅ ์—ฌ๋ถ€(enumerable), ์žฌ์ •์˜ ๊ฐ€๋Šฅ ์—ฌ๋ถ€(configurable) ๋“ฑ์„ ๋งํ•˜๋ฉฐ, ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ž€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ๊ด€๋ฆฌํ•˜๋Š” ๋‚ด๋ถ€ ์ƒํƒœ ๊ฐ’(meta-property)์ธ ๋‚ด๋ถ€ ์Šฌ๋กฏ [[Value]], [[Writable]], [[Enumerable]], [[Configurable]]์„ ์˜๋ฏธํ•œ๋‹ค.

     

    ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋Š” ๋‚ด๋ถ€ ์Šฌ๋กฏ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ Object.getOwnPropertyDescriptor ํ˜น์€ Object.getOwnPropertyDescriptors ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.


     

    ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ

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

    ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ํ”„๋กœํผํ‹ฐ ๋””์Šคํฌ๋ฆฝํ„ฐ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ ์„ค๋ช…
    [[Value]] value ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ํ†ตํ•ด ํ”„๋กœํผํ‹ฐ ๊ฐ’์— ์ ‘๊ทผํ•˜๋ฉด ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ’
    [[Writable]] writable ํ”„๋กœํผํ‹ฐ ๊ฐ’์˜ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ / default : true
    [[Enumerable]] enumerable ํ”„๋กœํผํ‹ฐ์˜ ์—ด๊ฑฐ ๊ฐ€๋Šฅ ์—ฌ๋ถ€, ์ฆ‰ for...in ํ˜น์€ Object.keys ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ๊ฐ€๋Šฅ ์—ฌ๋ถ€ / default : true
    [[Configurable]] configurable ํ”„๋กœํผํ‹ฐ์˜ ์žฌ์ •์˜ ๊ฐ€๋Šฅ ์—ฌ๋ถ€, false์ธ ๊ฒฝ์šฐ ํ•ด๋‹น ํ”„๋กœํผํ‹ฐ์˜ ์‚ญ์ œ ๋ฐ ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๊ฐ’์˜ ๋ณ€๊ฒฝ์ด ๊ธˆ์ง€๋œ๋‹ค.

     

    ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ

    ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ๊ฐ–๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋ผ๊ณ  ํ•œ๋‹ค. ์ž์ฒด์ ์œผ๋กœ ๊ฐ’์„ ๊ฐ–์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์„ ์ฝ๊ฑฐ๋‚˜ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ ‘๊ทผ์ž ํ•จ์ˆ˜(setter, getter)๋กœ ๊ตฌ์„ฑ๋œ ํ”„๋กœํผํ‹ฐ๋‹ค. ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ์˜ ๋ณธ์งˆ์€ 'ํ•จ์ˆ˜'์ด์ง€๋งŒ ์™ธ๋ถ€ ์ฝ”๋“œ์—์„œ๋Š” ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ์ผ๋ฐ˜์ ์ธ ํ”„๋กœํผํ‹ฐ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค.

    ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ํ”„๋กœํผํ‹ฐ ๋””์Šคํฌ๋ฆฝํ„ฐ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ ์„ค๋ช…
    [[Get]] get ์ธ์ˆ˜๊ฐ€ ์—†๋Š” ํ•จ์ˆ˜๋กœ(getter), ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ์ฝ์–ด์˜ฌ ๋•Œ ๋™์ž‘ํ•œ๋‹ค.
    [[Set]] set ์ธ์ˆ˜๊ฐ€ ํ•˜๋‚˜์ธ ํ•จ์ˆ˜๋กœ(setter), ํ”„๋กœํผํ‹ฐ์— ๊ฐ’์„ ์“ธ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
    [[Enumerable]] enumerable ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ์™€ ๋™์ผ
    [[Configurable]] configurable ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ์™€ ๋™์ผ

     

    setter์™€ getter์˜ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ๋ฒ•

    let obj = {
      get propName() {
        // getter, obj.propName์„ ์‹คํ–‰ํ•  ๋•Œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ
      },
    
      set propName(value) {
        // setter, obj.propName = value๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ
      }
    };
    
    console.log(obj);      // {}
    console.log(Object.getOwnPropertyDescriptors(obj));    // {propName: {get: propName(), set: propName(value), enumerable: true, configurable: true}}

    ์—ฌ๊ธฐ์„œ ์ฃผ๋ชฉํ•  ์ ์€, setter์™€ getter๋กœ ์ •์˜ํ•œ ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋Š” ์ฝ๊ณ  ์“ธ ์ˆœ ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ€์ƒ์˜ ํ”„๋กœํผํ‹ฐ๋ผ๋Š” ์ ์ด๋‹ค.

     

    ํ”„๋กœํผํ‹ฐ์ด๊ธฐ์— ์‚ฌ์šฉ์‹œ์—๋Š” ๋ฉ”์†Œ๋“œ์™€ ๋‹ค๋ฅด๊ฒŒ ์ผ๋ฐ˜ ํ”„๋กœํผํ‹ฐ์ฒ˜๋Ÿผ obj.propName = 'Minju', console.log(obj.propName)์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์ฝ๊ณ  ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ, ์‹ค์ œ๋กœ๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ€์ƒ์˜ ํ”„๋กœํผํ‹ฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์œ„ ์ฝ”๋“œ์—์„œ ํ™•์ธํ•ด ๋ณธ ๊ฒƒ ๊ฐ™์ด console์— ๊ฐ์ฒด๋ฅผ ์ฐ์–ด๋ณด๋ฉด ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋Š” ์ถœ๋ ฅ์ด ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

     

    ๋˜ํ•œ, ์ฝ˜์†”์—๋Š” ์ฐํžˆ์ง€ ์•Š์•˜์ง€๋งŒ, Object.getOwnPropertyDescriptors๋ฅผ ํ†ตํ•ด ํ™•์ธํ•ด ๋ณด๋ฉด ํ”„๋กœํผํ‹ฐ ๋””์Šคํฌ๋ฆฝํ„ฐ ๊ฐ์ฒด์— propName์˜ ๋””์Šคํฌ๋ฆฝํ„ฐ ๊ฐ์ฒด๊ฐ€ ์ฐํžˆ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.


    ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ์˜ ํ™œ์šฉ

    ๊ทธ๋ž˜์„œ ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋ฅผ ์–ด๋””์—๋‹ค๊ฐ€ ์“ธ ์ˆ˜ ์žˆ์„๊นŒ?

    ํ™œ์šฉ์ผ€์ด์Šค 1. ํ”„๋กœํผํ‹ฐ ๊ฐ’ ํ†ต์ œํ•˜๊ธฐ

    ์•„๋ž˜ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ user.age์— ์Œ์ˆ˜์ธ ๊ฐ’์„ ๋„ฃ์ง€ ๋ชปํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค. ์‹ค์ œ ๊ฐ’์€ ๋ณ„๋„ ํ”„๋กœํผํ‹ฐ _age์— ์ €์žฅ๋œ๋‹ค.

    let user = {
     get age(){
       return this._age;
     },
    
     set age(value){
          if(value < 0) {
          return alert('age cannot be negative');    // ์‚ฌ์šฉ์ž๊ฐ€ user.age = -100 ๊ณผ ๊ฐ™์ด ๋ง๋„ ์•ˆ๋˜๋Š” ๊ฐ’์„ ๋„ฃ๋Š” ๊ฒƒ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.
        }
        this._age = value;
     }
    }
    
    user.age = 100;
    console.log(user);   // {_age: 100}
    console.log(user.age); // 100

     

    ํ™œ์šฉ์ผ€์ด์Šค 2. ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ์†์‰ฝ๊ฒŒ ๋Œ€์ฒ˜ํ•˜๊ธฐ (ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ์‚ฌ์šฉ)

    ์•„๋ž˜์™€ ๊ฐ™์ด ์ด๋ฆ„๊ณผ ๋‚˜์ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‚ฌ์šฉ์ž๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

    function User(name, age) {
      this.name = name;
      this.age = age;
    }
    
    let minju = new User("Minju", 25);
    
    alert( minju.age ); // 25

    ๊ทธ๋Ÿฐ๋ฐ, ๋‚˜์ด๊ฐ€ ์•„๋‹ˆ๋ผ ์ƒ์ผ์„ ๋ฐ˜ํ™˜ํ•ด๋‹ฌ๋ผ๊ณ  ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ฐ”๋€Œ์—ˆ๋‹ค๊ณ  ํ•ด๋ณด์ž.

    function User(name, birthday) {
      this.name = name;
      this.birthday = birthday;
    }
    
    let minju = new User("Minju", new Date(1992, 6, 1));
    
    alert(minju.age);  // ์—ฌ๊ธฐ๋Š” ์ „๋ถ€ ์˜ค๋ฅ˜๊ฐ€ ๋‚  ๊ฒƒ์ด๋‹ค.!!! ๐Ÿ˜‚

     

    ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ์ด๋ ‡๊ฒŒ ๋ณ€๊ฒฝํ–ˆ๋‹ค๋ฉด ๊ธฐ์กด ์ฝ”๋“œ ์ค‘, age๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ์ฐพ์•„ ์ˆ˜์ •ํ•ด์ค˜์•ผ ํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๋ ‡๊ฒŒ ์ผ์ผ์ด ์ฐพ์•„์„œ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•˜๊ธด ํ•˜์ง€๋งŒ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค. ๋˜ํ•œ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ์‚ฌ์šฉ์ค‘์ด๋ผ๋ฉด ์–ธ์ œ ๋ชจ๋‘ ์ฐพ์•„์„œ ๋ฐ”๊ฟ”์–ด์ฃผ๋ƒ....@.@

     

    ์ด๋Ÿด ๋•Œ, ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค.

    function User(name, birthday) {
      this.name = name;
      this.birthday = birthday;
    
      // age ํ”„๋กœํผํ‹ฐ๋ฅผ ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋กœ ์ƒ์„ฑ
      Object.defineProperty(this, "age", {
        get() {
          let todayYear = new Date().getFullYear();
          return todayYear - this.birthday.getFullYear();
        }
      });
    }
    
    let minju = new User("Minju", new Date(1992, 6, 1));
    
    alert( minju.birthday ); // birthday๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    alert( minju.age );      // age ์—ญ์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     

    ํ™œ์šฉ์ผ€์ด์Šค 3. ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ์†์‰ฝ๊ฒŒ ๋Œ€์ฒ˜ํ•˜๊ธฐ 2(ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ์‚ฌ์šฉ)

    ๋ฐ”๋กœ ์ „๊ณผ ๋น„์Šทํ•œ ๋‚ด์šฉ์œผ๋กœ, ์„œ๋ฒ„์—์„œ ์ด๋ฆ„๊ณผ ์„ฑ์„ ๋ฐ›์•„ ์‹ค์ œ ํ™”๋ฉด์—์„œ๋Š” fullName์„ ๋ฆฌํ„ดํ•ด์ค˜์•ผ ํ•œ๋‹ค๊ณ  ํ•ด๋ณด์ž.

    let user = {
      firstName: "๋ฏผ์ฃผ",
      lastName: "๊น€",
    };

    ํ™”๋ฉด์˜ ์ด๋ฆ„์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ณณ์—์„œ๋Š” ์•„๋งˆ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์›ํ•˜๋Š” ํ’€๋„ค์ž„์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉํ–ˆ์„ ๊ฒƒ์ด๋‹ค.

    const fullName = `${user.firstName} ${user.lastName}`;

    ๊ทธ๋Ÿฐ๋ฐ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ณ€๊ฒฝ๋˜์–ด ๋งŒ์•ฝ ์ด๋ฆ„์— ์ „๋ถ€ 'ํšŒ์›๋‹˜'์„ ๋ถ™์—ฌ์•ผ ํ•œ๋‹ค๊ณ  ํ•ด๋ณด์ž. ๊ทธ๋Ÿฌ๋ฉด ๋ณ€์ˆ˜ fullName์ด ์žˆ๋Š” ๊ณณ์„ ์ „๋ถ€ ์ฐพ์•„ ์ผ์ผ์ด ๋ณ€๊ฒฝํ•ด์ค˜์•ผ ํ•  ๊ฒƒ์ด๋‹ค. ์ด ๋•Œ, ๊ฐ์ฒด ์•ˆ์—์„œ getter๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋”๋ผ๋ฉด ์ด ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ์‰ฝ๊ฒŒ ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ๋‹ค! ์•„๋ž˜์ฒ˜๋Ÿผ ํ•œ๊ตฐ๋ฐ๋งŒ ๊ฐ„ํŽธํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•ด ์ฃผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค!

    let user = {
      firstName: "๋ฏผ์ฃผ",
      lastName: "๊น€",
    
      get fullName() {
        return `${user.firstName} ${user.lastName} ํšŒ์›๋‹˜`
      }
    };
    
    user.fullName
    

     

     

    ์ฐธ๊ณ 

    - ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ DeepDive

    - https://ko.javascript.info/property-accessors

     

    ํ”„๋กœํผํ‹ฐ getter์™€ setter

     

    ko.javascript.info

    - ๋“œ๋ฆผ์ฝ”๋”ฉ ์—˜๋ฆฌ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ 6. ํด๋ž˜์Šค์™€ ์˜ค๋ธŒ์ ํŠธ ์ฐจ์ด์ 

    ๋Œ“๊ธ€

Designed by Tistory.