B13 : ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ (Accessor Property)

2025. 8. 19. 12:56ใ†Front-end/JavaScript

๋ฐ˜์‘ํ˜•

๋ชฉ์ฐจ

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

2. ํ”„๋กœํผํ‹ฐ ์„œ์ˆ ์ž getter์™€ setter

3. Object.defineProperty()

4. ํ”„๋กœํผํ‹ฐ ์„œ์ˆ ์ž (Property Descriptor)


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

์•ž์„œ ๋ดค๋˜ ์ผ๋ฐ˜์ ์ธ ํ”„๋กœํผํ‹ฐ(๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ)๋Š” ๋‹จ์ˆœํžˆ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ๊บผ๋‚ด๋Š” ์šฉ๋„์ด๋‹ค.

 

์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋Š” ๋‹จ์ˆœํ•œ ๊ฐ’์ด ์•„๋‹Œ ํ•จ์ˆ˜(getter, setter)๋ฅผ ํ†ตํ•ด ์ •์˜๋œ๋‹ค.

  • ๊ฐ’์„ ์ฝ์„ ๋•Œ(get) ํŠน์ • ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜
  • ๊ฐ’์„ ์“ธ ๋•Œ(set) ํŠน์ • ๊ฒ€์ฆ์ด๋‚˜ ๋กœ์ง์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ/ํ• ๋‹น์„ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ฒ˜๋Ÿผ ์ œ์–ดํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.


2. ํ”„๋กœํผํ‹ฐ ์„œ์ˆ ์ž getter์™€ setter

์–ด๋–ค ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•  ๋•Œ๋งˆ๋‹ค ๋™์ ์ธ ๊ณ„์‚ฐ์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜, ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ๋ณ„๋„์˜ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

  • getter : ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์— ์ ‘๊ทผํ•  ๋•Œ ํ˜ธ์ถœ๋˜๋ฉฐ, getter ๋ฉ”์„œ๋“œ์˜ ๋ฐ˜ํ™˜ ๊ฐ’์ด ์ ‘๊ทผ ํ‘œํ˜„์‹์˜ ๊ฒฐ๊ณผ๊ฐ’
  • setter : ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ๋•Œ ํ˜ธ์ถœ
const obj = {
  myName: 'javascript',
    set name(name) {	// obj.name = "..." ํ• ๋‹น ์‹œ ์‹คํ–‰
      if (name !== null) {
        this.myName = name;	// name์ด ๋นˆ ๋ฌธ์ž์—ด์ด ์•„๋‹ˆ๋ผ๋ฉด ์ด๋ฆ„์œผ๋กœ ์ง€์ •
      }
    },
    get name() {	// obj.name ํ˜ธ์ถœ ์‹œ ์‹คํ–‰
      return this.myName;
    }
}

 


3. Object.defineProperty()

getter, setter๋Š” ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ๋ฟ ์•„๋‹ˆ๋ผ ์ •์  ๋ฉ”์„œ๋“œ Object.defineProperty๋กœ๋„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ๋ฉ”์„œ๋“œ๋Š” ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ƒˆ๋กœ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ๊ฒƒ์„ ์ˆ˜์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

const obj = {
  myName = 'javascript'
};

Object.defineProperty(obj, 'name', {
  set(value) {
    if(value !== null {
      this.myName = value;
    }
  },
  enumerable: true,	// for...in, Object.keys()์— ๋ณด์ผ์ง€ ์—ฌ๋ถ€
  configurable: true,	// ์‚ญ์ œ๋‚˜ ์žฌ์ •์˜ ๊ฐ€๋Šฅ ์—ฌ๋ถ€
});
  • ์ฒซ ๋ฒˆ์งธ ์ธ์ž : ๋Œ€์ƒ์ด ๋˜๋Š” ๊ฐ์ฒด (์ •์˜/์ˆ˜์ •)
  • ๋‘ ๋ฒˆ์งธ ์ธ์ž : ์ถ”๊ฐ€/๊ฐฑ์‹ ํ•˜๋ ค๋Š” ํ”„๋กœํผํ‹ฐ๋ช…
  • ์„ธ ๋ฒˆ์งธ ์ธ์ž : ํ”„๋กœํผํ‹ฐ ์„œ์ˆ ์ž๋ฅผ ์ •์˜ํ•œ ๊ฐ์ฒด

4. ํ”„๋กœํผํ‹ฐ ์„œ์ˆ ์ž (Property Descriptor)

Object.defineProperty๋กœ ์ •์˜ํ–ˆ์„ ๋•Œ๋Š” ํ”„๋กœํผํ‹ฐ์— ๋Œ€ํ•œ ์†์„ฑ์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ„์—์„œ ์‚ฌ์šฉํ•ด๋ณธ getter, setter๋ฅผ ํฌํ•จํ•ด์„œ ์•„๋ž˜์˜ ๊ฒƒ๋“ค์ด ๋” ์žˆ๋‹ค.

ํ‚ค ์„ค๋ช… ๊ธฐ๋ณธ๊ฐ’
value ํ”„๋กœํผํ‹ฐ ๊ฐ’ undefined
writable ๊ฐ’ ์ˆ˜์ • ๊ฐ€๋Šฅ ์—ฌ๋ถ€ false
enumerable ์—ด๊ฑฐ(for…in, Object.keys)์— ํฌํ•จ ์—ฌ๋ถ€ false
configurable ์‚ญ์ œ๋‚˜ ์†์„ฑ ์žฌ์ •์˜ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ false
get getter ํ•จ์ˆ˜ undefined
set setter ํ•จ์ˆ˜ undefined

 

 

 

 

 

์ฐธ๊ณ 

๋”๋ณด๊ธฐ

์ฐธ๊ณ ์ž๋ฃŒ๋งํฌ

๋ฐ˜์‘ํ˜•