Dream๐Ÿฐng
article thumbnail

 

JavaScript Koans ๊ณผ์ œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ ์ œ๋Œ€๋กœ ์ •๋ฆฌ๋˜์ง€ ์•Š์•˜๋˜ ๊ฐœ๋…๋“ค์„ ๋‹ค์‹œ ์ •๋ฆฌํ•ด๋ณธ๋‹ค.

 

์ฐธ์กฐ ์ž๋ฃŒํ˜•์€ ์ฃผ์†Œ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.


์›์‹œ ์ž๋ฃŒํ˜•๊ณผ์˜ ์ฐจ์ด์— ๊ด€ํ•œ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ๊ฐœ๋…์ด ์ƒ์ถฉ๋˜์–ด ์ดํ•ด๊ฐ€ ๊ฐ€์ง€ ์•Š์•˜๋˜ ๋ถ€๋ถ„.

์ฐธ์กฐ ์ž๋ฃŒํ˜•์€ ๊ฐ™์€ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ ์›๋ณธ ๋˜๋Š” ๋ณต์ œ ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด์˜ ๊ฐ’์ด ๋‹ฌ๋ผ์กŒ์„ ๋•Œ ๊ฐ’์ด ํ•จ๊ป˜ ๋‹ฌ๋ผ์ง„๋‹ค!!

 

โœ๏ธ ์›๋ณธ ์ฐธ์กฐ ์ž๋ฃŒํ˜•๊ณผ ๋ณต์ œ ์ฐธ์กฐ ์ž๋ฃŒํ˜•์— ๋™์ผํ•œ ์ฃผ์†Œ๊ฐ’์„ ์ฃผ๋Š” ๊ฒฝ์šฐ

์ฐธ์กฐ ์ž๋ฃŒํ˜• ์„ ์–ธ ํ›„ ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜์— ์ฐธ์กฐ ์ž๋ฃŒํ˜•์„ ์„ ์–ธํ–ˆ๋˜ ๋ณ€์ˆ˜๋ฅผ ํ• ๋‹นํ•œ๋‹ค

/* 06 Types part2 */

const overTwenty = ['hongsik', 'minchul', 'hoyong'];
let allowedToDrink = overTwenty;

overTwenty.push('san');
console.log(allowedToDrink); // ['hongsik', 'minchul', 'hoyong', 'san']
// overTwenty์™€ allowedToDrink๋Š” ์ฃผ์†Œ๊ฐ’์ด ๋™์ผํ•˜๋‹ค!

overTwenty[1] = 'chanyoung';
console.log(allowedToDrink[1]); // 'chanyoung'
// overTwenty์™€ allowedToDrink๋Š” ์ฃผ์†Œ๊ฐ’์ด ๋™์ผํ•˜๋‹ค!
/* 06 Types part2 */

const person = {
    son: {
      age: 9,
    },
  };

const boy = person.son; 
boy.age = 20;

console.log(person.son.age); // 20
// boy์™€ person.son์€ ๊ฐ™์€ ์ฃผ์†Œ๊ฐ’์ด ๋™์ผํ•˜๋‹ค!

 

โœ๏ธ ์›๋ณธ ์ฐธ์กฐ ์ž๋ฃŒํ˜•๊ณผ ๋ณต์ œ ์ฐธ์กฐ ์ž๋ฃŒํ˜•์— ๋‹ค๋ฅธ ์ฃผ์†Œ๊ฐ’์„ ์ฃผ๋Š” ๊ฒฝ์šฐ

๋ฐฐ์—ด ๋ฉ”์†Œ๋“œ ๋“ฑ์„ ์ด์šฉํ•œ๋‹ค. (assign, slice ๋“ฑ...)

/* 08 Object */

const obj = {
    mastermind: 'Joker',
    henchwoman: 'Harley',
    relations: ['Anarky', 'Duela Dent', 'Lucy'],
    twins: {
      'Jared Leto': 'Suicide Squad',
      'Joaquin Phoenix': 'Joker',
      'Heath Ledger': 'The Dark Knight',
      'Jack Nicholson': 'Tim Burton Batman',
    },
};

function passedByReference(refObj) {
    refObj.henchwoman = 'Adam West';
}

์œ„์™€ ๊ฐ™์€ ๊ฐ์ฒด์™€ ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•  ๋•Œ...

passedByReference(obj);

console.log(obj.henchwoman); // 'Adam West'

ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋ฉด obj์˜ henchwoman ๊ฐ’์€ 'Adam West'๊ฐ€ ๋œ๋‹ค!

const copiedObj = Object.assign({}, obj);
copiedObj.mastermind = 'James Wood';
console.log(obj.mastermind); // 'Joker'

obj.henchwoman = 'Harley';
console.log(copiedObj.henchwoman); // 'Adam West'

๊ฐ์ฒด๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” assign ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด copiedObj๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ๋Š”๋ฐ, ์ด๊ฒƒ์€ obj์™€ ๋‹ค๋ฅธ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค.

