옵셔널 체이닝 연산자, spread 연산자

이정기·2023년 5월 24일
0

TIL

목록 보기
69/71
post-thumbnail

옵셔널체이닝 연산자 '?'

데이터를 주고받다보면 클라이언트에서 데이터를 보낼때가 있고 안보낼 때가 있다.

그럼 서버에선 데이터가 당연히 들어올 줄 알고 준비하고 있는데, 빈값이 들어온다면 에러를 발생시킨다.

그럴때 && 나 ! 연산자를 이용해 데이터의 유무를 판별했는데 옵셔널 체이닝 연산자만 있다면, 코드를 한결 깔끔하게 작성할 수 있다.

코드

const fileName = req.file?.filename

위에 코드는 옵셔널체이닝 연산자 '?' 가 없었다면, 에러를 반환시켜 API 가 동작하지 않는다.

하지만 file 이 없다면 undefined 를 값으로 반환하게 하는 옵셔널체이닝 연산자로 에러를 반환하지 않고, fileName에 undefined값을 할당한다.

spread 연산자

나머지 연산자로 알고 있는 ... 은 주로 배열이나 객체를 복사할때 사용하였다. 하지만 요번에 응용으로 시퀄라이즈에 사용함으로써 spread의 진가를 알수 있었다.

ORM 은 시퀄라이즈, 데이터베이스는 MySQL 을 사용했다.

await Menu.update(
        {
          menuName,
          menuPrice,
          menuPhoto: fileName
        },
        {
          where: { id: menuId },
        }
      );

나의 고민은 fileName을 undifined 로 값을 할당하는 것 까진 좋았는데, 데이터베이스에 기존의 있는 값까지 undefined 로 수정시키고 싶진 않았다.

코드

await Menu.update(
        {
          menuName,
          menuPrice,
          ...(fileName ? { menuPhoto: fileName } : {}),
        },
        {
          where: { id: menuId },
        }
      );

해당 코드로 말끔히 해결됐는데,

  • 새로운속성추가
  • 기존 속성 덮어쓰기
  • 객체 병합

등 수정과 추가에 용이하게 사용됐다.

내 경우 fileName 이 있을경우 새로운 속성을 추가해야 했기에 스프레드 연산자와 3항 연산자를 이용해 이미지 수정 API 를 완료할 수 있었다.

profile
Node.js 로 꿈을 꾸었다..

0개의 댓글