์ „์ฒด ๊ธ€

์„ฑ์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ธ€์„ ์ž‘์„ฑํ•˜๋ ค๊ณ  ๋…ธ๋ ฅ์ค‘ ์ž…๋‹ˆ๋‹ค
๊ทธ๋™์•ˆ ์žก์ƒ๊ฐ์ด ๋„ˆ๋ฌด ๋งŽ์•˜๋‹ค. ํ•œ ๋ฒˆ ์ •ํ–ˆ์œผ๋ฉด ์šฐ์งํ•˜๊ฒŒ ๋‚˜์•„๊ฐ€์•ผ ํ•˜๋Š”๋ฐ ๋‚˜๋Š” ๋ญ ์ด๋ฆฌ ์žฌ๋Š”๊ฒŒ ๋งŽ์„๊นŒ.. ์šฐ์œ ๋ถ€๋‹จํ•œ ์„ฑ๊ฒฉ์„ ๊ณ ์น˜๊ณ  ์‹ถ์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ์‰ฝ์ง„ ์•Š๋‹ค. ๋‚ด ์•ˆ์˜ ๋ถˆ์•ˆ์„ ๋‹ค์Šค๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›Œ์•ผ ๊ฒ ๋‹ค. ๋ง๋กœํ•˜๋ฉด ๋ญ˜ ๋ชปํ• ๊นŒ.. ๋‹น์žฅ ์‹คํ–‰์— ์˜ฎ๊ฒจ์•ผ ๊ฒ ๋‹ค. ๋งค์ผ ์•„์นจ๋งˆ๋‹ค ์ผ์–ด๋‚˜์„œ ๊ณ„ํš์„ ์„ธ์šฐ๋ฉด์„œ ๋‚ด๊ฐ€ ๊ฐœ๋ฐœ์ž์˜ ๊ธธ์„ ์™œ ํƒํ–ˆ๋Š”์ง€ ๋‹ค์‹œํ•œ๋ฒˆ ์ƒ๊ธฐํ•˜๊ณ  ๋งˆ์Œ์„ ๋‹ค ์žก์•„์•ผ ๊ฒ ๋‹ค. ํ™•์‹คํ•œ ๊ฑด ๋‚˜๋Š” ๋ฌด์—‡๋ณด๋‹ค ์ฝ”๋”ฉ์„ ์ข‹์•„ํ•œ๋‹ค. ์„ฑ์žฅ์„ ์ €ํ•ดํ•˜๋Š” ์š”์†Œ๋Š” ๊ณผ๊ฐํžˆ ๋ฒ„๋ฆฌ๊ณ  ์„ฑ์žฅ์˜ ๊ธธ์„ ๋„๋ชจํ•˜๋Š” ๊ฒƒ์ด ํ˜„๋ช…ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์‹œ์ž‘๋œ 3ํ•™๋…„ 2ํ•™๊ธฐ ๊ณผ๋ชฉ ์ž์ฒด๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ค์šด ๊ฑด ์—†์ง€๋งŒ ๋˜ ์‰ฌ์šด ๊ฑด ์—†๋‹ค. ๋ณดํ†ต ํ•œ ๋ฒˆ ๋“ค์–ด์„œ๋Š” ์ดํ•ด๋Š” ๋ชปํ•˜๊ณ  ๋‘ ์„ธ๋ฒˆ์€ ๋“ค์–ด์•ผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค ใ…‹ใ…‹ใ…‹ใ…‹ ์ด๊ฑด ๋ญ ๋‚˜๋งŒ ๊ทธ๋Ÿฐ๊ฑด ์•„๋‹ˆ๋‹ˆ๊นŒ ๋„˜๊ธฐ๊ณ .. Next.js ,..
ยท react
useReducer๋ž€ ๋ฌด์—‡์ผ๊นŒ? useReducer๋Š” ๋ฆฌ์•กํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ํ›…์ž…๋‹ˆ๋‹ค. useState์™€๋Š” ๋‹ค๋ฅธ ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์žฅ์ ์ธ๋ฐ์š”. ์ด ํ›…์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ ์—…๋ฐ์ดํŠธ ๋กœ์ง์„ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ถ„๋ฆฌ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š”๊ฒŒ ์žฅ์ ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํŒŒ์ผ์— ์ž‘์„ฑ ํ›„ ๋ถˆ๋Ÿฌ์™€์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. useReducer์˜ ๊ตฌ์„ฑ์š”์†Œ const reducer = (state,action) => { } const initialState = { } function App(){ const [state,dispatchFn] = useReducer(reducer,initialState); //์ดํ•˜์ƒ๋žต.. } useReducer๋Š” reducer ํ•จ์ˆ˜์™€ ์ดˆ๊ธฐ๊ฐ’์ธ initialState๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ..
๋ฏธ์‚ฌ์ผ ํ”ผํ•˜๊ธฐ ๊ฒŒ์ž„์—์„œ ์ „ํˆฌ๊ธฐ Sprite์™€ ๋ฏธ์‚ฌ์ผ Sprite๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค ํ•œ๊ฒฐ ๊ฒŒ์ž„ ๋‹ค์›Œ์กŒ๋‹ค..ใ…Žใ…Ž ๋‹ค์Œ์œผ๋กœ๋Š” ๋‚ด ํ”„๋กœ์ ํŠธ์˜ ํ•˜์ด๋ผ์ดํŠธ์ธ ์ง€๋Šฅ์ ์ธ(?) ๋ฏธ์‚ฌ์ผ์„ ๊ตฌํ˜„ํ•ด ๋ณผ ๊ฒƒ์ด๋‹ค. ๋งŽ์€ ์–ด๋ ค์›€์ด ์žˆ๊ฒ ์ง€๋งŒ ๋งŽ์€ ๋ฐฐ์›€๋„ ์žˆ์„ ๊ฒƒ์ด๋‹ค!
์ „ํˆฌ๊ธฐ๊ฐ€ ์ง€๋‚˜๊ฐ€๋Š” ํšจ๊ณผ๋ฅผ ๋” ์ž˜ ์ฃผ๊ธฐ ์œ„ํ•ด์„œ emission๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์—ˆ๋‹ค. ์ง€๋‚œ ๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์–ด๋ ค์šด ๋ถ€๋ถ„์ด ์žˆ์—ˆ๋Š”๋ฐ ์ด๋ฒˆ์—๋Š” ํŠน๋ณ„ํ•œ ์–ด๋ ค์›€ ์—†์ด ์ž˜ ์ง„ํ–‰ํ–ˆ๋‹ค.
1. ์–ด.. ์ด๊ฑฐ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜์ง€โ“ ๋ฏธ์‚ฌ์ผ ํ”ผํ•˜๊ธฐ ๊ฒŒ์ž„์„ ๋งŒ๋“ค๋˜ ์ค‘์ด์—ˆ๋‹ค. ๊ตฌ๋ฆ„์„ ๋งŒ๋“ค์–ด์„œ Canvas๋ฅผ ์ด์šฉํ•˜์—ฌ ํ™”๋ฉด์— ๊ทธ๋ฆฌ๋Š” ๊ฒƒ์€ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์•„์ง์€ ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ์ง€ ์•Š๊ณ  ๋นจ๊ฐ„์ƒ‰ ์‚ฌ๊ฐํ˜•์œผ๋กœ ํ‘œํ˜„ํ•˜์˜€๋Š”๋ฐ ์ €๊ฒŒ ๋ฐ”๋กœ ์ „ํˆฌ๊ธฐ์ด๋‹ค. ์ด์ œ ์ด๊ฑธ ์›€์ง์—ฌ์•ผ ํ•˜๋Š”๋ฐ ์ด ๊ฐ์ฒด์˜ ์ ˆ๋Œ€์ ์ธ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋„ˆ๋ฌด ํ™”๋ฉด์ด ์ •์ ์œผ๋กœ ๋ณด์ผ ๊ฒƒ ๊ฐ™์•˜๋‹ค. ๋งŒ์•ฝ player๋Š” ๊ทธ ์ž๋ฆฌ์— ์žˆ์ง€๋งŒ ํšŒ์ „์„ ํ•˜๊ณ  ๊ตฌ๋ฆ„์ด ์›€์ง์ธ๋‹ค๋ฉด player๋Š” ์ œ์•ฝ์—†์ด ์–ด๋””๋กœ๋“  ๋ฌดํ•œํžˆ ์›€์ง์ด๋Š” ๋“ฏํ•œ ํšจ๊ณผ๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฑธ ๋Œ€์ฒด ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š” ์ง€๊ฐ€ ๋ฌธ์ œ์˜€๋‹ค. 2. ๋‚ด๊ฐ€ ์ƒ๊ฐํ–ˆ๋˜ ๋ฌด์‹ํ•œ ๋ฐฉ๋ฒ• ์ผ๋‹จ ๋ช…ํ™•ํ•œ ๊ฒƒ์€ Player๋Š” ํšŒ์ „์„ ํ•ด์•ผ ๋œ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๊ณ (1), ๊ตฌ๋ฆ„์€ ๊ทธ ๋ฐฉํ–ฅ์— ๋งž์ถฐ์„œ ์›€์ง์—ฌ์•ผ ๋œ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค(..
๋ฏธ์‚ฌ์ผ ํ”ผํ•˜๊ธฐ ๊ฒŒ์ž„์„ ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค. ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ์—ฌ๋Ÿฌ ์–ด๋ ค์›€๋“ค์ด ๋งŽ์„ ๊ฒƒ์ด๋‹ค. ์–ด๋ ค์›€์„ ํ•ด๊ฒฐํ•˜๊ณ  ๋‚˜๋ฉด ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์„ ๋ธ”๋กœ๊ทธ์— ์—…๋กœ๋“œ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๋ฏธ์‚ฌ์ผ ํ”ผํ•˜๊ธฐ๋Š” ๋‚ด๊ฐ€ ๊ตฐ๋Œ€์— ์žˆ์„ ๋•Œ ์„œ์šธ๋Œ€ ์ปด๊ณต์ด์—ˆ๋˜ ์‚ฌ๋žŒ์ด ๊ตฐ๋Œ€์—์„œ ์ž ๊น์˜ ์‹œ๊ฐ„๋™์•ˆ ๊ตฌํ˜„ํ–ˆ์—ˆ๋‹ค. ๋‚˜๋„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ด ์ •๋„์˜ ์™„์„ฑ๋„ ์žˆ๋Š” ๊ฒŒ์ž„์„ ๋งŒ๋“œ๋Š” ๊ฒŒ ๋ชฉํ‘œ์˜€๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”๋กœ ๋„์ „ํ•˜๊ณ ์ž ํ•œ๋‹ค. ์ธํ„ฐ๋„ท์œผ๋กœ ์„œ์น˜๋ฅผ ํ•ด๋ณด๋‹ˆ ์ด๋ฏธ ๊ตฌํ˜„๋œ ๊ฒŒ ์žˆ๊ธดํ•ด์„œ ์ฐธ๊ณ ํ•˜๋ฉด์„œ ๋งŒ๋“ค๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. https://www.marketjs.com/item/evade-the-missile Evade The Missile - HTML5 Game For Licensing - MarketJS Preamble: This Agreement, signed on October 13, 2023 [h..
ยท react
useReducer ์šฐ๋ฆฌ๋Š” react์—์„œ useState๋กœ ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ  ์ด๋Š” ๊ฝค ๊ฐ„๋‹จํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์กฐ๊ธˆ์˜ ๋ณต์žกํ•œ ์ƒํƒœ๋ฅผ ๋‹ค๋ฃจ์–ด์•ผ ํ•œ๋‹ค๋ฉด useReducer๋ฅผ ๊ณ ๋ คํ•ด๋ณด์ž ๋ณต์žกํ•œ ์ƒํƒœ์˜ ๊ฒฝ์šฐ useState๋งŒ์„ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋ ค์›Œ์ง€๊ณ  ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฌธ์ œ๊ฐ€ ๋ ๋งŒํ•œ ๋ถ€๋ถ„ ๋‹ค๋ฅธ state๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ state๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค. -> useReducer๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ํ•˜๋‚˜์˜ state, ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ณด๊ด€ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋” ๋ณต์žกํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ์˜ˆ์‹œ์ฝ”๋“œ const [state, dispatchFn] = useReducer(reducerFn, initialState, initFn); useReducer ์‚ฌ์šฉํ•ด๋ณด๊ธฐ const [entered..
์ •์‹์œผ๋กœ merge๋œ ์ ์€ ์—†๋‹ค (์•ž์œผ๋กœ ์žˆ์„ ๊ฒƒ์ด๋‹ค!) ํ•˜์ง€๋งŒ, contributor๋กœ ๋‚ด ํ”„๋กœํ•„์ด ์˜ฌ๋ผ๊ฐ€ ์žˆ๊ธธ๋ž˜ ์–ด๋–ค ๊ธฐ์—ฌ๋ฅผ ํ•˜์˜€๋Š”์ง€ ๊ณต์œ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. - react-icons ์›น์‚ฌ์ดํŠธ์— ๊ฒ€์ƒ‰ ์ฐฝ focus shorcut ์„ ๊ตฌํ˜„ํ–ˆ์—ˆ๋‹ค. ์•„์‰ฝ๊ฒŒ๋„ merge๋  ๊ธฐ๋ฏธ๊ฐ€ ๋ณด์ด์ง€ ์•Š๊ณ , ๋‹ค๋ฅธ ๊ธฐ์—ฌ๋ฅผ ํ•˜๊ณ  ์‹ถ์–ด closeํ–ˆ๋‹ค. tabler icon ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ˜์˜ํ•˜๋Š” ๊ธฐ์—ฌ๋ฅผ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด ๋ฐ–์—๋„ ์•„์ด์ฝ˜ ์ถ”๊ฐ€, Readme.md ์—…๋ฐ์ดํŠธ ์ž๋™ํ™”.. ๋“ฑ์„ ํ•  ์˜ˆ์ •์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋งŒ์˜ ์•„์ด์ฝ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด ํ™๋ณดํ•œ ์ดํ›„ react-icons์— ํฌํ•จ๋˜๊ณ  ์‹ถ๋‹ค.
๊น€ํƒœ์ง„
My Dev History๐Ÿ’ป