Conditional Destructuring Assignment

About

์ •ํ™•ํ•œ ๋ช…์นญ์„ ๋ชฐ๋ผ์„œ Conditional Destructuring Assignment๋ผ๊ณ  ์ด๋ฆ„ ๋ถ™์ด๋„๋ก ํ•˜๊ฒ ๋‹ค.

JavaScript์™€ MongoDB Official Driver๋ฅผ ์“ธ ๋•Œ, optionalํ•œ ๊ฐ’์„ ๋„˜๊ธธ ๋•Œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋‹ˆ๊นŒ, ๊ฐ’์ด ์ „๋‹ฌ๋˜๋ฉด(๋˜๋Š” truthyํ•˜๋ฉด) ์‚ฌ์šฉํ•˜๊ณ , ๊ฐ’์ด ์ „๋‹ฌ๋˜์ง€ ์•Š์œผ๋ฉด(๋˜๋Š” falsyํ•˜๋ฉด) ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

Code

post.repository.ts
async function findPosts(
{
  user,
  postType,
  deleted,
}: {
  user?: User,
  postType?: PostType,
  deleted: boolean = false,
}): Promise<Post[]> {
  return postRepository.find({
    ...(user && { user }),
    ...(postType && { type: postType }),
    ...(deleted && { deletedAt: { $exists: true, $ne: null } } )
  })
}

Post ๋ผ๋Š” ๊ฒŒ์‹œ๊ธ€์„ ์œ„ํ•œ Mongo ์ปฌ๋ ‰์…˜(collection)์ด ์žˆ๊ณ , ํ•ด๋‹น ์ปฌ๋ ‰์…˜์—๋Š” ์•„์ด๋”” _id, ์ž‘์„ฑ์ž user, ๊ฒŒ์‹œ๊ธ€ ํƒ€์ž… type, ์‚ญ์ œ ์‹œ๊ฐ deletedAt ๋“ฑ์˜ ํ•„๋“œ(fields)๋“ค์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. Post ์ปฌ๋ ‰์…˜์—์„œ ๋„ํ๋จผํŠธ(document)๋ฅผ ํ•„ํ„ฐ๋งํ•ด ๋ฐฐ์—ด(Post[])๋กœ ๋ฐ›์•„์˜ค๋Š” repository ํ•จ์ˆ˜์ด๋‹ค.

๊ฐ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ?๋ฅผ ๋ถ™์—ฌ optionalํ•˜๊ฒŒ ํ•˜์˜€๋‹ค. ๊ฐ’์ด ์ „๋‹ฌ๋˜๋ฉด ๊ฐ’์ด ๋“ค์–ด๊ฐˆ ๊ฒƒ์ด๊ณ , ์ „๋‹ฌ๋˜์ง€ ์•Š์œผ๋ฉด undefined๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.

์ด ๋ฌธ๋ฒ•์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ตฌ์กฐ ๋ถ„ํ•ด (Destructuring Assignment)์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ์„ ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค. Destructuing Assignment ์ฐธ๊ณ .

  • user์— ๊ฐ’์ด ์ „๋‹ฌ๋˜๋ฉด user && { user } ์—์„œ user๊ฐ€ truthyํ•˜๊ฒŒ ๋˜๊ณ , { user } ๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ตฌ์กฐ ๋ถ„ํ•ด์— ์˜ํ•ด ...{ user }๊ฐ€ ๋˜๊ณ , ๊ฒฐ๊ตญ user๊ฐ€ ๋œ๋‹ค. ์ „๋‹ฌ๋˜์ง€ ์•Š์œผ๋ฉด falsyํ•˜๊ฒŒ ๋˜์–ด์„œ undefined๊ฐ€ ๋˜๊ณ , ์•„๋ฌด๋Ÿฐ ๊ฐ’๋„ ์•ˆ๋“ค์–ด๊ฐ€์„œ ์• ์ดˆ์— user์„ ์•ˆ ๋„ฃ์€ ๊ฒƒ๊ณผ ๊ฐ™๊ฒŒ ๋œ๋‹ค.

  • postType๋Š” ๋น„์Šทํ•œ๋ฐ ์กฐ๊ธˆ ๋‹ค๋ฅด๋‹ค. ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์€ postType์ธ๋ฐ ์‹ค์ œ DB ํ•„๋“œ๋ช…์€ type์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ทธ๋ƒฅ ์˜ˆ์‹œ์ฒ˜๋Ÿผ key๋ฅผ type์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋œ๋‹ค.

  • deleted๋„ postType๊ณผ ๋น„์Šทํ•˜๋‹ค. $exists, $ne ํ•„ํ„ฐ๋ง์„ ์‚ฌ์šฉํ•œ ์‘์šฉ ๋ฒ„์ „์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

Conclusion

๊ฐœ์ธ์ ์œผ๋กœ๋Š” ๋งค์šฐ ์œ ์šฉํ•œ๋ฐ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ฐพ๊ธฐ ์–ด๋ ต๋‹ค๊ณ  ๋Š๋‚€๋‹ค. ์ƒ๊น€์ƒˆ๊ฐ€ ์กฐ๊ธˆ ํŠน์ดํ•ด์„œ ๊ธฐ์–ตํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋ช‡ ๋ฒˆ ๋ณด๊ณ  ๋‚˜๋ฉด ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ฒŒ ๋˜์–ด์„œ ์ž์œ ๋กญ๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

Last updated