์˜ค๋Š˜์€ pair ๊ณผ์ œ๋ฅผ ์ง„ํ–‰ํ•˜์˜€๊ณ , ๊ณผ์ œ์— ๋Œ€ํ•œ ๋ถ€๋ถ„์„ ์†Œ๊ฐœํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

๊ณผ์ œ : JavaScript Koans

๋ฌด์—‡์„

  • ์ง€๊ธˆ ๊นŒ์ง€ ํ•™์Šตํ•œ ๋‚ด์šฉ

    JavaScript์˜ ํƒ€์ž…
    ๋ณ€์ˆ˜ ์„ ์–ธ ํ‚ค์›Œ๋“œ let๊ณผ const
    ํ™”์‚ดํ‘œ ํ•จ์ˆ˜
    ์Šค์ฝ”ํ”„
    ๋ฐฐ์—ด
    ๊ฐ์ฒด
    spread
    ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น

์–ด๋–ป๊ฒŒ

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•์„ ํ†ตํ•ด ์ œ์‹œ ๋œ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐ

  • ๐Ÿ‘†๐Ÿป ์œ„๋Š” ์˜ˆ์‹œ ์‚ฌ์ง„์ด๋‹ค.

  • ์ฝ”๋“œ์Šคํ…Œ์ด์ธ ์˜ Github ์ž๋ฃŒ์—์„œ ์ง€์ •ํ•œ ํŒŒ์ผ์„ fork ํ•˜๊ณ  ํŒŒ์ผ์„ ๋ฐ›์€ ๋‹ค์Œ, ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค๋กœ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ์ด๋‹ค.

  • ํ…Œ์ŠคํŠธ ๋ฌธ๋ฒ• : expect(ํ…Œ์ŠคํŠธํ•˜๋Š”๊ฐ’).๊ธฐ๋Œ€ํ•˜๋Š” ์กฐ๊ฑด

  • ํ…Œ์ŠคํŠธ ํ•˜๋Š” ๊ฐ’๊ณผ ๊ธฐ๋Œ€ํ•˜๋Š” ์กฐ๊ฑด์„ ์•Œ๋งž๊ฒŒ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ด๋ฒˆ ๊ณผ์ œ์ด๋‹ค.

๋ชฉํ‘œ

  • koans ๋œป์ด ๊ฒฐ๋ก ์„ ๋‚ด๋ฆฌ๊ธฐ ์ „์— ์ด๊ฒŒ ์™œ ๋งž๋Š”์ง€ ๊นŠ๊ฒŒ ๊ณ ๋ฏผํ•œ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.
  • ์ด๋ฒˆ ๊ณผ์ œ์—๋Š” ํ…Œ์ŠคํŠธ ์˜ค๋ฅ˜๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์–ด์„œ ๋‹ต์ด ๋ญ”์ง€ ์ •ํ™•ํ•˜๊ฒŒ ๋‚˜์™€์žˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ ์ด๋ฒˆ ๊ณผ์ œ๋Š” ์ด์ „์— ํ•™์Šตํ–ˆ๋˜ ๋‚ด์šฉ๋“ค์„ ๊นŠ๊ฒŒ ์ƒ๊ฐํ•˜๋ฉฐ ๋ณต์Šตํ•˜๋Š” ์‹œ๊ฐ„์ด์ž, ๋ชจ๋ฅด๋Š” ๊ฐœ๋…๋“ค์€ ๊ฒ€์ƒ‰์„ ํ†ตํ•ด ๋ณต์Šต์„ ํ•˜๋Š” ์‹œ๊ฐ„์ด๋ผ๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ด๋‹ค.

๊ณผ์ œ ์ œ์ถœ

  • ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค ํ„ฐ๋ฏธ๋„์—์„œ npm install๋กœ npm์„ ๋‹ค์šด๋กœ๋“œ ํ•œ ๋’ค์—,
    npm submit์„ ํ•˜์—ฌ ๊ณผ์ œ ์ œ์ถœ์— ์™„๋ฃŒํ•˜์˜€๋‹ค.

๊ณผ์ œ ํ™•์ธ

npx codestates-assignment-manager login


๐Ÿ’ก koans ๊ณผ์ œ ์–ด๋ ค์› ๋˜ ์ 

๋ฌธ์ œ

  1. 04_Scope - 'lexical scope์™€ closure์— ๋Œ€ํ•ด ๋‹ค์‹œ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.'

< code >

์ดํ•ด๊ฐ€ ์•ˆ๋˜์—ˆ๋˜ ์ 

test code ๋ฌธ์ œ๋Š” ๋ชจ๋‘ ์•Œ๋งž๊ฒŒ ์ž‘์„ฑํ•˜์˜€์œผ๋‚˜ ์™œ ์ € innerFn()์„
๊ตณ์ด outerFn ํ•จ์ˆ˜ ์•ˆ์—์„œ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋ฐ–์—์„œ๋Š” ์‹คํ–‰์ด ์•ˆ๋˜๋Š”์ง€ ์ดํ•ด๊ฐ€ ๋˜์งˆ ์•Š์•„์„œ ๋‚ด๊ฐ€ ๋”ฐ๋กœ test code๋ฅผ ์ž‘์„ฑํ•ด ๋ณด์•˜๋‹ค.

