Computed Property, Symbol()

ν•˜μ˜Β·2024λ…„ 11μ›” 27일
0

JavaScript

λͺ©λ‘ 보기
21/29

Computed Property, Symbol()

Computed Property πŸ“

: 속성(Property) 이름을 λ™μ μœΌλ‘œ μ •μ˜ν•˜κ±°λ‚˜ μ ‘κ·Όν•  λ•ŒΒ μ‚¬μš©ν•˜λŠ” 방법이닀.

Computed Property μ‚¬μš©λ²• 및 접근법

const dynamicKey = "age";
const user = {};
user[dynamicKey] = 30; // user["age"] = 30

console.log(user); // { age: 30 }

[] λ₯Ό μ‚¬μš©ν•˜μ—¬ 객체 속성을 λ™μ μœΌλ‘œ μΆ”κ°€ 및 μ ‘κ·Ό κ°€λŠ₯ν•˜λ‹€.


객체의 속성 μ ‘κ·Ό

  • 점 ν‘œκΈ°λ²•(.)은 λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄λ‘œλ§Œ 속성 μ ‘κ·Ό κ°€λŠ₯
  • [] ν‘œκΈ°λ²•μ€ λ³€μˆ˜λ‘œ 속성을 λ™μ μœΌλ‘œ μ ‘κ·Όν•  λ•Œ μ‚¬μš©
const key = "name";
const user = { name: "Mike" };

console.log(user.name); // Mike
console.log(user[key]); // Mike

Symbol() πŸ“

: ES6μ—μ„œ λ„μž…κ΄Έ κ³ μœ ν•œ κ°’(primitive value)을 μƒμ„±ν•˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ λ‚΄μž₯객체

Symbol 둜 μƒμ„±λœ 값은 μœ μΌν•˜κ³  λ‹€λ₯Έ Symbol κ°’κ³Ό μ ˆλŒ€λ‘œ μΆ©λŒν•˜μ§€ μ•ŠλŠ”λ‹€.

μ˜ˆμ‹œμ½”λ“œ

const sym1 = Symbol("description");
const sym2 = Symbol("description");

console.log(sym1 === sym2); // false

νŠΉμ§• βœ”οΈ

  1. μœ μΌμ„± 보μž₯

    : 같은 μ„€λͺ…을 μ‚¬μš©ν•΄λ„ 각 Symbol 값은 항상 κ³ μœ ν•˜λ‹€.

  2. μˆ¨κ²¨μ§„ 속성

    : Symbol ν‚€λ‘œ μ •μ˜λœ 속성은 기본적으둜 μˆœνšŒμ— ν¬ν•¨λ˜μ§€ μ•ŠκΈ° 떄문에 μˆ¨κ²¨μ§„ 속성을 μ •μ˜ν•  λ•Œ μœ μš©ν•˜λ‹€.

    ( for .. in λ°˜λ³΅λ¬Έμ—μ„œλ„ λ°°μ œλœλ‹€)


Symbol 을 μ‚¬μš©ν•˜λŠ” 이유 πŸ”

  1. 객체 ν‚€μ˜ 좩돌 방지 - μœ μΌμ„±μ„ 보μž₯ν•˜κΈ° λ•Œλ¬Έμ— λ‹€λ₯Έ μ½”λ“œμ—μ„œ μ •μ˜λœ 속성과 μΆ©λŒν•˜μ§€ μ•ŠλŠ” 속성을 μ •μ˜ν•  수 μžˆλ‹€.
const user = {
  name: "Mike",
};

const showName = Symbol("show name");
user[showName] = function () { // Computed Property μ‚¬μš©
  console.log(this.name);
};

// κΈ°μ‘΄ 속성과 μΆ©λŒν•˜μ§€ μ•ŠμŒ
console.log(user); // { name: 'Mike' }
user[showName](); // Mike
  1. λ‚΄λΆ€ λ©”νƒ€λ°μ΄ν„°λ‚˜ λΉ„κ³΅κ°œ 속성 μ •μ˜ - 일반적인 λ£¨ν”„λ‚˜ Object.keys 둜 μ ‘κ·Όν•  수 μ—†λ‹€.
const user = { name: "Mike" };
const id = Symbol("id");
user[id] = 12345;

// 일반적인 λ£¨ν”„λ‘œ μ ‘κ·Όν•  수 μ—†μŒ
console.log(Object.keys(user)); // ['name']
console.log(user[id]); // 12345

예제 μ½”λ“œλ‘œ λ³΅μŠ΅ν•˜κΈ° πŸ‘©πŸ»β€πŸ’»

const user = {
  name: "Mike",
  age: 30,
};

// λ‚˜μ˜ μž‘μ—…
//user.showName = function () {}; -> 그의 showName은 function () {}.
const showName = Symbol("show name");
user[showName] = function () {
  console.log(this.name); // Mike
};

user[showName]();

// μ‚¬μš©μžκ°€ λ³΄λŠ” λ©”μ‹œμ§€
for (let key in user) {
  console.log(`그의 ${key}은 ${user[key]}.`);
}

λ§Œμ•½ user.showName = function () {}; 이라고 μž‘μ„± ν›„ console을 ν™•μΈν•˜λ©΄ β€œκ·Έμ˜ showName은 function () {}.” μ΄λΌλŠ” 말도 μ•ˆ λ˜λŠ” λ¬Έμž₯이 좜λ ₯λœλ‹€.

λ”°λΌμ„œ showName λ©”μ„œλ“œλ‘œ 일반 속성과 μΆ©λŒν•˜μ§€ μ•ŠλŠ” 고유 μ†μ„±μœΌλ‘œ μ •μ˜ν•˜κ³ ,

user κ°μ²΄μ—λŠ” name 속성이 μ‘΄μž¬ν•˜λ©°, μ΄λ•Œ showName 은 μˆ¨κ²¨μ§„ λ©”μ†Œλ“œμ²˜λŸΌ λ™μž‘ν•œλ‹€.

μ™ΈλΆ€μ—μ„œ user[showName]을 μ œμ™Έν•œ λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ 이 λ©”μ†Œλ“œλ₯Ό μ ‘κ·Όν•  수 μ—†λ‹€.


μš”μ•½ πŸ‘

  1. Computed Property([]):
    • 객체 속성을 λ™μ μœΌλ‘œ μ •μ˜ν•˜κ±°λ‚˜ μ ‘κ·Όν•  λ•Œ μ‚¬μš©ν•œλ‹€.
    • λ³€μˆ˜, Symbol λ“± 동적인 ν‚€λ₯Ό ν™œμš©ν•΄μ•Ό ν•  λ•Œ μœ μš©ν•˜λ‹€.
  2. Symbol:
    • κ³ μœ ν•œ 객체 ν‚€λ₯Ό μƒμ„±ν•˜λŠ” ES6 문법.
    • 객체 μ†μ„±μ˜ μΆ©λŒμ„ λ°©μ§€ν•˜κ±°λ‚˜ μˆ¨κ²¨μ§„ 속성을 μ •μ˜ν•  λ•Œ μ‚¬μš©ν•œλ‹€.
    • μˆœνšŒμ™€Β Object.keysμ—μ„œ μ œμ™Έλœλ‹€.

참고자료

profile
μ™•μͺΌλž© νƒˆμΆœ λͺ©ν‘œμžμ˜ μ½”λ”© 곡뢀기둝

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보