
ํด๋ฆฐ ์ฝ๋ ์ฝ์ผ๋ฉฐ ๋ผ๋ง์๋ ๋ด์ฉ ์ค 3๊ฐ์ง ์ง๋ฆฌ ๋ฅผ ๊ณ ๋ฅด๊ณ , ์ง๋ฆฌ๋ฅผ ๋ฐ๋ฅด๋ ์์ ์ด 3๊ฐ์ง๋ฅผ ๋ง๋ค๊ธฐ.
1. ์ง๋ฆฌ 1. try/catch ๋ธ๋ก์ ๋ณ๋ ํจ์๋ก ๋ฝ์๋ด๋ ํธ์ด ์ข๋ค. (p.58)
1.1. ๋ฌด์์ ๊ณ ์ณค๋๊ฐ?
๐ Before
<javascript />
const saveAsImageHandler = async () => {
const target = document.getElementById('content');
if (!target) return alert('๊ฒฐ๊ณผ ์ ์ฅ์ ์คํจํ์ต๋๋ค.');
alert(
'์๋ก์ด ์ฐฝ์ด ์ด๋ฆฌ๋ฉด\nPC์์๋ ์ฐํด๋ฆญ -> ์ด๋ฏธ์ง ์ ์ฅํ๊ธฐ\n๋ชจ๋ฐ์ผ์ ์ด๋ฏธ์ง๋ฅผ ๊พน ๋๋ฌ์ฃผ์ธ์!\n*์๋ก์ด ์ฐฝ์ด ์ ์ด๋ฆฐ๋ค๋ฉด ํ์
์ ํด์ ํด์ฃผ์ธ์*'
);
try {
const canvas = await html2canvas(target);
canvas.toBlob((blob) => {
if (blob) {
const uri = URL.createObjectURL(blob);
window.open(uri);
}
});
} catch (error) {
alert('๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค.');
}
};
ํ์ด์ง์ ํด๋น ์์ญ์ ์บก์ฒํด์ ์ด๋ฏธ์ง๋ก ์ ์ฅํ๊ฒ ํ๋ ๋ถ๋ถ์ด๋ค.
๋ณด๋ค์ํผ ํ ํจ์ ์์์ ์ ์ ๋์๊ณผ ์ค๋ฅ ์ฒ๋ฆฌ ๋์์ ๋ค์์ผ๋ฉด์ ์ฌ๋ฌ ๋์์ ์ํํ๊ณ ์๋ค.
์ด๋ฌํ ํจ์๋ ์ฝ๋ ๊ตฌ์กฐ์ ํผ๋์ ์ผ์ผํฌ ์ ์๋ค.
1.2. ์ด๋ป๊ฒ ๊ณ ์ณค๋๊ฐ?
๐ After
<javascript />
const saveImage = async () => {
const target = document.getElementById('content');
if (target) {
alert(
'์๋ก์ด ์ฐฝ์ด ์ด๋ฆฌ๋ฉด\nPC์์๋ ์ฐํด๋ฆญ -> ์ด๋ฏธ์ง ์ ์ฅํ๊ธฐ\n๋ชจ๋ฐ์ผ์ ์ด๋ฏธ์ง๋ฅผ ๊พน ๋๋ฌ์ฃผ์ธ์!\n*์๋ก์ด ์ฐฝ์ด ์ ์ด๋ฆฐ๋ค๋ฉด ํ์
์ ํด์ ํด์ฃผ์ธ์*'
);
const canvas = await html2canvas(target);
canvas.toBlob((blob) => {
if (blob) {
const uri = URL.createObjectURL(blob);
window.open(uri);
}
});
}
};
const saveImageError = () => {
return alert('๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค.');
};
const onClick = () => {
try {
saveImage();
} catch (error) {
saveImageError();
}
};
๋ฒํผ์ ํด๋ฆญ ํ์ ๋ ๋์ํ๋ ํจ์ onClick ํจ์์๋ค๊ฐ try/catch๋ฌธ์ ์์ฑํ๋ค.
try/catch๋ฌธ ์์๋ ์ ์ ๋์์ ์ฒ๋ฆฌํ๋ ํจ์ saveImage๋ฅผ ์์ฑํด์ ํธ์ถํ๊ฒ ํ๊ณ ,
์ค๋ฅ ๋์ ์ฒ๋ฆฌ๋ฅผ ํ๋ ํจ์ saveImageError ํจ์๋ฅผ ์์ฑํด์ ํธ์ถํ๊ฒ ํ๋ค.
์ด๋ ๊ฒ ๋ณ๋ ํจ์๋ก ๋ฝ์๋์ผ๋ก์จ ๊ตฌ์กฐ๊ฐ ํ๋์ ๋ค์ด์จ๋ค.
2. ์ง๋ฆฌ 2. ํจ์๋ 'ํ ๊ฐ์ง' ์์ ๋ง ํด์ผ ํ๋ค.(p.59)
2.1. ๋ฌด์์ ๊ณ ์ณค๋๊ฐ?
๐ Before
<javascript />
function increaseAudioTimer() {
time++;
let mins = Math.floor((time % 3600) / 60);
let secs = (time % 3600) % 60;
audioTime.innerHTML = `${mins < 10 ? `0${mins}` : mins}:${secs < 10 ? `0${secs}` : secs}`;
}
function resetAudioTimer() {
clearInterval(timerInterval);
time = START_TIME;
audioTime.innerHTML = '00:00';
}
์ค๋์ค์ ์๊ฐ์ ์ฆ๊ฐ์ํค๊ณ ์ด๊ธฐํ ํ๋ ์ด๋ ๊ฐ์ ํจ์๊ฐ ์๋ค.
๊ฐ ํจ์๋ค์์ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ค๋ณต๋๋ ๊ธฐ๋ฅ์ ํ๊ณ ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
increaseAudioTimer ํจ์ ์์์๋ ์๊ฐ์ ์ฆ๊ฐ์ํค๊ณ ๋ถ, ์ด๋ฅผ ๊ณ์ฐํ๋ ์๊ณผ ์๊ฐ์ ํ์ํ๋ ๋ถ๋ถ์ด ์๋ค.
resetAudioTimer ํจ์๋ ๋ณด๋ฉด ์์์ ์๊ฐ์ ํ์ํ๋ ์ค๋ณต๋๋ ๋ถ๋ถ์ ๋ณผ ์ ์๋ค.
2.2. ์ด๋ป๊ฒ ๊ณ ์ณค๋๊ฐ?
๐ After
<javascript />
function resetAudioTimer() {
clearInterval(timerInterval);
time = START_TIME;
displayAudioTime(0, 0);
}
function displayAudioTime(mins, secs) {
audioTime.innerHTML = `${mins < 10 ? `0${mins}` : mins}:${
secs < 10 ? `0${secs}` : secs
}`;
}
function increaseAudioTimer() {
time++;
const { mins, secs } = getPlayTime();
displayAudioTime(mins, secs);
}
function getPlayTime() {
const mins = Math.floor((time % 3600) / 60);
const secs = (time % 3600) % 60;
return { mins, secs };
}
- ์๊ฐ์ ๊ณ์ฐํ๋ ๊ธฐ๋ฅ์ getPlayTime ํจ์๋ก ๋ถ๋ฆฌํ๋ค.
- ์ค๋ณต๋๋ ์๊ฐ์ ํ์ํ๋ ๊ธฐ๋ฅ์ displayAudioTime ํจ์๋ก ๋ถ๋ฆฌํ๋ค.
๊ฐ๊ฐ ํจ์๋ก ๋ถ๋ฆฌํจ์ผ๋ก์ ์ด๋ค ํจ์๊ฐ ์ด๋ค ๊ธฐ๋ฅ์ ํ๋์ง ๋ช ํํ๊ฒ ์ ์ ์๊ณ ๋์ค์ ๋ฆฌํฉํ ๋ง์ ํ๊ฒ ๋์ด๋ ํด๋น ํจ์๋ง ์์ ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์ด์ ์ด ์๊ฒผ๋ค.
3. ์ง๋ฆฌ 3. ์ฝ๋๋ง์ด ์ ํํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ์ ์ผํ ์ถ์ฒ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ฐ๋ฆฌ๋ ์ฃผ์์ ๊ฐ๋ฅํ ์ค์ด๋๋ก ๊พธ์คํ ๋ ธ๋ ฅํด์ผ ํ๋ค. (p.69)
3.1. ๋ฌด์์ ๊ณ ์ณค๋๊ฐ?
๐ Before
<javascript />
// ๋ฌธ์๋ฅผ ํฌํจํ ์ซ์๋ก๋ ๋ฌธ์๋ค์ ์ ์๋ก ๋ฐ๊พธ๋ ํจ์
function stringNumberToInt(stringNumber) {
return parseInt(stringNumber.replace(/,/g, ''));
}
// ์ฒ ์๋ฆฌ ์ฝค๋ง ํจ์
function numberFormat(inputNumber) {
return inputNumber.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
ํจ์๋ฅผ ์ค๋ช ํ๋ ์ฃผ์์ด ์ถ๊ฐ ๋์ด์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ฃผ์์ ์ต๋ํ ์ค์ด๊ณ ํจ์ ์์ฒด๋ก๋ง ์ค๋ช ์ด ๊ฐ๋ฅํ๊ฒ ๋ ๋ณ๊ฒฝ์ ํด์ฃผ์ด์ผ ํ๋ค.
3.2. ์ด๋ป๊ฒ ๊ณ ์ณค๋๊ฐ?
๐ After
<javascript />
function stringNumberToInt(stringNumber) {
return parseInt(stringNumber.replace(/,/g, ''));
}
function addCommatoThousandDigits(inputNumber) {
return inputNumber.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
์ฒซ๋ฒ์งธ ํจ์ stringNumberToInt๋ ํจ์๋ช ๋ง ๋ด๋ ์ด๋ค ๊ธฐ๋ฅ์ ํ๋ ํจ์์ธ์ง ๋ช ํํ๊ฒ ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋ถํ์ํ ์ฃผ์์ ์ ๊ฑฐํด์คฌ๋ค.
๋ ๋ฒ์งธ ํจ์ addComaToThousandDigits ํจ์๋ ์ฒ ์๋ฆฌ ์ซ์์ ์ฝค๋ง๋ฅผ ์ถ๊ฐํด ์ฃผ๋ ๊ธฐ๋ฅ์ ํ๋ ํจ์๋ค.
๋ณ๊ฒฝ ์ ์๋ ํจ์ numberFormat์ด๋ผ๋ ๋ชจํธํ ํจ์๋ช ์ด์๊ธฐ ๋๋ฌธ์ ์ฃผ์์ด ํ์ํ๊ฒ ์ง๋ง,
๋ณ๊ฒฝ ํ์๋ ์ฃผ์์ด ์์ด๋ ์ด๋ค ๊ธฐ๋ฅ์ ํ๋์ง ๋ฐ๋ก ์ ์ ์๊ฒ๋์๋ค.