Section1 Unit9 [JavaScript] JavaScript Koans
โญ๏ธ ๊ณผ์ . JavaScript Koans
์ด๋ฒ ์ ๋์ JavaScript Koans ๊ณผ์ ๋ฅผ ์งํํ๋ฉฐ, ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ ๋ฆฌํ ์ ์์๋ค. Javascript Koans๋ 1๋ฒ ์๊ฐ ์ฑํฐ๋ฅผ ์ ์ธํ๊ณ , 10๋ฒ๊น์ง 9๊ฐ์ ์ฑํฐ๋ก ๋๋ ํ์ผ์ด ์ ๊ณต๋์๋ค. (ํ์ , ๋ณ์, ์ค์ฝํ, ํจ์, ๋ฐฐ์ด, ๊ฐ์ฒด, ์คํ๋ ๋ ๋ฌธ๋ฒ ๋ฑ)
ํท๊ฐ๋ ธ๋ ๋ถ๋ถ๋ค์ ๋ฐ๋ก ์ ๋ฆฌํ๊ณ , ๋ฌธ์ ๋ ์ต๋ํ ๋ค ์ดํดํ๋ ค ํ๋ค.
์ด๋ฒ TIL์์๋ ํท๊ฐ๋ ธ๋ ๊ฐ๋ ์ด๋ ๋ฌธ์ ๋ค, ๋ฐ๋ก ์ฐพ์๋ณด๊ธฐ๋ฅผ ๊ถ๊ณ ํ๋ ์ฌํญ ์ค์ ๋ด๊ฐ ์ ๋ชฐ๋๋ ๋ถ๋ถ๋ค์ ์์ฃผ๋ก ์ ๋ฆฌ๋ฅผ ํด๋ณผ๊น ํ๋ค ๐
• 03_LetConst.js
Q. ์ฌํ ๋น๋ ์๋๋ 'const' ํค์๋๋ฅผ ๊ตณ์ด ์จ์ผํ๋์ง ์ดํด๊ฐ ์ ๋ ์๋ ์์ต๋๋ค. 'let' ํค์๋๋ ์ฌํ ๋น์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ๋ชจ๋ก ํธํ๊ณ , ํฐ ๋ฌธ์ ๋ ์์ด ๋ณด์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด์ ๋ํด์ ์ ์ ๊ณ ๋ฏผํ์ ํ, 'const'๊ฐ ์ถ์ฒ๋๋ ์ด์ ์ ๋ํด ์ง์ ์ฐพ์๋ณด์๊ธฐ ๋ฐ๋๋๋ค.
A. const ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์๋์น ์์ ์ฌํ ๋น์ ๋ฐฉ์งํด ์ฃผ๊ธฐ ๋๋ฌธ์ let์ผ๋ก ๋ณ์๋ฅผ ์ ์ธํ๋ ๊ฒ๋ณด๋ค ์์ ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ์ง ์๋(์ฌํ ๋น์ด ํ์ ์๋ ์์) ์์ ๊ฐ๊ณผ ๊ฐ์ฒด์๋ const ํค์๋๋ฅผ ์ฌ์ฉํ๋ค.
↓ use const
and let
• 04_Scope.js
Q. ์๋ฐ์คํฌ๋ฆฝํธ ํจ์ ํธ์ด์คํ (hoisting)์ ๋ํด์ ๊ฒ์ํด ๋ด ๋๋ค.
A. ํจ์์ ํธ์ด์คํ ์ด๋ ํจ์ ์ ์ธ์ ์์น์๋ ์๊ด์์ด ์ฝ๋ ๋ด ์ด๋ ๊ณณ์์๋ ์ง ํธ์ถ์ด ๊ฐ๋ฅํ ํจ์๋ก, ํจ์์ ์ธ๋ฌธ์ ํธ์ด์คํ ์ด ๋์ง๋ง, ํจ์ํํ์์ ํธ์ด์คํ ์ด ๋์ง ์๋๋ค.
Q. ํด๋ก์ ์ ์ ์ฆ ์ผ์ด์ค
๐ฌ ํด๋ก์ ๋ ์ด๋ ค์ด๋ฐ ํด๋ก์ ์ ์ ์ฆ ์ผ์ด์ค๋ฅผ ์ฐพ์๋ณด๋ผ๋... ์์ง๊น์ง๋ ํด๋ก์ ๋ผ๋ ๊ฐ๋ ์ด ์ฝ์ง ์์ ์ ์ฆ ์ผ์ด์ค ํจ์ ํฉํ ๋ฆฌ(function factories)์ namespacing(private variables/functions)๋ฅผ ์ฐพ์๋ณด๊ธฐ๋ ํ๋๋ฐ, ์ดํด๊ฐ ๋ค ๋์ง๋ ์๋๋ค. ์ข ๋ ๊ณต๋ถํด์ ์ ๋ฆฌํด๋ด์ผ ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด๋ณด์๋ฉด,
A. ํจ์ ํฉํ ๋ฆฌ(function factories)๋ ํจ์๋ฅผ ๋ฐํํ๋ ํจ์๋ก, ํจ์ ํฉํ ๋ฆฌ์์ ๋ฐํ๋ ํจ์๋ ํด๋ก์ ๋ฅผ ํ์ฑํ์ฌ ๋ฐํ๋๋ค. namespacing์ ๋ณ์๋ ํจ์๋ฅผ ํ์ฌ ์ ํจ ๋ฒ์ ๋ด์ ์ ํํ์ฌ ์ด๋ฆ ์ถฉ๋์ ๋ฐฉ์งํ๊ณ ๋ณ์๋ ํจ์๋ฅผ ์จ๊ธฐ๋ ๊ฒ์ ๋งํ๋๋ฐ, ํด๋ก์ ๋ก ๋ด๋ถ ํจ์์์ ์ธ๋ถ ํจ์์ ๋ณ์์ ์ ๊ทผํ ์ ์๋ ์ ์ ์ด์ฉํ๋ค.
๐ฌ ์์ ์ฝ๋๋ ๋ดค๋๋ฐ, ์์ง ์ค๋ช ํ ์ ๋๋ก ์ดํดํ ๊ฑด ์๋๊ฒ ๊ฐ์์ ๋ ๊ณต๋ถํ๊ณ ์ ๋ฆฌํ๊ธฐ๋ก ๐ญ
• 05_ArrowFunction.js
• ↓ ํด๋ก์ + ํ์ดํ ํจ์
// ํ์ดํ ํจ์๋ฅผ ์ด์ฉํด ํด๋ก์ ๋ฅผ ํํ
const adder = x => {
return y => {
return x + y
}
}
const subtractor = x => y => {
return x - y
}
/*
์ ํ์ดํ ํจ์๋ ์๋ ํจ์ ํํ์๊ณผ ๊ฐ์
const subtractor = function(x) {
return function(y) {
return x - y;
}
}
→ ํจ์์ ๋ฆฌํด๊ฐ์ด ํจ์
*/
console.log( adder(50)(10) ); // 60
console.log( subtractor(50)(10) ); // 40
function makeTag() {
const htmlMaker = tag => textContent => `<${tag}>${textContent}</${tag}>`
console.log(htmlMaker('div')('code states')); // <div>code states</div>
const liMaker = htmlMaker('li')
console.log(liMaker('1st item')) // <li>1st item</li>
console.log(liMaker('2nd item')) // <li>2nd item</li>
}
makeTag();
์ด๊ฑด ๊ฝค ์ฌ๋ฐ์๋ ํจ์!
• 07_Array.js
๐ pass by value์ pass by reference์ ์ฐจ์ด๋ ์๋ ๊ธ ์ฐธ๊ณ ↓ ๐
const arr = ['zero', 'one', 'two', 'three', 'four', 'five'];
// call(pass) by value์ call(pass) by reference์ ์ฐจ์ด์ ๋ํด์ ํ์ตํฉ๋๋ค.
function passedByReference(refArr) {
refArr[1] = 'changed in function';
}
passedByReference(arr);
console.log("arr", arr); // arr = ['zero', 'changed in function', 'two', 'three', 'four', 'five'];
const assignedArr = arr;
assignedArr[5] = 'changed in assignedArr';
console.log("assignedArr", assignedArr); // assignedArr = ['zero', 'changed in function', 'two', 'three', 'four', 'changed in assignedArr'];
console.log("arr", arr) // arr = ['zero', 'changed in function', 'two', 'three', 'four', 'changed in assignedArr'];
const copiedArr = arr.slice();
copiedArr[3] = 'changed in copiedArr';
console.log("copiedArr", copiedArr); // copiedArr = ['zero', 'changed in function', 'two', 'changed in copiedArr', 'four', 'changed in assignedArr'];
console.log("arr", arr); // arr = ['zero', 'changed in function', 'two', 'three', 'four', 'changed in assignedArr'];
• 08_Object.js
const obj = {}
console.log(obj.length) // undefined
const megalomaniac = {
mastermind: 'Joker',
henchwoman: 'Harley',
getMembers: function () {
return [this.mastermind, this.henchwoman];
},
relations: ['Anarky', 'Duela Dent', 'Lucy'],
twins: {
'Jared Leto': 'Suicide Squad',
'Joaquin Phoenix': 'Joker',
'Heath Ledger': 'The Dark Knight',
'Jack Nicholson': 'Tim Burton Batman',
},
};
console.log(megalomaniac.length) // // undefined
→ ๊ฐ์ฒด๋ length ํ๋กํผํฐ๋ฅผ ๊ฐ์ง์ง ์๋๋ค. (์๊ฐํด๋ณด์ง ์์ ๋ถ๋ถ์ธ๋ฐ, ์๋กญ๊ฒ ์๊ฒ ๋์๋ค..ใ ใ )
Q. this๋ ๋ฌด์์ผ๊น?
A. this๋ ๊ฐ๋จํ ๋งํด์ ํด๋์ค์์ ์์ ์ด ์์ฑํ ์ธ์คํด์ค ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ธฐ ์ํ ํน์ํ ๋ณ์๋ค.
class Car {
constructor(brand) {
this.brand = brand // ์ฌ๊ธฐ์ this๋ car
}
}
const car = new Car('Hyundai')
• 09_SpreadSyntax.js
const fullPre = {
cohort: 7,
duration: 4,
mentor: 'hongsik',
};
const me = {
time: '0156',
status: 'sleepy',
todos: ['coplit', 'koans'],
};
const merged = { ...fullPre, ...me };
// 1. ๋ณ์ 'merged'์ ํ ๋น๋ ๊ฒ์ 'obj1'๊ณผ 'obj2'์ value์ผ๊น์, reference์ผ๊น์? // value
// 2. ๋ง์ฝ ๊ฐ(value, ๋ฐ์ดํฐ)์ด ๋ณต์ฌ๋ ๊ฒ์ด๋ผ๋ฉด, shallow copy์ผ๊น์, deep copy์ผ๊น์? // shallow
console.log(merged)
/* merged
{
cohort: 7,
duration: 4,
mentor: 'hongsik',
time: '0156',
status: 'sleepy',
todos: [ 'coplit', 'koans' ]
}
*/
→ ์ด ๋ฌธ์ ์ง์ง ํท๊ฐ๋ ธ๋๋ฐ, ๋ณ์ merged์ ํ ๋น๋ ๊ฒ์ value์ด๊ณ , ์ด ๊ฐ์ ์์ ๋ณต์ฌ๊ฐ ๋ ๊ฐ์ด๋ค.
• arguments ๊ฐ์ฒด์ rest parameter
๋๋จธ์ง ๋งค๊ฐ๋ณ์์ arguments ๊ฐ์ฒด์ ๊ดํ ๊ธ์ ๋ฐ๋ก ์ ๋ฆฌ๋ฅผ ํ๋ค. ↑ ์ ๊ธ ์ฐธ๊ณ !
๐ ์ค๋์ ํ๊ณ
JavaScript Koans๋ฅผ ๋ง๋ฌด๋ฆฌํ๋ฉฐ, ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ ๋ฆฌํ๊ณ ์ถ๊ฐ๋ก ๋ ํ์ํ ๋ถ๋ถ๋ค์ด ๋ฌด์์ธ์ง๋ฅผ ํ์ตํ๋ค. JavaScript Koans์์ ํผ ๋ฌธ์ ๋ค์ด ์ ๋ฐ์ ์ผ๋ก ์ฌ๋ฏธ์์ด์ ๋๋ฆ ์ ๋ฆฌ๋ฅผ ํ๋ฉฐ ํ์ด๋ฅผ ํ๊ณ , ๋ผ์ด๋ธ ์ธ์ ์์ ํท๊ฐ๋ ธ๋ ๋ฌธ์ ํ์ด๋ ๋ค์ ์ ์์๋ค. Koans๋ ๋ถ๊ต์์ ์ ๋๋ ๋จ์ด๋ก ๊ฒฐ๋ก ์ ๋ด๋ฆฌ๊ธฐ ์ ์ ์ด๊ฒ ์ ๋ง๋์ง ๊น๊ฒ ๊ณ ๋ฏผํ๋ค๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์๋ค๊ณ ํ๋ค. ์ด๋ฒ ๋ฌธ์ ๋ค์ ํ ์คํธ ์ฝ๋์ ๋ต์ด ์ด๋ฏธ ์ ์๊ฐ ๋์ด ์๊ธฐ ๋๋ฌธ์ ์๋ฌด ์๊ฐ์์ด ํ๋ฉด ๊ทธ๋ฅ ๋ฌผํ๋ฅด๋ฏ ํ ์ ์๋ ๋ฌธ์ ๋ค์ด์๋๋ฐ, ๋ต์ ๊ณ ๋ฏผํด๋ณด๋ฉฐ ๋ด๊ฐ ๋ชจ๋ฅด๋๊ฒ ๋ฌด์์ด๊ณ , ํท๊ฐ๋ฆฌ๋๊ฒ ๋ฌด์์ธ์ง ํ์คํ๊ฒ ์ ์ ์์ด์ ์๋ฏธ์๋ ์๊ฐ์ด์๋ค.
๋ค์ ํ ์ฃผ๊ฐ ์์๋์๋ค. ์ด๋ฒ์ฃผ๋ ํ์ดํ ๐ป
'Frontend Dev > ๐ฅ ์ฝ๋์คํ ์ด์ธ FE ๋ถํธ์บ ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Section1 Unit10 JS/๋ธ๋ผ์ฐ์ DOM - ์ ํจ์ฑ ๊ฒ์ฌ (0) | 2023.05.03 |
---|---|
Section1 Unit10 JS/๋ธ๋ผ์ฐ์ DOM (0) | 2023.05.02 |
Section1 Unit9 JavaScript ํต์ฌ ๊ฐ๋ ๊ณผ ์ฃผ์ ๋ฌธ๋ฒ - ES6 ์ ๊ท ๋ฌธ๋ฒ (0) | 2023.04.28 |
Section1 Unit9 JavaScript ํต์ฌ ๊ฐ๋ ๊ณผ ์ฃผ์ ๋ฌธ๋ฒ - ์๋ฃํ, ์ค์ฝํ, ํด๋ก์ (0) | 2023.04.27 |
Section1 Unit8 JavaScript ๊ฐ์ฒด (0) | 2023.04.26 |