#3 객체 메소드, 계산된 프로퍼티

2026. 1. 22. 20:58·JavaScript/중급
반응형

계산된 프로퍼티

일반적인 객체는 이렇게 고정된 키를 쓴다.

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

 

그런데 이 키 이름을 변수나 식으로 만들고 싶을 때가 있다.

그때 사용하는 것이 대괄호[ ] 이다.

let a = "age";

const user = {
  name: "Mike",
  [a]: 30,            // a가 "age" 이므로 결과는 age: 30
  [1 + 4]: 5,         // "5": 5 (숫자 계산 결과가 키가 됨)
  ["굽네" + "치킨"]: "hello" // "굽네치킨": "hello"
};

 

왜 유용한가?

함수로 원하는 키를 받아 객체를 만들어 낼 수 있다.

function makeObj(key, val) {
  return {
    [key]: val
  };
}

const obj = makeObj("이름", "국밥"); // {이름: "국밥"}

Object.assign() 

Object.assign()은 객체 복사/합치기(병합)하는 함수이다.

Object.assign(초기값, 병합할 객체들...)

 

자주 하는 실수: 그냥 대입하면 복사가 아니다.

const user = { name: "Mike" };
const cloneUser = user;     // 복사가 아니라 "같은 객체를 가리킴"
cloneUser.name = "soondae";

console.log(user.name);     // "soondae" (원본도 같이 바뀜)
console.log(user === cloneUser); // true
  • 같은 객체를 가르키는 것일 뿐 객체가 복사되지 않는다.
const user = { name: "Mike" };
const obj = Object.assign({ name: "Tom" }, user);

console.log(obj.name); // "Mike"
  • 중요포인트: 초기값에 같은 키가 있으면 덮어씌운다.
const user1 = { name: "Mike" };
const info1 = { age: 30 };
const info2 = { gender: "male" };

Object.assign(user1, info1, info2);
// user1 => {name:"Mike", age:30, gender:"male"}
  • 여러 객체도 한 번에 병합이 가능하다.

키/값을 배열로 뽑기

Object.keys({ name: "John", age: 30 });
// ["name", "age"]
  • Object.keys(): 키만 배열로 
Object.values({ John: 100, Pete: 300, Mary: 250 });
// [100, 300, 250]
  • Object.values(): 값만 배열로
Object.entries({ name: "soondae", age: 26, gender: "female" });
/*
[
  ["name", "soondae"],
  ["age", 26],
  ["gender", "female"]
]
*/
  • Object.entries(): [키, 값] 쌍의 배열로
const arr = [
  ["name", "soondae"],
  ["age", 26],
  ["gender", "female"]
];

Object.fromEntries(arr);
// {name:"soondae", age:26, gender:"female"}
  • Object.entries(): entries형태의 배열을 다시 객체

연습

급여 합계 구하기

let salaries = { John: 100, Pete: 300, Mary: 250 };

function sumSalaries(obj) {
  let values = Object.values(obj);
  let sum = 0;
  for (const value of values) {
    sum += value;
  }
  return sum;
}

sumSalaries(salaries); // 650
  • Object.values로 값만 가져와 계산

프로퍼티(키) 개수 세기

let user = { name: "John", age: 30 };

function count(obj) {
  return Object.keys(obj).length;
}

count(user); // 2
  • [name], [age] 총 2개

키워드

계산된 프로퍼티

: [ 식 ] 으로 키를 동적으로 만들 수 있다.

 

Object.assign()

: 객체를 복제나 병합할 때 사용하며, 중복 키는 덮어쓴다.

 

Objecty.keys/values/entries/fromEntries

: 객체를 배열 형태로 바꿔서 순회/가공하고 다시 객체로 복원할 수 있다

반응형

'JavaScript > 중급' 카테고리의 다른 글

#4 심볼  (0) 2026.01.22
#2 생성자 함수  (2) 2026.01.08
#1 변수, 호이스팅, TDZ(Temporal Dead Zone)  (0) 2026.01.08
'JavaScript/중급' 카테고리의 다른 글
  • #4 심볼
  • #2 생성자 함수
  • #1 변수, 호이스팅, TDZ(Temporal Dead Zone)
y3onbug5
y3onbug5
y3onbug5 님의 블로그 입니다.
  • y3onbug5
    y3onbug5 님의 블로그
    y3onbug5
  • 전체
    오늘
    어제
    • 분류 전체보기 (167) N
      • Alpacahack (19) N
      • Dreamhack 워게임 (49)
        • Lv.1 (40)
        • Lv.0 (4)
        • LV.2 (3)
        • LV.3 (2)
      • [Dreamhack] Web Beginner (3)
      • [Dreamhack] Web Hacking (17)
        • 웹 기초 지식 (4)
        • Cookie & Session (2)
        • Cross-Site Scripting(XSS) (1)
        • Cross-Site Request Forgery (1)
        • SQL Injection (4)
        • NoSQL Injection (2)
        • Command Injection (1)
        • File Vulnerability (1)
        • Server-Side Request Forgery (1)
      • [Dreamhack] Web Hacking Client-Side (10)
        • XSS Filtering Bypass (2)
        • Content Security Policy (CSP) (2)
        • CSRF,CORS Bypass (2)
        • Client-Side Template Injection (CSTI) (1)
        • CSS Injection (1)
        • Relative Path Overwrite (RPO) (1)
        • DOM Vulnerability (1)
      • [Dreamhack] Web Hacking Server-Side (15)
        • SQL Injection Advanced (4)
        • SQL Injection Advanced - Fingerprinting (2)
        • NoSQL Injection Advanced (3)
        • Command Injection Advanced - Web Servers (3)
        • File Vulnerability Advanced - Web Server (3)
      • [Dreamhack]Black-Box Penetration Testing (15)
        • DreamCommunity Penetration Testing (11)
      • [Dreamhack] LLM (2)
        • [Dreamhack] LLM과 프롬프트 엔지니어링 (2)
      • Web 공부 (4)
      • Web Study (15)
      • JavaScript (17)
        • 기초 (12)
        • 중급 (4)
      • 웹 개발(Flask) (0)
      • [Security First] web 기초교육 (1) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    JS
    xss
    webhacking
    hacking
    JavaScript
    web
    드림핵
    LLM
    CSRF
    DreamHack
    webstudy
    alpacahack
    cve
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
y3onbug5
#3 객체 메소드, 계산된 프로퍼티
상단으로

티스토리툴바