ํด๋์ค vs ๊ฐ์ฒด ์ฝ๋ ๋น๊ต
์ธ๋ถ์์ beom.prey๋ก ์ ๊ทผ ๋ถ ๊ฐ๋ฅํ์ง๋ง, ๋ด๋ถ์์๋ prey๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค
static sleep(name) {
console.log(name + '์ด ์ ์ ์๋ค.');
}
static ํค์๋๊ฐ ๋ถ์ ๋ฉ์๋๋ ํด๋์ค ์์ฒด์ ์ํ๋ ์ ์ ๋ฉ์๋์
๋๋ค. => ๋ชจ๋๊ฐ ์ฌ์ฉํ ์ ์๊ฒ ๋ฐ๋
์ ์ ๋ฉ์๋๋ ์ธ์คํด์ค ๊ฐ์ฒด์์ ์ง์ ํธ์ถํ ์ ์์ผ๋ฉฐ, ํด๋์ค๋ช
์ ํตํด ํธ์ถํด์ผ ํ๋ค.
๋ฐ๋ผ์, beom.sleep()๊ณผ ๊ฐ์ด ์ธ์คํด์ค ๊ฐ์ฒด์ธ beom์์ static ๋ฉ์๋์ธ sleep()์ ํธ์ถํ๋ ๊ฒ์ ์๋ชป๋ ์ฌ์ฉ์ ๋๋ค. ์ ์ ๋ฉ์๋๋
ํด๋์ค ์์ค์์ ๊ณต์ ๋๋ ๊ธฐ๋ฅ์ ์ ๊ณต
ํ๊ธฐ ๋๋ฌธ์, Tiger.sleep('๋ฒ')๊ณผ ๊ฐ์ด ํด๋์ค๋ช ์ ํตํด ํธ์ถํด์ผ ํ๋ค.
์ฌ๋ฐ๋ฅธ ์ฌ์ฉ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
ํด๋ก์ ๋?
JavaScript์ ๋งค์ฐ ๊ฐ๋ ฅํ ํน์ฑ์ผ๋ก ๋
๋ฆฝ์ ์ธ ๋ณ์๋ฅผ ์ฐธ์กฐํ๋ ํจ์๋ฅผ ๋งํฉ๋๋ค.
โ
์ฆ, ํด๋ก์ ์ ์ ์๋ ํจ์๋ ๊ทธ๊ฒ์ด ์์ฑ๋ ํ๊ฒฝ์ '๊ธฐ์ต'ํฉ๋๋ค.
ํด๋ก์ ๋ฅผ ์ฌ์ฉํ๋ ์ด์
- ์ ์ญ์ ์ค์ผ์ ๋ง๊ธฐ ์ํด
- ๊ฐ์ ๊ธฐ์ตํ๊ธฐ ์ํด(๊ฐ๋น์ง ์ปฌ๋ ํฐ ์์ง x)
- ํจ๋ถ๋ก ๋ด๊ฐ ์ค์ ํ ๊ฐ์ ์์ ํ ์ ์๊ฒ ํ๊ณ ํน์ ํจ์๋ฅผ ํตํด์๋ง ์ ๊ทผํ ์ ์๊ฒ ํ๊ธฐ ์ํด
function first() {
let x = 10;
function second() {
let y = 5;
return x + y;
}
// return x;
return second // ํจ์๋ฅผ ์คํํ๋๊ฒ ์๋ ๋ณธ๋ฌธ์ ๋ด๋ณด๋
}
first() // function second() {
// let y = 5;
// return x + y;
// }
//currying function
const value = first() //first()() // 15
first ๋ด๋ถ์ ์๋ second๋ฅผ ์คํ์ํจ ๊ฐ์ ๋ด๋ณด๋ด๋ ๊ฒ ์๋ ํจ์ ๋ณธ๋ฌธ์ first์ return ๊ฐ์ผ๋ก ๋ด๋ณด๋๋ค.
function counter(){
let count = 0;
count++;
return count;
}
let result = counter();
ํด๋ก์ ๋ฅผ ์ด์ฉํ counter ํจ์
๐ค ๋ง์ฝ ํธ๋์ด๊ฐ ์ง๊ตฌ์์ ์ซ๊ฒจ๋ ํ์ ์ง๊ตฌ์ ์๋ก์ด ํค, ๋ฐธ๋ฅ๊ฐ ์ถ๊ฐ๋๋ฉด ๊ทธ๊ฒ๋ ํธ๋์ด๊ฐ ์์งํ ์ ์๋์? โ yes
๐ค ๊ทธ๋ผ ํด๋ก์ ๋ฅผ ํตํด earth() ์์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ถ์ ๋๋ ๋ด๋ถ function์ ์ ์ด์ค์ผ๋ง ๊ฐ์ ธ์ฌ ์ ์๋ ๊ฑด๊ฐ์?
โ yes
๐ค๊ทธ๋ผ water๋ apple์ ์ ๊ทผ ๋ชปํ๋๊ฑด๊ฐ์??
,๊ทธ๋ผ ๋ณดํต ์ธ๋ถ function์๋ ๋ณ์๋ฅผ ์ง์ ํ๊ณ ๋ด๋ถ function์๋ ์คํ ์ํฌ๋ด์ฉ์ ์ง์ ํ๋ฉด๋๋๊ฑฐ์ฃ ?
โ yes
value์๋ second๊ฐ ๋ด๊ฒจ ์๋ ๊ฒ ์ด์ง๋ง second ํจ์๋ ์์ ์ด ์์ฑ๋ ์คํํ๊ฒฝ์ ๊ธฐ์ตํ๊ณ ์๊ธฐ ๋๋ฌธ์
earth() ์ ์ฒด๊ฐ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ์์ง ๋์์ด ๋์ง ์๋ ๊ฒ์ด๋ค.