let age = 27;
let name = 'jin';
let height = 179;
function outerFn() {
name = 'jimin';
function innerFn() {
age = 26;
height = 180
}
return innerFn;
}
const innerFn = outerFn();
console.log(age,name,height)

์ด ์ƒํƒœ๋กœ๋งŒ ๋ดค์„ ๋•Œ console.log์˜ ๊ฐ’์€
age = 27, name = jimin, heigth = 179๊ฐ€ ๋œ๋‹ค.

๋‚ด๊ฐ€ ์ƒ๊ฐํ–ˆ์„ ๋•Œ๋Š” age = 26, name = jimin, heigth = 180์ด์—ˆ๋‹ค.
์ฒ˜์Œ์—๋Š” innerFn ํ•จ์ˆ˜๋„ ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์™œ ์•ˆ ๋ฐ”๋€Œ๋Š”์ง€.. ๐Ÿง ์—ด์‹ฌํžˆ ์ฐพ์•„๋Œ•๊ฒจ๋ดค๋Š”๋ฐ ์•ˆ๋ณด์—ฌ์„œ ์•„๊ณ ๋ผ์Šคํ…Œ์ด์ธ ์— ์˜ฌ๋ฆด ์ƒ๊ฐ์ด์—ˆ๋‹ค.

ํ•ด๊ฒฐ

innerFn ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚ค์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— outFn ํ•จ์ˆ˜ ์‹คํ–‰ ๊ฐ’๋งŒ ๋“ค์–ด๊ฐ”๋˜ ๊ฒƒ์ด์—ˆ๋‹ค.

< code >
let age = 27;
let name = 'jin';
let height = 179;
function outerFn() {
name = 'jimin';
function innerFn() {
age = 26;
height = 180
}
return innerFn;
}
const innerFn = outerFn();
innerFn() // innerFn ํ•จ์ˆ˜ ์‹คํ–‰ code ๋„ฃ๊ธฐ
console.log(age,name,height)

const innerFn = outerFn();

  • ์œ„ code๋Š” innerFn ๋ณ€์ˆ˜์— outerFn ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๊ณ  ์žˆ๋‹ค.
    outerFn ํ•จ์ˆ˜์—์„œ๋Š” ์ „์—ญ ๋ณ€์ˆ˜ name์˜ ๊ฐ’์„ jimin์œผ๋กœ ๋ฐ”๊พธ๊ณ  innerFn ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•˜๊ณ  ์žˆ๋‹ค.
    ๋”ฐ๋ผ์„œ console.log ๊ฐ’์€ age = 27, name = jimin, heigth = 179๊ฐ€ ๋œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์•„๋ž˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ innerFn ๋ณ€์ˆ˜์— outerFn ์‹คํ–‰๊ฐ’์„ ๋„ฃ์œผ๋ฉด innerFn ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ์œผ๋‹ˆ ํ•จ์ˆ˜ ์‹คํ–‰์ฒ˜๋Ÿผ innerFn()์„ ํ•˜๊ฒŒ๋˜๋ฉด
innerFn ํ•จ์ˆ˜ ์•ˆ์˜ ์ฝ”๋“œ๋“ค์ด ์‹คํ–‰๋œ๋‹ค.
๋”ฐ๋ผ์„œ console.log ๊ฐ’์€ age = 26, name = jimin, heigth = 180์ด ๋œ๋‹ค.

let age = 27;
let name = 'jin';
let height = 179;
function outerFn() {
name = 'jimin';
function innerFn() {
age = 26;
height = 180
}
return innerFn;
}
const innerFn = outerFn();
innerFn() // innerFn ํ•จ์ˆ˜ ์‹คํ–‰
console.log(age,name,height)

๊ฒฐ๋ก 

ํ•จ์ˆ˜ ์•ˆ์— ํ•จ์ˆ˜๊ฐ€ ์žˆ์„ ๋•Œ, ๋ฐ”๊นฅ ํ•จ์ˆ˜์—์„œ ์•ˆ์ชฝ ํ•จ์ˆ˜๋ฅผ return ํ•˜๊ฒŒ ๋˜๋ฉด ์•ˆ์ชฝ ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๊ฐ’์ด ๋ฆฌํ„ด๋œ๋‹ค.
์•ˆ์ชฝ ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๊ฐ’์„ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ๋„ฃ์–ด์„œ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด ์•ˆ์ชฝ ํ•จ์ˆ˜์˜ ์ฝ”๋“œ๋“ค์ด ์‹คํ–‰๋˜์–ด ๋ฆฌํ„ด๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ  ์•„์ฃผ ์™„๋ฒฝํžˆ๋Š” ์•„๋‹ˆ์ง€๋งŒ
์–ด๋Š ์ •๋„ ์‹คํ–‰์˜ ํ๋ฆ„์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

profile
ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ๊ณต๋ถ€์ค‘

0๊ฐœ์˜ ๋Œ“๊ธ€