์ฝ๋ฐฑ ํจ์ ๐ : ์ฌ๊ธฐ์์ ๋์์ ๋ฐ์ผ์ธ์
์ฌ๊ฐํ๊ฒ ํผ๋ ์ค๋ฝ์ต๋๋ค. ๊ทธ๋์ ๊ทธ๊ฒ๋ค์ ์ผ๋ฐ ์์ด๋ก ๋ถํดํด ๋ด ์๋ค.
์ ์
G.O.A.T.MDN์ ๋ฐ๋ฅด๋ฉด ์ฝ๋ฐฑ ํจ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
"A function passed into another function as an argument, which is then invoked inside the outer function to complete some kind of routine or action."
๋ญ?
์๋ฅผ ๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
์ค์ ์ฌ๋ก
์คํ์ค์ด ๋ณต์กํด์ง๋ฉด์ ์ ๋ ๋ชจ๋ฅด๊ฒ ์ฝ๋ฐฑ ํจ์๋ฅผ ํธ์ถํ๊ณ ์์์ต๋๋ค. ์์งํ ์ ์๊ฒ๋ ์ด๊ฒ์ด ๊ทธ๊ฒ๋ค์ ๋ฐฐ์ฐ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค. ์คํ์ค์ ์ดํด๋ณด๊ณ ์ฌ๊ธฐ์์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ๋ด ์๋ค.
์ฒซ์งธ, ๋ด ๋ชจ๋ ํจ์๋ ๋ด JSON ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ด .then์์ ์ฝ์์ผ๋ก ํธ์ถ๋ฉ๋๋ค.
์ฒซ ๋ฒ์งธ ํจ์์ธ firstMovie๋ ๋ด ์น์ฌ์ดํธ์ ๊ฐ์ฒด๋ก ๋ฃ์ด์ผ ํ๋ ์ํ์ ๋ฐ์ดํฐ ๋ฐฐ์ด(movieData)์ ํธ์ถํฉ๋๋ค. ์ด๋ฌํ ๋ชจ๋ ๋ณ์๊ฐ ์ ์๋๊ณ ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ๋ณ๋์ ๋ฒํผ์ ๋ํด ํธ์ถ๋ฉ๋๋ค(๊ฑฑ์ ํ ํ์ ์์).
๋ ๋ฒ์งธ ํจ์์ธ createImage๋ ๊ฐ ์ํ์ ๊ด๋ จ๋ ์ด๋ฏธ์ง๋ฅผ ํ์ํ ๋ค์ ๋ด๋น๊ฒ์ด์ ๋ฐ๋ก ํ์ํ๋๋ก movieData์ ์ง์ํฉ๋๋ค.
ํ์ง๋ง ์ด๋ด, firstMovie๊ฐ ๋ ๋์์ด! ๊ทธ๊ฒ ์ด๋์?
createImage๋ firstMovie์ ๋์ ์์ด ์์ฒด์ ์ผ๋ก ๋๋ฌด ํฅ๋ฏธ๋ก์ด ์์ ์ ์ํํ์ง ์์ต๋๋ค. ๋จ์ง ์ด๋ฏธ์ง๋ฅผ ํ์ํ ๋ฟ์ ๋๋ค. ์ด์ ๊ธฐ๋ฅ์ธ firstMovie์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๋ ๋ง์ ์์ ์ ์ํํ ์ ์์ต๋๋ค!
createImage ๋ด๋ถ์์ firstMovie๋ฅผ ํธ์ถํจ์ผ๋ก์จ ์ฐ๋ฆฌ๋ createImage๋ฅผ ํตํด ์์ฑํ ์ด ์ ์ด๋ฏธ์ง์ ๋ชจ๋ ์ํ์ ์ธ๋ถ ์ ๋ณด๋ฅผ ํ์ํ๋ ๋ฐ firstMovie์ ๊ธฐ๋ฅ์ ํ์ฉํ๋๋ก ์๋ฆฌ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ํด๋ฆญ ํ ๋ฒ์ผ๋ก firstMovie๊ฐ ํ๋ ์ผ์ ์ ํํ ํ์ฑํํฉ๋๋ค. ์ํ์ ๋ํ ๋ชจ๋ JSON ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณตํ๊ณ ๊ด๋ จ ํ์ ์ด๋ฏธ์ง์ ํจ๊ป ํ์ํฉ๋๋ค!
fetch("http://localhost:3000/movies")
.then(res => res.json())
.then(movieData => {
firstMovie(movieData[0]);
createImage(movieData);
})
function firstMovie(movieData) {
title.textContent = movieData.title
description.textContent = movieData.description
year.textContent = movieData.release_year
pic.src = movieData.image
watchedBtn.addEventListener('click', (e) => {
movieData.watched = !movieData.watched;
watchedBtn.textContent = movieData.watched ? "Watched" : "Unwatched";
});
}
function createImage(movieData){
movieData.forEach((movie) => {
let img = document.createElement("img");
img.src = movie.image
insertImage.append(img)
img.addEventListener('click', (e) => {
firstMovie(movie)
});
})
}
๋น์ ์ ์ด๊ฒ์ ์ป์๋ค.
์ฝ๋ฐฑ ํจ์์ ๋ํด ์์ง๋ ํท๊ฐ๋ฆฌ์ญ๋๊น? ๊ฐ์ฅ ์ ์พํ๊ฒ ์์ธํ๋ ๊ธฐ๋ฅ์ ๊ฐ์ถ ์ ์ด ๋๋ผ์ด YouTube ๋น๋์ค๋ฅผ ์ฆ๊ธฐ์ญ์์ค. ์ฝ๋ฐฑ ํจ์๋ฅผ ์ฆ์ ์ดํดํ๊ณ ๋นต์ ๋จน๊ณ ์ถ์ด์ง ๊ฒ์ ๋๋ค.
*์ด๋ฏธ์ง ์ถ์ฒ: Made by ME!
*
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(์ฝ๋ฐฑ ํจ์ ๐ : ์ฌ๊ธฐ์์ ๋์์ ๋ฐ์ผ์ธ์), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/rachelmullen/callback-functions-here-to-help-2h04ํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค