-
[JavaScript/VanillaJS] ์กฐ์ฉํ ์๋(silence alarm) ์น ์ฑ ๋ง๋ค๊ธฐ - ๋ฒ์ธํธ(feat. ES6)javascript 2019. 4. 28. 23:18
์๋ ํ์ธ์, Jerry์ ๋๋ค!
์กฐ์ฉํ ์๋(silence alarm) ์น ์ฑ ๋ง๋ค๊ธฐ๊ฐ ๋๋ฌ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์ ์น ์ฑ ๋ง๋ค๊ธฐ๋ผ๋ ์ ๋ชฉ์ผ๋ก ๋ฒ์ธ๋ฅผ ์ ๋? 5ํธ ํฌ์คํ ์ ๋ฐํํ ํ ์์ค๋ฅผ ์ฒ์ฒํ ๋ณด๋ ๋ง์์ ๋ค์ง ์๋ ๋ถ๋ถ์ด ์์ด์ ์ฝ๋๋ฅผ ์์ ์ ํ๊ณ , ์์ ํ ๋ถ๋ถ์ ๊ณต์ ํ๊ณ ์ถ์ด ์ด๋ ๊ฒ ๋ฒ์ธ ํธ์ผ๋ก ํฌ์คํ ์ ์์ฑํ์ต๋๋ค.
์ด๋ ๋ถ๋ถ์ธ์ง ์ฝ๋๋ฅผ ๋จผ์ ๋ณด๊ณ ์ฝ๋ ๋ธ๋ก ์ดํ์ ์ค๋ช ์ ์ ๊ฒ ์ต๋๋ค.
alarm.js
const alarmContainer = document.querySelector('.js-alarm'); const currentTime = alarmContainer.querySelector('h1'); const setTime = alarmContainer.querySelector('input'); // ์ถ๊ฐํ ์ฝ๋ function currentDate(){ const date = new Date(); const hours = date.getHours(); const minutes = date.getMinutes(); const seconds = date.getSeconds(); /* ๊ฐ์ฒด๋ฅผ ๋ฆฌํด */ return {hours, minutes, seconds}; } function getAlarm(){ const setValue = setTime.value; /* ES6 ๋์คํธ๋ญ์ฒ๋ง(destructuring, ๊ตฌ์กฐ ๋ถํด ํ ๋น) */ const {hours, minutes, seconds} = currentDate(); const current = `${hours < 10 ? `0${hours}` : hours}:${minutes < 10 ? `0${minutes}` : minutes}`; if(current === setValue){ window.open('popup.html'); clearInterval(alarm); } } function getTime(){ /* ES6 ๋์คํธ๋ญ์ฒ๋ง(destructuring, ๊ตฌ์กฐ ๋ถํด ํ ๋น) */ const {hours, minutes, seconds} = currentDate(); currentTime.innerText = `${hours < 10 ? `0${hours}` : hours}:${minutes < 10 ? `0${minutes}` : minutes}:${seconds < 10 ? `0${seconds}` : seconds}`; } function init(){ getTime(); setInterval(getTime, 1000); alarm = setInterval(getAlarm, 1000); } init();
์ฐ๋ฆฌ์ ๋จธ๋ฆฟ์์ ์๋ ๊ธฐ์กด ์์ค์ ๋น๊ตํด์ผ ํฉ๋๋ค. (์?)
๊ฐ ํจ์๋ง๋ค Date ๊ฐ์ฒด๋ฅผ ์ธ์คํด์ค ํ์ฌ date.getHours, date.getMinutes ๋ฑ ์, ๋ถ, ์ด๋ฅผ ๋ถ๋ฌ์์์ฃ . ์ค์ํ ๊ฑด ๊ฐ ํจ์๋ง๋ค ๋๊ฐ์ ์ฝ๋๊ฐ ์์๋ค๋ ๊ฒ๋๋ค. ๊ฐ๋ฐ์๋ ์ค๋ณต์ ์ต์ํํ๋ ๊ฒ ์๋ฌด์ด๋ฉฐ, ๋ฏธ๋์ด๋ผ๊ณ ๋ฐฐ์ ์ต๋๋ค.
์ด๋ป๊ฒ ์ค๋ณต์ ์์ด๋?
function์์ return ํ ๋ ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ๋ ๊ฒ๋๋ค. ์ฌ์ค ES6์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ณ ์ ํ๋ค๋ฉด class๋ก ๋ง๋ค ์ ์์ต๋๋ค. ํ์ง๋ง setInterval( )๋ก ๋งค ์ด๋ง๋ค class๋ฅผ ํธ์ถํ์ฌ ์ธ์คํด์คํ ํ๋ค๋ ๊ฒ ๊บผ๋ฆผ์นํ๊ธฐ์ function์์ ๊ฐ์ฒด๋ฅผ return ํ์์ต๋๋ค.
์ด return ๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ๋ ES6 ๊ธฐ๋ฅ์ ํต์ฌ์ธ ๋์คํธ๋ญ์ฒ๋ง(!), ๋ฐ๋ก ๊ตฌ์กฐ ๋ถํด ํ ๋น์ ์ฌ์ฉํฉ๋๋ค. ๋จ, ์คํด์ ์์ง๊ฐ ์๊ธฐ์ ์กฐ๊ธ ๋ ์ ๋ฆฌํ๊ฒ ์ต๋๋ค. ์ ํํ๋ง ๊ตฌ์กฐ ๋ถํด ํ ๋น์ ์๋๋๋ค. ๊ตฌ์กฐ ๋ถํด ํ ๋น์๋ ๋ค์ํ ํํ๊ฐ ์์ต๋๋ค.
spread ์ฐ์ฐ์, rest ์ฐ์ฐ์๋ ์ฌ์ฉํ๊ณ , ๊ฐ์ฒด, ๋ฐฐ์ด ๋ฑ ๋ค์ํ ํํ๋ก ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ๊ด๋ จ ์์ ์ด๋ ์๋ฃ๊ฐ ์๋ค๋ฉด ๊ผผ๊ผผํ ์ฝ์ด๋ณด์ ์ผ ํ๊ณ , ๋ธ๋ก๊ทธ๋ฅผ ์์ ๋ค๋ฉด ์์ฃผ ๋ค์ด๊ฐ ํ์ต ๋ฐ ์์ง๋ฅผ ํ์ ์ผ ํ๊ณ , ๋ฐฐ์ธ ๋งค๊ฐ์ฒด๊ฐ ์๋ค๋ฉด MDN(๊ตฌ์กฐ ๋ถํด ํ ๋น - MDN)์ ์ถ์ฒ๋๋ฆฝ๋๋ค. (์ ๋ MDN ์์ฐฌ๋ก ์์ด๋ฉฐ, vanilla ์ ๋ด์์ ๋๋ค :D)
์์ ์์ค๋ฅผ ์ผ๋ถ ๋ฐ์ทํ์ฌ ๊ฐ๋ตํ ์ค๋ช ๋๋ฆฌ๊ฒ ์ต๋๋ค. ์๋ ์์ค๋ฅผ ์ ์ ๋ณด์ค๊น์?
function currentDate(){ ...(์๋ต) return {hours, minutes, seconds}; } // ๊ฐ ํจ์ ์์ ์ ์ธ ๋ฐ ์ด๊ธฐํ๋ Local Variable์ ๋๋ค.(ํจ์ scope์์ ์๋ด๋๋ฆฝ๋๋ค.) // ํธ์์ ํจ์๋ค์ ์ ์ง ์์์ต๋๋ค. const {hours, minutes, seconds} = currentDate();
currentDate()๋ {hours, minutes, seconds}๋ฅผ return ํ๊ณ ์๊ธฐ์ ์๋ ์์ค๊ณผ ๊ฐ๋ค๊ณ ์๊ฐํ์๋ฉด ๋๊ณ ,
const {hours, minutes, seconds} = {hours, minutes, seconds};
return ๋ ๊ฐ์ฒด๋ ๋ณธ์ธ ์๋ฆฌ์ ์ผ์นํ ํค์ ๋์ ๋ฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ์๋ ์์ค์ ๊ฐ๋ค๊ณ ์๊ฐํ์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
const hours = hours, minutes = minutes, seconds = seconds;
ํน์๋ ์ ๊ฐ ์ค๋ช ํ ๊ฒ์ ์๋ชป๋ ๋ถ๋ถ์ด ์๋ค๋ฉด ๋๊ธ๋ก ๊ฐ์ฐจ์์ด ์ง์ ํด์ฃผ์ธ์.
ํ๋ฆฐ ๋ถ๋ถ์ ๋น ๋ฅด๊ฒ ํ์ตํ๊ณ ๊ธ ์์ ํ์ฌ ์๋ชป๋ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ์ผ์ด ์๋๋ก ์ฃผ์ํ๊ฒ ์ต๋๋ค.
์ด๋ ๊ฒ ES6๋ฅผ ๋ ๊ฐ๋จํ๊ฒ ๋ง์ ๋ณด์์ต๋๋ค :)
์์ผ๋ก์ ๊ณํ์ ์กฐ๊ธ ์ ์ด๋๊ณ ์ถ์ด์ ๋ช ์ ์ ์ต๋๋ค.
Vanilla JS๋ก ๊ฐ๋จํ ์น ์ฑ์ ํ๋ ๋ ๋ง๋ค ๊ณํ์ด ์๊ธด ํ๋, ๊ทธ ์ ์ ES6 ํ์ต์ ์ฐ์ ์ผ๋ก ํ์ฌ, ์ถํ ๊ฐ๋จํ ์น ์ฑ์ ๋ง๋ค ๋ ํ์ตํ ES6๋ฅผ ๊ฝค ์ ์ฉํ์ฌ ์ ์ ํฌ์คํ ์ ๋ด์ฃผ์๋ ๋ถ๋ค์๊ฒ ์ฌ๋ฐ๊ณ ์์ฐฌ ๋ด์ฉ์ ๋๋ฆฌ๊ณ ์ถ์ต๋๋ค.
๊ทธ๋ผ ๋น๋ถ๊ฐ์ vanilla js ์นดํ ๊ณ ๋ฆฌ๊ฐ ์๋ ES6 ์นดํ ๊ณ ๋ฆฌ์์ ๋ต๊ฒ ์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค! XD
'javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Javascript/ES6] try - catch ์ switch - case (0) 2019.05.04 [JavaScript/ES6] let ๊ณผ this ํค์๋ (0) 2019.04.29 [JavaScript/VanillaJS] ์กฐ์ฉํ ์๋(silence alarm) ์น ์ฑ ๋ง๋ค๊ธฐ - 5 (2) 2019.04.27 [JavaScript/VanillaJS] ์กฐ์ฉํ ์๋(silence alarm) ์น ์ฑ ๋ง๋ค๊ธฐ - 4 (2) 2019.04.26 [JavaScript/VanillaJS] ์กฐ์ฉํ ์๋(silence alarm) ์น ์ฑ ๋ง๋ค๊ธฐ - 3 (0) 2019.04.24