2 minute read

연산 프로퍼티(Computed property)

1. 변수를 연산하기

let test = 'age';

const user = {
  name : 'Cookie',
  test : 31,
}

// console.log(user);
결과: {name: 'Cookie', test: 31}

💡위와 같은 JS 의 객체가 있다.
💡연산 프로퍼티를 적용해보자.

let test = 'age';

const user = {
  name : 'Cookie',
  [test] : 31,
}

// console.log(user);
결과: {name: 'Cookie', age: 31}

2. 숫자, 문자열 연산하기

const user = {
  [10 + 20] : 1,
  ["안녕" + "하세요"] : "Hello"
}

// console.log(user);
{ '30': 1, '안녕하세요': 'Hello' }

예제

import React, { useState } from 'react';

function YourComponent() {

  // 이러한 상태값이 있다고 가정한다.
  const [info, setInfo] = useState({username: '홍길동', text: '값입니다용'})

  const onChange = (event) => {
    const {name, value} = event.target;
    setInfo({...info, [name]: [value]});  // 연산 프로퍼티
  }

  return (
  <input
    name="username"
    placeholder="아이디"
    value={info.text}
    onChange={onChange}
  />)
}

연산프로퍼티
💡동적인 값을 사용하려면 [] 대괄호로 감싸주자.

메소드 (Methods)

Object.assign()

const user = {
  name : 'Cookie',
  age : 31,
}

const test = user;

test 변수에 user 객체 자체를 할당하면?
💡 기본 치환은 [깊은 복사]로 같은 객체를 바라보도록 복사한다.
💡 즉, 참조 타입이므로 같은 객체의 메모리를 바라본다.

  • test.age = 99999
    
    // console.log(user);
    {name: 'Cookie', age: 99999}
    

문제점
💡 test의 값을 변경하면 기존의 user 객체의 값도 변경이 되버린다.
💡 하나의 객체를 두 변수가 접근하는 것
💡 assign() 은 객체를 복사할 때 사용한다.

// 1. 기본적인 얕은 복사
const cloneUser = Object.assign({}, user);  


/* 결과 */
{ name: 'Cookie', age: 31 }

// 2. 초기화값을 병합하여 얕은 복사
const cloneUser = Object.assign({ gender: 'male'}, user);


/* 결과 */
{ gender: 'male', name: 'Cookie', age: 31 }

// 3. 기존에 존재하는 key 값으로 초기화해서 얕은 복사
const cloneUser = Object.assign({ age: 777 }, user);


/* 결과 */
{ name: 'Cookie', age: 31 }  // 이건 안먹힌다.

// 4. 두 개이상 병합해서 얕은 복사
const user1 = {
name : 'Cookie',
}

const user2 = {
  age : 31,
}

const user3 = {
  genger : 'male',
}

const cloneUser = Object.assign(user1, user2, user3);


/* 결과 */
{name: 'Cookie', age: 31, genger: 'male'}

Object.assign()
💡 assign() 함수는 [얕은 복사]로 새로운 객체로 복사한다.
💡 cloneUser 에 user 객체를 복사했다.
💡 위의 코드에서 빈 객체 ( {} ) 는 초기 값이다.

  • param1: 초기값
  • param2: 초기값과 함께 병합할 내용

복제가 아니라 병합메소드 인듯

Object.keys()

const user = {
  name : 'Cookie',
  age : 31,
  gender : 'male',
}

Object.keys(user);

[ 'name', 'age', 'gender' ]

Object.keys()
💡 이렇게 key 값들만 배열로 반환한다.

Object.values()

const user = {
  name : 'Cookie',
  age : 31,
  gender : 'male',
}

Object.values(user);

[ 'Cookie', 31, 'male' ]

Object.values()
💡 값들만 배열로 반환한다.

Object.entries()

const user = {
  name : 'Cookie',
  age : 31,
  gender : 'male',
}

Object.entries(user);

[ [ 'name', 'Cookie' ], [ 'age', 31 ], [ 'gender', 'male' ] ]

Object.entries()
💡 이렇게 [키, 값] 으로 된 배열이 프로퍼티 수 만큼 묶인 배열로 반환된다.
💡 Object.fromEntries() 기능의 반대로 작동한다.

Object.fromEntries()

const user = [
  ["name","Cookie"],
  ["age",31],
  ["gender","male"],
];

Object.fromEntries(user);

{ name: 'Cookie', age: 31, gender: 'male' }

Object.fromEntries()
💡 이렇게 [키, 값] 으로 구성된 배열이 이렇게 키, 값으로 깔끔하게 객체를 만들어 준다.
💡 Object.entries() 기능의 반대로 작동한다.

Leave a comment