๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Daily/Today I Learned

210104_TIL (์žฌ๊ท€๋กœ TreeUI, StringfyJSONํ•จ์ˆ˜ ๊ตฌํ˜„ํ•˜๊ธฐ)

by joooing 2021. 1. 5.
๋ฐ˜์‘ํ˜•

๐ŸŽ ์˜ค๋Š˜ ํ•œ ๊ฒƒ


โœ”๏ธ JSON ๊ณต๋ถ€
JSON(JavaScript Object Notation)์€ '๋ฐ์ดํ„ฐ ๊ตํ™˜'์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ํ‘œํ˜„์‹์ด๋‹ค. ๋ฌธ๋ฒ•์€ Javascript ๊ฐ์ฒด, ์‹ค์ฒด๋Š” ๋ฌธ์ž์—ด์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๋‹ค. ์ „์— Local Storage์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์•Œ๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ์ค‘์š”ํ•œ ๊ฐœ๋…์ธ ๊ฒƒ ๊ฐ™์•„ ํ•จ๊ป˜ ๋ธ”๋กœ๊น… ํ•ด๋’€๋˜ ๋•์— ์ข€ ๋” ์‰ฝ๊ฒŒ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ๋‹ค. JSON.stringify()๋Š” ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ JSON ํ˜•ํƒœ๋กœ ์ง๋ ฌํ™”(serialization)ํ•ด์ฃผ๊ฒ ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ์ฆ‰ Javascript ๊ฐ์ฒด, ๋ฐฐ์—ด์„ JSON ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ฐ˜๋Œ€๋กœ JSON.parse()์€ JSON ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์›๋ž˜์˜ JavaScript ๊ฐ’์ด๋‚˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—ญ์ง๋ ฌํ™”๋ฅผ ํ•œ๋‹ค.

โœ”๏ธ StringifyJSON ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ
Javascript ๊ฐ์ฒด๋ฅผ JSON ํ˜•์‹์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ธ JSON.stringify()๋ฅผ ์ง์ ‘ ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ํ•ด๋ดค๋‹ค. ์ž…๋ ฅ๊ฐ’์œผ๋กœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ’๋“ค์€ number, string...๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ๊ฐ ๋งž๋Š” ํ˜•์‹์„ ์ง€์ •ํ•ด ์ถœ๋ ฅํ•˜๋„๋ก ํ•ด์ฃผ์—ˆ๋‹ค. ๊ฐ์ฒดํƒ€์ž…์„ ์ž…๋ ฅ ๋ฐ›์•˜์„ ๋•Œ๋Š” ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, ๊ทธ ์ด์œ ๋Š” ๊ฐ์ฒด์˜ ๊ฐ’์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š” ๊ฐ’๋“ค์ด ๋˜ ๋‹ค์‹œ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ๋‹ค. ์ด๋Ÿฐ์‹์œผ๋กœ Javascript์˜ ๊ฐ์ฒด๋ฅผ JSON ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋˜ JSON ๊ตฌ์กฐ๊ฐ€ ์–ด๋–ค์‹์œผ๋กœ ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€, ์™œ Tree ๊ตฌ์กฐ๋ผ๊ณ  ํ•˜๋Š” ๊ฑด์ง€๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

โœ”๏ธ Tree UI ๊ตฌํ˜„ํ•˜๊ธฐ
์•„๋ž˜์™€ ๊ฐ™์ด Tree๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•œ UI๋ฅผ ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค. ul, li, input(checkbox), span ํƒœ๊ทธ๋ฅผ ์ด์šฉํ–ˆ๋Š”๋ฐ, ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ul๊ณผ li์˜ ๊ด€๊ณ„๊ฐ€ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ–ˆ๋‹ค. ํ•˜์œ„ ๋ชฉ๋ก์ด ์—†์„ ๋•Œ๊นŒ์ง€ ํ˜„์žฌ ul์— ๋‹ค์Œ li๋ฅผ ๋ถ™์ด๋Š” ๋ฐฉ์‹์„ ์ƒ๊ฐํ•˜๊ณ  ์ตœ์ข…์ ์œผ๋กœ ์™„์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

๐ŸŽ ๊ธฐ์–ตํ•  ๊ฒƒ


โœ”๏ธ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (OOP), ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ (functional)
๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ : ๊ฐ์ฒด ์•ˆ์— ์ƒํƒœ(๋ฐ์ดํ„ฐ)๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ ์ดˆ์  (๐Ÿ”—์บก์Šํ™”, ์€๋‹‰ํ™”, Scoping)
ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ : ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ๋‚ด๋ณด๋‚ด ์—†์• ๋Š”๋ฐ ์ดˆ์  (๐Ÿ”—๋ชจ๋“ˆํ™”, ์ˆœ์ˆ˜ํ•จ์ˆ˜)

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋ญ”๊ฐ€๋ฅผ ์ €์žฅํ•˜๊ธฐ๋ณด๋‹ค๋Š” ์—ฐ์‚ฐํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋‚ด๋ณด๋‚ด๋Š” ๊ฒƒ(= ์—†์• ๋Š” ๊ฒƒ)์— ์ดˆ์ ์„ ๋‘๊ธฐ ๋•Œ๋ฌธ์—, ๋ณด๋‹ค ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

โœ”๏ธ input[type='checkbox'] ์ฒดํฌ์—ฌ๋ถ€ ํ™•์ธ
checkbox ์†์„ฑ ์ค‘ checked๋Š” checkbox์˜ check ์—ฌ๋ถ€๋ฅผ true, false ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๋Š” ์†์„ฑ์ด๋‹ค!

โœ”๏ธ Javascript, JSON ๊ทœ์น™์˜ ์ฐจ์ด์ 
Javascript : key(๋”ฐ์˜ดํ‘œ ์—†์–ด๋„๋จ), values(" ", ' ' ์‚ฌ์šฉ ๊ฐ€๋Šฅ), ํ‚ค์™€ ๊ฐ’ ์‚ฌ์ด, ํ‚ค-๊ฐ’ ์Œ ์‚ฌ์ด ๊ณต๋ฐฑ ํ—ˆ์šฉ O
JSON : key(๋ฐ˜๋“œ์‹œ " " ๋ถ™์ด๊ธฐ), values(๋ฐ˜๋“œ์‹œ " " ๋ถ™์ด๊ธฐ), ํ‚ค์™€ ๊ฐ’ ์‚ฌ์ด, ํ‚ค-๊ฐ’ ์Œ ์‚ฌ์ด์—๋Š” ๊ณต๋ฐฑ ํ—ˆ์šฉ X

โœ”๏ธ ์ˆœ์ˆ˜ ํ•จ์ˆ˜(Pure Function)
๋™์ผํ•œ ์ž…๋ ฅ๊ฐ’์„ ๋„ฃ์—ˆ์„ ๋•Œ, ํ•ญ์ƒ ๋™์ผํ•œ ๋ฆฌํ„ด๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ์™ธ๋ถ€์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š” ํ•จ์ˆ˜ (์•ˆ์ •์„ฑ, ์ƒ์‚ฐ์„ฑ ๋†’์—ฌ์คŒ)

 

๐ŸŽ ๋” ๊ณต๋ถ€ํ•  ๊ฒƒ


โœ”๏ธ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ vs ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ธ”๋กœ๊น…
โœ”๏ธ fetch API
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€