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 |
์ฐธ๊ณ
์ฐธ๊ณ ์๋ฃ๋งํฌ
'Front-end > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| B15 : ๊ฐ์ฒด to ์์ ํ์ ๋ณํ (0) | 2025.08.19 |
|---|---|
| B14 : ๊ฐ์ฒด์ ๋ณต์ฌ (0) | 2025.08.19 |
| B12 : ๊ฐ์ฒด (0) | 2025.08.19 |
| ํธ๋์คํ์ผ๋ฌ์ ํด๋ฆฌํ (2) | 2025.08.19 |
| B11 : ํจ์ ๋ด์ฅ ๋ฉ์๋ (1) | 2025.08.17 |
GitHub