const copiedObj = obj; ์˜€๋‹ค๋ฉด ๊ฐ™์€ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ์—ˆ์„ ๊ฒƒ!

 

๋‹ค๋ฅธ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— copiedObj์˜ mastermind ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์ฃผ์–ด๋„ obj ๊ฐ์ฒด์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ๋ชปํ•œ๋‹ค.

๋”ฐ๋ผ์„œ obj.mastermind๋Š” 'Joker'๊ฐ€ ์ถœ๋ ฅ!

 

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ obj์™€ copiedObj๋Š” ๋‹ค๋ฅธ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— obj๋ฅผ ๋ณ€๊ฒฝํ•ด๋„ copiedObj์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ๋ชปํ•œ๋‹ค.

๋”ฐ๋ผ์„œ copiedObj.henchwoman์€ ์ฒ˜์Œ assign ํ–ˆ์„ ๋•Œ์˜ ๊ฐ’์ธ 'Adam West' ์ถœ๋ ฅ.

 

/* 07 Array */

const arr = ['zero', 'one', 'two', 'three', 'four', 'five'];

function passedByReference(refArr) {
    refArr[1] = 'changed in function';
}
passedByReference(arr); // ['zero', 'changed in function', 'two', 'three', 'four', 'five']

๋ฐฐ์—ด์„ ์„ ์–ธํ•˜๊ณ  ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜์—ฌ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ, ํ•จ์ˆ˜์— ์˜ํ•ด arr์€ ์œ„์™€ ๊ฐ™์ด ๋ณ€ํ•œ๋‹ค.

const assignedArr = arr;
assignedArr[5] = 'changed in assignedArr';
console.log(arr[5]); // 'changed in assignedArr'

const copiedArr = arr.slice();
copiedArr[3] = 'changed in copiedArr';
console.log(arr[3]); // 'three'

assignedArr์—๋Š” arr์˜ ์ฃผ์†Œ๊ฐ’์„ ๋ฐ”๋กœ ํ• ๋‹นํ•ด์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— assignedArr์˜ ๊ฐ’์ด ๋‹ฌ๋ผ์ง€๋ฉด arr์˜ ๊ฐ’ ๋˜ํ•œ ๋‹ฌ๋ผ์ง„๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ copiedArr์€ slice ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด ๋‚ด์šฉ์€ ๊ฐ™์ง€๋งŒ ์ฃผ์†Œ๊ฐ’์„ ๋‹ค๋ฅด๊ฒŒ ํ• ๋‹นํ•ด์ค€ ๋ฐฐ์—ด์ด๋‹ค!

๋”ฐ๋ผ์„œ copiedArr์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์ฃผ์–ด๋„ arr์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์œผ๋ฏ€๋กœ 'three'๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

 

 

repeat ๋ฉ”์†Œ๋“œ


string์— ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์†Œ๋“œ๋กœ, ๋ฌธ์ž์—ด์„ ์ฃผ์–ด์ง„ ํšŸ์ˆ˜๋งŒํผ ๋ฐ˜๋ณตํ•œ๋‹ค.

/* 08 Object */

const megalomaniac = {
    mastermind: 'Brain',
    henchman: 'Pinky',
    getFusion: function () {
      return this.henchman + this.mastermind;
    },
    battleCry(numOfBrains) {
      return `They are ${this.henchman} and the` + ` ${this.mastermind}`.repeat(numOfBrains);
    },
};

megalomaniac์ด๋ผ๋Š” ๊ฐ์ฒด๊ฐ€ ์„ ์–ธ๋˜์–ด ์žˆ๋Š”๋ฐ... ์ž˜ ๋ณด๋ฉด ๊ทธ ์•ˆ์— battleCry๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ ๋˜ ์„ ์–ธ๋˜์–ด ์žˆ๊ณ  battleCry๋Š” string์„ ๋ฆฌํ„ดํ•œ๋‹ค.

battleCry๊ฐ€ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒƒ ์ค‘์—... ` ${this.mastermind}`.repeat(numOfBrains) ์ด ๋ถ€๋ถ„ ๋„ˆ๋ฌด ๋‹นํ™ฉ์Šค๋Ÿฌ์› ๋‹ค.. ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ repeat,, ๋ฉ”์†Œ๋“œ ๊ฐ™๊ธดํ•˜๊ณ .. ๋ฐ˜๋ณตํ•˜๋Š” ๋ฉ”์†Œ๋“œ ๊ฐ™๊ธดํ•œ๋ฐ.. 

console.log(megalomaniac.battleCry(3)); // 'They are Pinky and the Brain Brain Brain'

๋งŒ์•ฝ ์œ„์˜ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋ฉด They are Pinky and the BrainBrainBrain์ด ์ถœ๋ ฅ๋˜๋Š”๊ฑธ๊นŒ?

๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ repeat๊ฐ€ ์ ์šฉ๋œ ์ŠคํŠธ๋ง์€ ` ${this.mastermind}`์ด๊ธฐ ๋•Œ๋ฌธ์— ์•ž์˜ ๊ณต๋ฐฑ๊นŒ์ง€ ํ•จ๊ป˜ ์ถœ๋ ฅํ•œ๋‹ค!

๋”ฐ๋ผ์„œ ์ •๋‹ต์€ 'They are Pinky and the Brain Brain Brain'.

 

 

arguments ๊ฐ์ฒด


/* 09 SpreadSyntax */

function getAllParamsByArgumentsObj() {
    return arguments;
}

์œ„ ํ•จ์ˆ˜๋ฅผ ์ฒ˜์Œ ๋ดค์„ ๋•Œ.... ๊ตณ์–ด๋ฒ„๋ ธ๋‹ค ใ…Ž ใ…Žใ…Ž

return arguments๊ฐ€ ๋ญ”๋ฐ...?

 

MDN arguments MDN์—์„œ ์„ค๋ช…ํ•˜๊ณ  ์žˆ๋Š” arguments..

๊ฐ„๋‹จํ•˜๊ฒŒ ๊ฒฐ๋ก ๋งŒ ๋งํ•˜์ž๋ฉด arguments๋Š” JS ๋‚ด์—์„œ ์ œ๊ณตํ•˜๋Š”(?) ๋ฐฐ์—ด๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ ๋ฐฐ์—ด์€ ์•„๋‹Œ ๊ฐ์ฒด์ด๋‹ค!(?)

์ธ์ž๋ฅผ ์ „๋‹ฌ ๋ฐ›์•„์„œ ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

๋ฐฐ์—ด๊ณผ ๋น„์Šทํ•˜๊ธฐ ๋•Œ๋ฌธ์— length ํ”„๋กœํผํ‹ฐ๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๊ทธ ์™ธ์˜ ๋ฐฐ์—ด ์†์„ฑ ๋ฉ”์†Œ๋“œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค๊ณ ..ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค..

์–ด๋–ค ๋ฐฐ์—ด์˜ ์†์„ฑ๋„ ์—†์ง€๋งŒ ๋˜ ๋ฐฐ์—ด๊ณผ ๋น„์Šทํ•˜๊ธฐ๋Š” ํ•ด์„œ Array.from() ๊ฐ™์€ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค..

const argumentsObj = getAllParamsByArgumentsObj('first', 'second', 'third');

console.log(Object.keys(argumentsObj)); // ['0', '1', '2']
console.log(Object.values(argumentsObj)); // ['first', 'second', 'third']

์œ„์™€ ๊ฐ™์ด ์ธ์ž๋ฅผ ์ „๋‹ฌ๋ฐ›์•„์„œ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•ด์ฃผ๋ฉด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ์ผ๋‹จ์€ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— key์™€ value๋ฅผ ๋ฝ‘์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ 

value๋Š” ์ „๋‹ฌ ๋ฐ›์€ ์ธ์ž์ด์ง€๋งŒ key๋Š” ์•„๋งˆ.. arguments๊ฐ€ ์ž์ฒด์ ์œผ๋กœ 0๋ถ€ํ„ฐ ๋ฒˆํ˜ธ๋ฅผ ๋งค๊ธฐ๋Š” ๊ฒƒ์ด ์•„๋‹Œ๊ฐ€ ์‹ถ๋‹ค.

console.log(Array.isArray(argumentsObj)); // false

const argsArr = Array.from(argumentsObj);
console.log(Array.isArray(argsArr)); // true
console.log(argsArr); // ['first', 'second', 'third']

๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— Array.isArray()๋กœ ํŒ๋ณ„ํ–ˆ์„ ์‹œ๋Š” false๊ฐ€ ์ถœ๋ ฅ๋˜๊ณ ,

Array.from()์œผ๋กœ ์ง„์งœ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด์ฃผ๋ฉด.. Array.isArray()๊ฐ€ true๊ฐ€ ๋œ๋‹ค~

๊ฐ’์€ key๊ฐ€ ์‚ฌ๋ผ์ง„ value๋งŒ ์กด์žฌ..

 

 

์‰ฝ์ง€๋งŒ์€ ์•Š์€ ๊ณผ์ œ์˜€๋‹ค.. ๋จธ๋ฆฌ ์†์—์„œ ๊ฐœ๋…์ด ๋„ˆ๋ฌด ๋’ค์ฃฝ๋ฐ•์ฃฝ ์„ž์—ฌ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐ˜์ฆํ•˜๋Š” ์‹œ๊ฐ„ ใ…Žใ…Ž..

JavaScript Koans๋Š” ๋‚˜์˜ ๊ณ ํ†ต์˜ ํ”์ ๊ณผ ํ•จ๊ป˜ ๋งˆ๋ฌด๋ฆฌ~

profile

Dream๐Ÿฐng

@shoupeach

๐Ÿฐ Happy new rabbit! ๐Ÿฐ

profile on loading

Loading...