이 영역을 누르면 첫 페이지로 이동
Nuhends 의 Tech Life 블로그의 첫 페이지로 이동

Nuhends 의 Tech Life

페이지 맨 위로 올라가기

Nuhends 의 Tech Life

IT / Tech / 재테크 관련 뉴스를 최대한 알기 쉽게 전달하는 Tech 블로그 입니다.

[JS] 객체에 조건부 프로퍼티 적용하기

  • 2022.06.05 22:00
  • 프로그래밍/JAVASCRIPT 사전
반응형

 

객체에 조건부 프로퍼티 적용하기

작업 중에 query 객체에 특정 프로퍼티를 조건부로 적용해야하는 경우가 있었다. 예를 들어 page라는 param을 주는 상황에서 특정 값이 있을 때 param을 주고 싶다.

const query = {};

if (page) {
    query.page = page;
}

위 코드처럼 if문으로 query 객체에 prop을 추가해줄 수 있다. 하지만 조금 더 간단하게 짤 방법을 알아봄

const query = {
	...(page && { page })
};


// 여러 params가 있는 경우
const query = {
	...(page && { page }),
	...(category && { category }),
	...(type && { type )
};

spread 연산자를 사용하면 조금 더 간단하게 사용할 수 있다. 또한 다른 param이 있다면 if문을 사용하는 것보다 간단하고 가독성도 나쁘지 않을 듯 하다. 이 개념을 활용해서 실무 코드에서는 아래처럼 작성했다.

 

실제 사용한 코드

const router = useRouter();
const { pathname, query } = router;
const page = pageValue;
const nextQuery = {
	...query,
    page: pageValue
}

router.replace(
	{
		pathname,
		query: nextQuery,
	},
);

 

그렇다면 성능은?

spread 연산자를 사용한 방식은 사실 syntax sugar이다. 그렇기 때문에 성능상으로는 첫번째 if문 방식이 더 좋다.

function testSpreadOperatorConditionFulfilled() {
  const value = 5;

  console.time('testSpreadOperatorConditionFulfilled');
  for (let i = 0; i < 200000000; i++) {
    let a = {
      ...(value && {b: value})
    };
  }
  console.timeEnd('testSpreadOperatorConditionFulfilled');
}

function testSpreadOperatorConditionNotFulfilled() {
  const value = undefined;

  console.time('testSpreadOperatorConditionNotFulfilled');
  for (let i = 0; i < 200000000; i++) {
    let a = {
      ...(value && {b: value})
    };
  }
  console.timeEnd('testSpreadOperatorConditionNotFulfilled');
}

function testClassicConditionFulfilled() {
  const value = 5;

  console.time('testClassicConditionFulfilled');
  for (let i = 0; i < 200000000; i++) {
    let a = {};
    if (value)
        a.b = value;
  }
  console.timeEnd('testClassicConditionFulfilled');
}

function testClassicConditionNotFulfilled() {
  const value = undefined;

  console.time('testClassicConditionNotFulfilled');
  for (let i = 0; i < 200000000; i++) {
    let a = {};
    if (value)
        a.b = value;
  }
  console.timeEnd('testClassicConditionNotFulfilled');
}

testClassicConditionFulfilled(); // ~ 234.9ms
testClassicConditionNotFulfilled(); // ~493.1ms
testSpreadOperatorConditionFulfilled(); // ~2649.4ms
testSpreadOperatorConditionNotFulfilled(); // ~2278.0ms

 

결론

개인적 의견은 하드웨어가 점점 좋아지면서 성능 이슈가 점점 줄어들고 있다. 물론 성능을 고려하지 않아도 된다는 것이 아니다. 결국엔 트레이드 오프 관점에서 아주 미세한 ms를 개선하는 것보다는 코드 가독성을 늘려 이해하기 쉽고 간편한 코드를 짜는게 더 좋을 것 같아. 성능이 크리티컬한 프로젝트가 아니라면 spread 연산자를 사용한 방법이 더 좋다고 생각한다.

반응형
저작자표시 비영리 변경금지 (새창열림)

'프로그래밍 > JAVASCRIPT 사전' 카테고리의 다른 글

[JS] 호이스팅(Hoisting)을 이해해보자!  (3) 2022.01.13
[JS] 모듈 import/export 문법 빠르게 정리하기  (0) 2021.09.18
[JS] scope 와 실행 컨텍스트  (0) 2021.06.11
[JS] this란? 모든 케이스를 정리해보자  (0) 2021.06.08
[JS] 화살표 함수, 쉽고 빠르게 정리하기  (8) 2021.05.11

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [JS] 호이스팅(Hoisting)을 이해해보자!

    [JS] 호이스팅(Hoisting)을 이해해보자!

    2022.01.13
  • [JS] 모듈 import/export 문법 빠르게 정리하기

    [JS] 모듈 import/export 문법 빠르게 정리하기

    2021.09.18
  • [JS] scope 와 실행 컨텍스트

    [JS] scope 와 실행 컨텍스트

    2021.06.11
  • [JS] this란? 모든 케이스를 정리해보자

    [JS] this란? 모든 케이스를 정리해보자

    2021.06.08
다른 글 더 둘러보기

정보

Nuhends 의 Tech Life 블로그의 첫 페이지로 이동

Nuhends 의 Tech Life

  • Nuhends 의 Tech Life의 첫 페이지로 이동
반응형

검색

메뉴

  • 홈
  • 웹 개발
  • 경제 데이터
  • 경제 공부
  • 방명록

카테고리

  • 분류 전체보기 (127)
    • 프로그래밍 (69)
      • React (3)
      • HTML&CSS 사전 (13)
      • JAVASCRIPT 사전 (11)
      • Algorithm (23)
      • 이슈 정리 (2)
      • 개발 환경 (4)
      • NodeJS (1)
      • Typescript (4)
      • NextJS (5)
      • React-Query (2)
      • 인프라 (0)
      • ai (1)
    • 경제 데이터 (22)
      • 주식 순위 (20)
      • 경제지표 (2)
    • 경제 공부 (25)
      • 경제 신문 읽기 (3)
      • 세금 재테크 (7)
      • 인사이트 (4)
      • 경제용어정리 (9)
      • 정부 지원 제도 관련 (2)
    • 팁 모음 (11)
      • 인터넷 (5)
      • 생활 (3)
      • SNS 맛집 (3)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 프로그래머스
  • javascript
  • 코테
  • 코딩테스트
  • 코테 풀이
  • softeer
  • 자바스크립트
  • 알고리즘

나의 외부 링크

정보

nuhends의 Nuhends 의 Tech Life

Nuhends 의 Tech Life

nuhends

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © nuhends. Designed by Fraccino.

티스토리툴바