๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
TIL

TIL :: JavaScript / replit. 25~30

by sophie0527 2022. 5. 18.

โ25. Class

โ—‰ Class 

ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€, ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ์ฒด๋“ค๋กœ ๊ตฌ์„ฑํ•˜๊ณ , ๊ฐ์ฒด๋“ค ๊ฐ„์— ์„œ๋กœ ์ƒํ˜ธ ์ž‘์šฉ ํ•˜๋„๋ก ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋„ค, ์„ค๋ช…์ด ์กฐ๊ธˆ ์–ด๋ ค์šด๋ฐ์š”.

JavaScript๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์ค‘์‹ฌ์— ์žˆ๋Š” ์–ธ์–ด๋Š” ์•„๋‹ˆ์ง€๋งŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์žˆ์–ด์„œ Class, ๊ฐ์ฒด, ๊ฐ์ฒด์ง€ํ–ฅ์€ ํ•ญ์ƒ ์ค‘์š”ํ•œ ์ฃผ์ œ์ž…๋‹ˆ๋‹ค.

'๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ' ์ด๋ผ๋Š” ๋‹จ์–ด์—์„œ '๊ฐ์ฒด'๋Š” ์•ž์„œ ๋ฐฐ์› ๋˜ { num: 1 } ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋งํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

๊ฐ์ฒด๋Š” ์˜์–ด๋กœ object, ๋ง๊ทธ๋Œ€๋กœ ์‚ฌ๋ฌผ์„ ๋œปํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ, ํด๋ž˜์Šค๋Š” ๊ฒฐ๊ตญ { num: 1 } ์ฒ˜๋Ÿผ ์ƒ๊ธด ๊ฐ์ฒด(object)๋ฅผ ์ž˜ ์„ค๊ณ„ํ•˜๊ธฐ ์œ„ํ•œ ํ‹€์€ ๋งž์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด ๋•Œ์˜ ๊ฐ์ฒด๋Š” ํŠน์ • ๋กœ์ง์„ ๊ฐ–๊ณ  ์žˆ๋Š” ํ–‰๋™(method)์™€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ(๋ฉค๋ฒ„ ๋ณ€์ˆ˜)๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

์›ํ•˜๋Š” ๊ตฌ์กฐ์˜ ๊ฐ์ฒด ํ‹€์„ ์งœ๋†“๊ณ , ๋น„์Šทํ•œ ๋ชจ์–‘์˜ ๊ฐ์ฒด๋ฅผ ๊ณต์žฅ์ฒ˜๋Ÿผ ์ฐ์–ด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์ฒด๋ฅผ ๋งค๋ฒˆ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•ด๋„ ์ข‹์ง€๋งŒ, ํฐ ํ๋ชจ์˜ ๊ฐ์ฒด ์ด๊ฑฐ๋‚˜ ๋น„์Šทํ•œ ๋ชจ์–‘์˜ ๊ฐ์ฒด๋ฅผ ๊ณ„์† ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค๋ฉด,

class๋ผ๋Š” ์„ค๊ณ„๋„๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CSS์˜ class์™€ ์ „ํ˜€ ๋‹ค๋ฅธ ๊ฐœ๋…์ด๋‹ˆ ์œ ์˜ํ•ด ์ฃผ์„ธ์š”!

๋จผ์ €, 'ray' ์ฐจ๋ฅผ ๊ฐ์ฒด๋กœ ์ •์˜ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ray ๋ผ๋Š” ๊ฐ์ฒด๋Š” 5๊ฐœ์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • name
  • price
  • getName
  • getPrice
  • applyDiscount
let ray = {  
  name: 'Ray',  
  price: 2000000,   
  getName: function() {  
    return this.name;  
  },   
  getPrice: function() {  
    return this.price;  
  },   
  applyDiscount: function(discount) {  
    return this.price * discount;   
  } 
}

์กฐ๊ธˆ ์ƒ์†Œํ•œ ํ‘œํ˜„์ด ์žˆ๋„ค์š”.

ํ”„๋กœํผํ‹ฐ ๊ฐ’์— ํ•จ์ˆ˜๊ฐ€ ํ• ๋‹น๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋„ค!! ์ด๋ ‡๊ฒŒ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ ๊ฐ’์—๋Š” ํ•จ์ˆ˜๋„ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์—์„œ getPrice ๋ผ๋Š” ํ•จ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const rayPriceByFunction = ray.getPrice();
console.log('ํ•จ์ˆ˜๋กœ ์ ‘๊ทผ => ' +rayPriceByFunction);

๊ฐ์ฒด ๋‚ด๋ถ€์—์„œ, ํ•ด๋‹น ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด "this"๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ getPrice ๋ฉ”์„œ๋“œ์—์„œ this.price ๋กœ price ํ‚ค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ ,

2000000 ๊ฐ’์„ ๊ฐ–๊ณ  ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ์ฝ”๋“œ๊ฐ€ ์ฐจ ์˜์—…์ ์—์„œ ์“ฐ๋Š” ์•ฑ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ์ฐจ๊ฐ€ ์ถœ์‹œ๋˜์–ด ๊ฐ์ฒด๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š”๋ฐ,

ํ”„๋กœํผํ‹ฐ๋Š” ๋˜‘๊ฐ™์ด ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿด ๋•Œ, ์ฐจ๋งˆ๋‹ค ๊ฐ์ฒด๋ฅผ ๋Š˜๋ ค๋‚˜๊ฐ€์„œ ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์ง€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ,

ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์€ Car๋ผ๋Š” *ํด๋ž˜์Šค(class)*๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

index.js 22๋ฒˆ์งธ ์ค„์— Morning์ด๋ผ๋Š” ์ฐจ๋ฅผ ์–ด๋–ป๊ฒŒ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

Run์„ ๋Œ๋ ค ์–ด๋–ค ๊ฐ’์ด ๋‚˜์˜ค๋Š”์ง€ ํ™•์ธํ•ด๋ณด์„ธ์š”.

 

โ—‰ ์ƒ์„ฑ์ž(Constructor) 

๊ฐ์ฒด(object)์˜ ์„ค๊ณ„๋„์ธ ํด๋ž˜์Šค(class)๋Š” ๋ฌธ๋ฒ•์ด ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

๋‘˜์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด๋Š” constructor ๋ผ๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

39๋ฒˆ์งธ ์ค„์— class๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์ด class๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์„ '์ธ์Šคํ„ด์Šคํ™”'๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

const morning = new Car('Morning', 2000000);

class๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ์ธ์Šคํ„ด์Šค ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

class๋Š” ์ƒˆ๋กœ์šด instance๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋งˆ๋‹ค constructor() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

class Car {
  constructor(name, price) {
    this.name = name;
    this.price = price;
  }
}
  • Car๋Š” class์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ํ•ญ์ƒ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๊ณ , CamelCase๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Car class์˜ instance๋ฅผ ์ƒ์„ฑํ• ๋•Œ๋งˆ๋‹ค constructor ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
  • constructor() ๋ฉ”์„œ๋“œ๋Š” name, price 2๊ฐœ์˜ argument(์ธ์ž)๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • constructor() ๋ฉ”์„œ๋“œ์— this ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. class์˜ ์‹คํ–‰๋ฒ”์œ„(context)์—์„œ this ๋Š” ํ•ด๋‹น instance๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • constructor() ์—์„œ ์ธ์ž๋กœ ๋„˜์–ด์˜ค๋Š” name๊ณผ price๋ฅผ ์‚ฌ์šฉํ•ด Car instance์˜ name, price ํ”„๋กœํผํ‹ฐ์— ๊ฐ’์„ ํ• ๋‹นํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ํด๋ž˜์Šค ๋‚ด์—์„œ name, price์™€ ๊ฐ™์ด ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ’์ด์ž class๋‚ด์˜ ์ปจํ…์ŠคํŠธ์—์„œ ์–ด๋А ๊ณณ์—์„œ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ '๋ฉค๋ฒ„ ๋ณ€์ˆ˜'๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
  • ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋Š” this ํ‚ค์›Œ๋“œ๋กœ ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.

 

โ—‰ ์ธ์Šคํ„ด์Šค(Instance) 

์œ„์—์„œ class instance๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค(Instance)๋Š” class๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค๋Š” class์˜ property์ด๋ฆ„๊ณผ method๋ฅผ ๊ฐ–๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค ๋งˆ๋‹ค ๋ชจ๋‘ ๋‹ค๋ฅธ ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

const morning = new Car('Morning', 20000000);
  • ์ธ์Šคํ„ด์Šค๋Š” Class ์ด๋ฆ„์— new ๋ฅผ ๋ถ™์—ฌ์„œ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋ž˜์Šค ์ด๋ฆ„ ์šฐ์ธก์— () ๊ด„ํ˜ธ๋ฅผ ์—ด๊ณ  ๋‹ซ๊ณ , ๋‚ด๋ถ€์—๋Š” constructor ์—์„œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ธ์ž๋กœ ๋„˜๊ฒจ์ค๋‹ˆ๋‹ค.
  • Carํด๋ž˜์Šค์˜ instance๋ฅผ morning ์ด๋ผ๋Š” ๋ณ€์ˆ˜์— ์ €์žฅํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹ค์‹œ ํ•œ ๋ฒˆ! Car ํด๋ž˜์Šค์˜ ์ƒˆ๋กœ์šด instance๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด new ํ‚ค์›Œ๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. new ํ‚ค์›Œ๋“œ๋Š” constructor() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์ƒˆ๋กœ์šด instance๋ฅผ returnํ•ด์ค๋‹ˆ๋‹ค.
  • 'Morning'์ด๋ผ๋Š” String๊ณผ 2000000 ์ด๋ผ๋Š” Number๋ฅผ Car ์ƒ์„ฑ์ž์— ๋„˜๊ฒจ์ฃผ์—ˆ๊ณ , name, price ํ”„๋กœํผํ‹ฐ์— ๊ฐ์ž์˜ ๊ฐ’์ด ํ• ๋‹น๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ์ฐจ๋ฅผ ๋“ฑ๋กํ•ด ๋ด…์‹œ๋‹ค.

const spaceship = new Car('์šฐ์ฃผ์„ ', 25000000);
console.log(spaceship);
console.log(spaceship.name); 
console.log(spaceship.price); 
console.log(spaceship.applyDiscount(0.5));

 

โ—‰ ๋ฉ”์„œ๋“œ(Methods)

๋ฉ”์„œ๋“œ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๊ฐ์ฒด๊ฐ€ ํ”„๋กœํผํ‹ฐ ๊ฐ’์œผ๋กœ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๋ฉ”์„œ๋“œ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

Class์˜ method๋Š” Object(๊ฐ์ฒด)์˜ ๋ฌธ๋ฒ•๊ณผ ๋˜‘๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‹ค๋งŒ ๊ฐ์ฒด๋Š” ํ”„๋กœํผํ‹ฐ๋งˆ๋‹ค comma(,)๋กœ ๊ตฌ๋ถ„ํ•ด์ค˜์•ผ ํ–ˆ์ง€๋งŒ, ํด๋ž˜์Šค๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Car ๊ฐ์ฒด์— changeDepartment ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

class Car {
  constructor(name, price) {
    this.name = name;
    this.price = price;
    this.department = "์„ ๋ฆ‰์ง€์ ";
  }

  applyDiscount(discount) {  
    return this.price * discount;   
  }

  changeDepartment(departmentName) {
    this.department = departmentName;
  }
}

changeDepartment ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด๋ณด๊ณ  ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์˜ department ์ •๋ณด๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋Š”์ง€ ํ™•์ธํ•ด ๋ด…์‹œ๋‹ค.


Assignment

class ์ƒ์„ฑ์„ ์—ฐ์Šตํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • MyMath ๋ผ๋Š” class๋ฅผ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”.
  • constructor ์—์„œ๋Š” ์ˆซ์ž 2๊ฐœ๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„ ํ”„๋กœํผํ‹ฐ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ์ด 4๊ฐœ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์ฃผ์„ธ์š”.
    • getNumber : ๋‘ ๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ → ex) [1, 2]
    • add : ๋‘ ๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋”ํ•˜๋Š” ๋ฉ”์„œ๋“œ
    • substract : ๋‘ ๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋นผ๋Š” ๋ฉ”์„œ๋“œ
    • multiply : ๋‘ ๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๊ณฑํ•˜๋Š” ๋ฉ”์„œ๋“œ
class MyMath {
	constructor(num1, num2) {
    	this.num1 = num1;
        this.num2 = num2;
    }
    
    getNumber(){
      return [this.num1, this.num2];
}
    
    add() {
    	return this.num1 + this.num2;
    }
    
    subtract() {
    	return this.num1 - this.num2;
    }
    
     multiply() {
    	return this.num1 * this.num2;
    }
}

โ26. Object -๋‹ค์‹œ :)

โ—‰ Object 

๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํƒ€์ž…(ํ…์ŠคํŠธ, ์ˆซ์ž, ๋ฐฐ์—ด ๋“ฑ..)์ฒ˜๋Ÿผ ๋ณ€์ˆ˜์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

{} ๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š”๋ฐ์š”, ์ด๋ ‡๊ฒŒ {} ์œผ๋กœ ์ƒ๊ธด ๋ชจ์–‘์˜ ๊ฐ์ฒด๋ฅผ object literal(๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด)์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

hello ๋ผ๋Š” ๋ณ€์ˆ˜์— ๋นˆ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜์˜€์Šต๋‹ˆ๋‹ค.

let hello = {};

๊ฐ์ฒด๋Š” ์ˆœ์„œ๊ฐ€ ์—†๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค.

๋ฐ˜๋Œ€๋กœ ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.

let arr = ['๊ณ ์–‘์ด', '๊ท€์—ฌ์›Œ', '๋ฉ๋ฉ์ด', '์ข‹์•„'];

arr ์˜ ์š”์†Œ๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœ ์ถ”๊ฐ€๋œ ๊ฒƒ์ด๊ณ  index ๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

arr[0] ์€ '๊ณ ์–‘์ด' ์ด๊ณ , arr[1] ์€ '๊ท€์—ฌ์›Œ' ์ž…๋‹ˆ๋‹ค.

๊ฐ์ฒด๋Š” ํ‚ค(key)-๊ฐ’(value) ์Œ์œผ๋กœ๋œ ๋ฐ์ดํ„ฐ์˜ ๋ชจ์Œ์œผ๋กœ์จ ์ˆœ์„œ๊ฐ€ ๋’ค ๋ฐ”๋€Œ์–ด๋„ ์•„๋ฌด ์ƒ๊ด€์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ˆœ์„œ๋Œ€๋กœ index ๋กœ ์ ‘๊ทผํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ํ‚ค๋กœ ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

key๋Š” property name์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, value๋Š” property value๋ผ๊ณ ๋„ ๋งํ•ฉ๋‹ˆ๋‹ค.

์ด์ „ ๊ฐ•์˜์—์„œ๋Š” ํ”„๋กœํผํ‹ฐ๋ช…, ํ”„๋กœํผํ‹ฐ๊ฐ’์œผ๋กœ ๋ถˆ๋ €์œผ๋‹ˆ ์ด๋ฒˆ์—๋Š” ํ‚ค, ๊ฐ’์œผ๋กœ ๋ถ€๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ‚ค๋Š” ๋งˆ์น˜ ํŠน์ • ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ๋Š” ๋ณ€์ˆ˜๊ฐ™์€ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ํ‚ค๋กœ ํ”„๋กœํผํ‹ฐ์— ์–ด๋–ค ๊ฐ’์ด ์ €์žฅ๋ผ ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ‚ค์˜ ๊ฐ’์—๋Š” ํ…์ŠคํŠธ, ์ˆซ์ž ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜, ๊ฐ์ฒด๋„ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

let difficult = {
  'my name': 'boong',
  color: 'silver',
  ํ‚ค: 'ํ•œ๊ธ€์ธ ํ‚ค๋Š” ๋”ฐ์˜ดํ‘œ๊ฐ€ ์—†์–ด๋„ ๋˜๋Š”๊ตฐ!!',
  '!ํ‚ค': '๋А๋‚Œํ‘œ ์žˆ๋Š” ํ‚ค๋Š” ๋”ฐ์˜ดํ‘œ๊ฐ€ ํ•„์š”ํ•˜๊ตฐ',
  $special: '$๋Š” ์—†์–ด๋„ ๋˜๋Š”๊ตฐ'
};

๊ฐ์ฒด์˜ ํ‚ค์—๋Š” ์ŠคํŽ˜์ด์Šค, ํ•œ๊ธ€, ํŠน์ˆ˜๋ฌธ์ž ๋“ฑ์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜(variable) ์„ ์–ธํ•  ๋•Œ๋Š” ํ•  ์ˆ˜ ์—†์—ˆ๋˜ ํ‘œํ˜„์ž…๋‹ˆ๋‹ค. color ์™€ ๊ฐ™์ด ํ‚ค์— ํŠน์ˆ˜๋ฌธ์ž๊ฐ€ ์—†์œผ๋ฉด ๋”ฐ์˜ดํ‘œ๋ฅผ ์ƒ๋žตํ•˜๊ณ  ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์–‘ํ•œ ํ”„๋กœํผํ‹ฐ ๋ช…์„ ๋„ฃ์–ด๋ณด๊ณ  ์Šคํฌ๋ฆฝํŠธ ์˜ค๋ฅ˜๊ฐ€ ์—†๋Š”์ง€ ํ™•์ธํ•ด๋ณด์„ธ์š”.

 

โ—‰ ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ 

์ด์ „ ๊ฐ•์˜ Assignment๊ฐ€ ์‚ฌ์‹ค ๋” ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค. ๊ทธ ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด์„  ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ์— ์ต์ˆ™ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ์‹œ๊ฐ„์— ์ต์ˆ™ํ•ด์งˆ ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์‹œ ํ•œ ๋ฒˆ ํ›‘์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ ‘๊ทผ์€ dot(.)์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ, [] ๋Œ€๊ด„ํ˜ธ๋กœ ์ ‘๊ทผํ•˜๋Š” ๋ฒ•์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

let difficult = {
  33: '์ˆซ์ž ํ˜•์‹๋„ ๋˜๋„ค',
  'my name': '์ŠคํŽ˜์ด์Šค ํฌํ•จ ๊ฐ€๋Šฅ',
  color: 'silver',
  ํ‚ค: 'ํ•œ๊ธ€์ธ ํ‚ค๋Š” ๋”ฐ์˜ดํ‘œ๊ฐ€ ์—†์–ด๋„ ๋˜๋Š”๊ตฐ!!',
  '!ํ‚ค': '๋А๋‚Œํ‘œ ์žˆ๋Š” ํ‚ค๋Š” ๋”ฐ์˜ดํ‘œ๊ฐ€ ํ•„์š”ํ•˜๊ตฐ',
  $special: '$๋Š” ์—†์–ด๋„ ๋˜๋Š”๊ตฐ'
};
console.log(difficult.color);

์‚ฌ์‹ค ํ‚ค๋งŒ ์•Œ๊ณ  ์žˆ์œผ๋ฉด dot(.)์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ์ œ์ผ ํŽธํ•ฉ๋‹ˆ๋‹ค. dot(.)์€ ํ‚ค๋กœ ๋ฐ”๋กœ ์ ‘๊ทผํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. dot์œผ๋กœ ์ ‘๊ทผํ•  ๋•Œ๋Š” ๋”ฐ์˜ดํ‘œ ์—†์ด ํ‚ค๋ฅผ ๋ฐ”๋กœ ์จ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ [] ๋Œ€๊ด„ํ˜ธ๋กœ ์ ‘๊ทผํ•  ์ˆ˜๋„ ์žˆ์—ˆ์ฃ !

console.log(difficult['color']);

๋Œ€๊ด„ํ˜ธ๋กœ ์ ‘๊ทผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, ํ‚ค ์ด๋ฆ„์„ ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ์„œ ์ž‘์„ฑํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•œ๋ฒˆ ์ฃผ์„์„ ํ’€๊ณ  ์‹คํ–‰ํ•ด๋ณด์„ธ์š”!

console.log(difficult.my name);

์™ ์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ์‹คํ–‰์„ ์•ˆ ํ•ด๋ด๋„ ์˜ค๋ฅ˜๊ฐ€ ๋‚  ๊ฒƒ๋งŒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์ŠคํŽ˜์ด์Šค๊ฐ€ ํฌํ•จ๋œ ํ‚ค๋Š” ๋Œ€๊ด„ํ˜ธ๋กœ ์ ‘๊ทผํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

console.log(difficult['my name']);

์•„๋ž˜์˜ ์ฝ”๋“œ๋Š” ์™ ์ง€ ๋  ๊ฒƒ ๊ฐ™์ง€๋งŒ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

console.log(difficult.33);

์ˆซ์ž๋กœ ๋œ ํ‚ค๋Š” ๋Œ€๊ด„ํ˜ธ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

console.log(difficult['33']);

์–ด๋–ค ๊ฒƒ์€ dot(.)์ ‘๊ทผ ๊ฐ€๋Šฅ, ์–ด๋–ค ๊ฒƒ์€ ๋Œ€๊ด„ํ˜ธ๋งŒ ๊ฐ€๋Šฅ..

๋‹ค ์™ธ์›Œ์•ผ ํ•˜๋‚˜์š”? ์•„๋‹™๋‹ˆ๋‹ค.

์–ด์ฐจํ”ผ ์ฝ”๋”ฉํ•  ๋•Œ ์ž˜ ๋ชป ์ ‘๊ทผํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋œจ๊ธฐ ๋•Œ๋ฌธ์— ์ง€๊ธˆ ๋ชจ๋ฅด์…”๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ๋œจ๋ฉด ๊ทธ ๋•Œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ•˜๊ณ  ์ˆ˜์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค! ์ด๋ ‡๊ฒŒ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๋กœ ํ‚ค ์ด๋ฆ„์„ ์ง€์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ๋งŒ ์•Œ์•„์ฃผ์„ธ์š”.

 

 

โ—‰ ๋ณ€์ˆ˜๋กœ ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผํ•˜๊ธฐ

let name = 'ํ‚ค';
console.log(difficult[name]);

๋ณ€์ˆ˜์— ํ‚ค ์ด๋ฆ„์ด ์ €์žฅ๋˜์–ด์žˆ์œผ๋ฉด, ๋ณ€์ˆ˜๋กœ๋„ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด๋•Œ dot(.) ๋‹ค์Œ์— ๋ณ€์ˆ˜๋ช…์„ ๋„ฃ์–ด์„œ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅ ํ• ๊นŒ์š”?

console.log(difficult.name);

์ง์ ‘ ์‹คํ–‰ ํ•ด๋ด…์‹œ๋‹ค. ๋ญ๋ผ๊ณ  ๋‚˜์˜ค๋‚˜์š”? undefined ์ž…๋‹ˆ๋‹ค.

dot(.)์œผ๋กœ ์ ‘๊ทผํ•œ๋‹ค๋Š” ๋œป์€ ์‹ค์ œ ํ‚ค์ด๋ฆ„์„ ์“ธ ๋•Œ์ž…๋‹ˆ๋‹ค.

'name' ์ด๋ผ๋Š” ํ‚ค๊ฐ€ ์žˆ์—ˆ์œผ๋ฉด ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์—ˆ๊ฒ ์ง€๋งŒ, ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— undefined ๊ฐ€ ๋‚˜์˜จ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ณ€์ˆ˜๋กœ ์ ‘๊ทผํ•  ๋•Œ๋Š” ํ•ญ์ƒ ๋Œ€๊ด„ํ˜ธ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

โ—‰ ํ”„๋กœํผํ‹ฐ ํ• ๋‹น 

difficult[name] = '๊ฐ’ ๋ฐ”๊พผ๋‹ค';
console.log(difficult[name]);

difficult.color = '์ƒ‰๊น”';
console.log(difficult.color);

console.log('์ƒ์„ฑ์ „: ' + difficult.new);
difficult.new = '์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ํ”„๋กœํผํ‹ฐ';
console.log('์ƒ์„ฑํ›„: ' + difficult.new);

๊ฐ์ฒด์— ์ด๋ฏธ ํ‚ค๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ, ๋‹ค์‹œ ํ•œ ๋ฒˆ ํ• ๋‹นํ•˜๋ฉด ๊ฐ’์ด ๊ต์ฒด(์ˆ˜์ •)๋ฉ๋‹ˆ๋‹ค.

์ด์ „์— ์—†๋˜ ํ‚ค๋กœ ์ ‘๊ทผํ•˜๋ฉด, ์ƒˆ๋กœ์šด ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ถ”๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์•„์ง ์—†๋˜ ํ‚ค์— ์ ‘๊ทผํ•˜๋ฉด ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ์ค€๋น„๋Š” ๋˜์–ด์žˆ์ง€๋งŒ, ๊ฐ’์ด ์—†์Šต๋‹ˆ๋‹ค

console.log(difficult.newProperty);

์–ด๋–ค ๊ฐ’์ด ๋‚˜์˜ค๋‚˜์š”? ๋„ค, undefined ์ž…๋‹ˆ๋‹ค.

์•„์ง difficult ๋ผ๋Š” ๊ฐ์ฒด์— newProperty ํ”„๋กœํผํ‹ฐ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— undefined ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ์—†์—ˆ๋˜ ํ‚ค์— ๊ฐ’์„ ๋ฐ”๋กœ ์ž…๋ ฅํ•ด์„œ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

difficult.realNewProperty = '์ถ”๊ฐ€ ๋๋‹ค';

๊ฐ์ฒด์˜ ํŠน๋ณ„ํ•œ ์ ์„ ์•Œ๋ ค๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ์ฒด๋ฅผ const ๋กœ ์„ ์–ธํ–ˆ์„ ๋•Œ ์•Œ์ญ๋‹ฌ์ญํ•œ ํ˜„์ƒ์ด ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.

const a = 1;
a = 2;

const ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ๊ฐ’์„ ์ ˆ๋Œ€ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. a = 2; ๋ฅผ ์‹œ๋„ํ•˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ const ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜์— ๊ฐ์ฒด๋ฅผ ๋‹ค์‹œ ํ• ๋‹นํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธฐ์ง€๋งŒ, ๊ทธ ๊ฐ์ฒด์— ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

const mutableObj = {
  name: '๊ฐ์ฒด'
};

mutableObj = {
   name: '์ˆ˜์ •'
}

๋ณ€์ˆ˜ mutableObj ์ž์ฒด์— ๊ฐ์ฒด๋ฅผ ์žฌ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ํ•ด๋ณด๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค.

mutableObj.name = '์ˆ˜์ •';
mutableObj.type = 'Object ํƒ€์ž…';

๊ทธ๋ ‡์ง€๋งŒ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•ด์„œ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜, ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

 

โ—‰ Method (๋ฉ”์„œ๋“œ) 

๊ฐ์ฒด์— ์ €์žฅ๋œ ๊ฐ’์ด ํ•จ์ˆ˜์ผ ๋•Œ, ๋ฉ”์„œ๋“œ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

console.log();

console.log() ๋„ ํ˜•ํƒœ๋ฅผ ๋ณด๋‹ˆ ๊ฐ์ฒด์ธ๊ฐ€ ๋ด…๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ด๋””์—๋‚˜ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅ ํ–ˆ์œผ๋‹ˆ global ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. console ๋‹ค์Œ์— dot(.)์œผ๋กœ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ ‘๊ทผํ–ˆ๊ณ , log ๋ผ๋Š” ํ‚ค์˜ ๊ฐ’์€ ํ•จ์ˆ˜์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. log๋Š” console ์ด๋ผ๋Š” ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. ๊ฐ์ฒด์— ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

let methodObj = {
  do: function() {
    console.log('๋ฉ”์„œ๋“œ ์ •์˜๋Š” ์ด๋ ‡๊ฒŒ');
  }
}

ํ˜ธ์ถœ ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค!

methodObj.do();

 

 

โ—‰ ์ค‘์ฒฉ๋œ ๊ฐ์ฒด (Nested Object) 

์‹ค๋ฌด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด๋Š” ๊ฑฐ์˜ ์ค‘์ฒฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ๊ฐ์ฒด์ผ ์ˆ˜๋„ ์žˆ๊ณ , ํ”„๋กœํผํ‹ฐ ๊ฐ’์ธ ๋ฐฐ์—ด์˜ ์š”์†Œ๊ฐ€ ๊ฐ์ฒด์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

let nestedObj = {
	type: {
		year: '2019',
		'comment-type': [{
			name: 'simple'
		}]
	}
}

์œ„์—์„œ 'simple' ์„ ์ถœ๋ ฅํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ์š”?

console.log(nestedObj.type['comment-type'][0].name);

์ปดํ“จํ„ฐ๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•ด์„ํ•œ ๋‹ค๋Š” ๊ฒƒ์„ ๋ช…์‹ฌํ•˜๊ณ  ์ดํ•ดํ•ด์ฃผ์„ธ์š”.

ํ•ญ์ƒ ์™ผ์ชฝ์— ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ์จ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋ง์•„์ฃผ์„ธ์š”!!

  • nestedObj.type ๋Š” year, comment-type ์ด ์žˆ๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค
  • nestedObj.type['comment-type'] ๋Š” ์š”์†Œ 1๊ฐœ์ธ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
  • nestedObj.type['comment-type'][0] ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์ธ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • nestedObj.type['comment-type'][0].name ๋“œ๋””์–ด 'simple'์— ์ ‘๊ทผ!

 

โ—‰  ๊ฐ์ฒด๋Š” reference๋กœ ์ €์žฅ๋œ๋‹ค.

์กฐ๊ธˆ ์–ด๋ ค์šด ์ด์•ผ๊ธฐ๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!

๊ฐ์ฒด๋Š” reference๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.. ์Œ ๋ฌด์Šจ๋ง์ผ๊นŒ์š”?

๊ฐ์ฒด๋ฅผ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๋ฉด ๊ฐ์ฒด ์ž์ฒด๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ reference๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋Œ€๋กœ, ํ…์ŠคํŠธ๋Š” ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๋ฉด ํ…์ŠคํŠธ ์ž์ฒด๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์„œ๋กœ ๊ฐ™์€ ํ…์ŠคํŠธ๋ฅผ ๋น„๊ต์—ฐ์‚ฐ ํ•˜๋ฉด ์„œ๋กœ ๊ฐ’์ด ๊ฐ™์œผ๋ฏ€๋กœ true ์ž…๋‹ˆ๋‹ค.

const a = '์•ˆ๋…•';
const b = '์•ˆ๋…•';
console.log(a === b);

๊ทธ๋Ÿฐ๋ฐ ์•„๋ž˜์˜ ๊ฐ์ฒด๋Š” ์ƒ๊ธด ๋ชจ์–‘์ด ์•„์˜ˆ ๋˜‘๊ฐ™์€๋ฐ false ๋ผ๊ณ  ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

const hiObj = { 
  name: '์•ˆ๋…•' 
};
const helloObj = {
  name: '์•ˆ๋…•'
};
console.log('๊ฐ์ฒด๋น„๊ต =>', hiObj === helloObj);

๊ทธ ์ด์œ ๋Š” ๊ฐ์ฒด๋Š” ๋ณ€์ˆ˜์— ์ €์žฅํ•  ๋•Œ, ๊ฐ์ฒด ์ž์ฒด๋ฅผ ๊ทธ๋Œ€๋กœ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ฐ์ฒด๊ฐ€ ๋‹ด๊ธด ์–ด๋А ๋ฉ”๋ชจ๋ฆฌ์˜ reference ๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

hiObj ๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” ์ง„์งœ ๊ฐ’์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์ธ reference์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ hiObj ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ด ์ค๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ˆˆ์— ๋ณด์ด๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋˜‘๊ฐ™์ง€๋งŒ, hiObj ์™€ helloObj ๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” ์ง„์งœ ๊ฐ’์€ ๋‹ค๋ฅธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

console.log('๊ฐ์ฒด๋น„๊ต =>', hiObj === helloObj);
console.log('๊ฐ์ฒด๊ฐ’๋น„๊ต =>', hiObj.name === helloObj.name);

๊ทธ๋ž˜์„œ ๊ฐ์ฒด๋ฅผ ๋‹ด์€ ๋ณ€์ˆ˜๋ฅผ ๋น„๊ตํ•˜๋ฉด ์„œ๋กœ ๊ฐ™์ง€ ์•Š๋‹ค๊ณ  ๋‚˜์˜ต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ํ…์ŠคํŠธ์ผ ๊ฒฝ์šฐ๋Š”, ํ…์ŠคํŠธ๋ฅผ ๋น„๊ตํ•˜๊ฒŒ ๋˜์–ด ์„œ๋กœ ๊ฐ™์Œ / ๋‹ค๋ฆ„ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ํ•œ ๋ฒˆ const ๋กœ ์„ ์–ธ๋œ ๊ฐ์ฒด๋ฅผ ๋ณผ๊นŒ์š”.

const mutableObj = {
  name: '๊ฐ์ฒด'
};

mutableObj = {
   name: '์ˆ˜์ •'
}

mutableObj.name = '์ˆ˜์ • ๋ฉ๋‹ˆ๋‹ค!';

const ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์ ˆ๋Œ€ ๊ฐ’์ด ๋ฐ”๋€Œ๋ฉด ์•ˆ ๋˜๋Š”๊ฑฐ ์•„์‹œ์ฃ ? ๊ทธ๋ž˜์„œ mutableObj ์— ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค. ์™œ๋ƒ๋ฉด ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ(reference)๋กœ ์ˆ˜์ •์„ ์‹œ๋„ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .

ํ•˜์ง€๋งŒ mutableObj.name ๋กœ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•ด์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. mutableObj ๊ฐ€ ์ €์žฅ๋œ reference๊ฐ€ ๋ฐ”๋€Œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ์ˆ˜์ •๋˜๋Š” ๊ฒƒ์ด๋ผ ์ˆ˜์ •์ด ๋˜๋Š” ๊ฒƒ์ด์—ˆ ๋‹ต๋‹ˆ๋‹ค....

์ดํ•ด๊ฐ€ ์•ˆ ๋˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด stackoverflow์— ๋งŽ์ด ๋ฌผ์–ด๋ด์ฃผ์„ธ์š”!


Assignment

getAnswer ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด ์ฃผ์„ธ์š”.

  • getAnswer ํ•จ์ˆ˜๋Š” ์•„๋ž˜์˜ ๊ฐ์ฒด์—์„œ '์ƒ๋Ÿฌ๋“œ' ๋ผ๋Š” ๊ฐ’์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
     
// Assignment
let myProfile = {
  name: '๊น€๊ฐœ๋ฐœ',
  address: {
    email: 'geabal@gmail.com',
    home: '์œ„์›Œํฌ'
  },
  'my favorite': {
    food: [{
      name: '์ƒ๋Ÿฌ๋“œ',
      price: 3500
    }, {
      name: '์‚ผ๊ฒน์‚ด',
      price: 15000
    }],
    hobby: ['์ถ•๊ตฌ']
  }
}

// getAnswer ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด
// '์ƒ๋Ÿฌ๋“œ'๊ฐ€ return ๋  ์ˆ˜ ์žˆ๋„๋ก ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•ด์„œ ๋ฐ˜ํ™˜ํ•ด์ฃผ์„ธ์š”.

function getAnswer() {
  let whereIsSalad = myProfile['my favorite']['food'][0]['name'];
  return whereIsSalad;
}

โ27. [es6] arrow function

โ—‰  ES6 = ECMA Script 2015

ES๋Š” ECMA Script์˜ ์ค„์ž„๋ง์ž…๋‹ˆ๋‹ค. ECMA Script๋Š” JavaScript๋ฅผ ํ‘œ์ค€ํ™” ์‹œํ‚ค๋ ค๊ณ  ํƒ„์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.(ECMAScript (or ES) is a scripting-language specification standardized by Ecma International)

JavaScript์˜ ์—ญ์‚ฌ๋Š” ์ ์  ๊นŠ์–ด์ง€๊ณ , ๋ฌธ๋ฒ•์˜ ๋ณด์™„์ด ํ•„์š”ํ•˜๋ฉด์„œ ๋ฒ„์ „๋ณ„๋กœ ๋ฌธ๋ฒ•์„ ํ™•์žฅ์‹œํ‚ค๊ณ  ๋ธŒ๋ผ์šฐ์ €๋Š” ํŠน์ • ๋ฒ„์ „์˜ ๊ธฐ๋Šฅ๋ณ„๋กœ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋„๋ก ES๊ฐ€ ๋ช…์„ธ๋ฅผ ํ™•์ •ํ•ด์™”์Šต๋‹ˆ๋‹ค.

์ฆ‰, ECMA Script๋Š” JavaScript๋ฅผ ํ‘œ์ค€ํ™”์‹œํ‚ค๊ณ , ๊ทœ๊ฒฉํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ๋Š” ES10 ๋ฒ„์ „ ๊นŒ์ง€ ๋‚˜์™”์Šต๋‹ˆ๋‹ค. ์ฃผ๋กœ ์“ฐ์ด๋Š” ๊ฒƒ์€ ES6์ธ๋ฐ, 6์€ ๋ฒ„์ „ ์ด๋ฆ„์ด๊ณ  ES 2015๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค. 2015๋…„์— ES6๋ฒ„์ „์ด ์ตœ์ข…์œผ๋กœ ๋‚˜์™”๊ธฐ ๋•Œ๋ฌธ์ด์ฃ . 1-2๋…„ ์ „๋งŒํ•ด๋„ ES6๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์ด ๋งŽ์ง€ ์•Š์•˜์ง€๋งŒ, ์ด์ œ๋Š” ๋”์ด์ƒ ๋ฏธ๋ฃฐ ์ˆ˜ ์—†์„ ๋งŒํผ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์“ฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ฐ„ํŽธํ•œ ๊ธฐ๋Šฅ๋„ ๋งŽ์ด ์ƒ๊ฒจ์„œ ES6๋ฅผ ๋งŽ์ด ํ™œ์šฉํ•˜๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค. ์š”์ฆ˜ ES7๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค๋„ ์ ์ฐจ ๋“ค์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ES6์—๋Š” ์ •๋ง ํŽธ๋ฆฌํ•œ ํ•จ์ˆ˜๋“ค์ด ๋งŽ์ด ์ƒ๊ฒผ๊ณ , ์ฒ˜์Œ๋ณด๋Š” ๋ฌธ๋ฒ•๋“ค๋„ ๋งŽ์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ES6๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๊ณต๋ถ€๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋Š˜ ๋ฐฐ์šธ ๊ฒƒ์€ arrow function ์ž…๋‹ˆ๋‹ค. ์ด ์ „์— ๋ฐฐ์› ๋˜ function์„ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์™„์ „ํžˆ ๋‹ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ƒ๊น€์ƒˆ๋งŒ ๋ฐ”๋€ ๊ฒƒ์ด๋‹ˆ ๋„ˆ๋ฌด ์–ด๋ ต๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ๋ง์•„์ฃผ์„ธ์š”.

//ES5
function() {}

//ES6
() => {}

์ด๋ฆ„์ด ์—†๋Š” ํ•จ์ˆ˜์˜ ๊ธฐ๋ณธ์ ์ธ ํ‘œํ˜„์ž…๋‹ˆ๋‹ค.

ES6์—์„œ๋Š” function์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๊ฐ€ ๋น ์ง€๊ณ  ์†Œ๊ด„ํ˜ธ๋งŒ ๋‚จ์•˜์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  => (arrow) ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฆ„์ด ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

//ES5
function getName() {}

//ES6
const getName = () => {}

ํ˜ธ์ถœํ•  ๋•Œ๋Š” ๋‘˜ ๋‹ค ๊ฐ™์Šต๋‹ˆ๋‹ค.

getName()

ES6๋Š” ํ•จ์ˆ˜๋ฅผ getName ์ด๋ผ๋Š” ๋ณ€์ˆ˜์— ์ €์žฅ ํ–ˆ๋„ค์š”.

์‚ฌ์‹ค function(ํ•จ์ˆ˜)๋Š” ๋ณ€์ˆ˜์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํ•˜๋‚˜์˜ ์‹์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ES5 ์ผ ๋•Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ณ€์ˆ˜์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

//ES5
//Function Declaration
function getName() {}

//ES5
//Function Expression
const getName = function() {}

์“ฐ์ž„์ƒˆ๊ฐ€ ๋‹ค๋ฅผ ๋•Œ๊ฐ€ ์žˆ์ง€๋งŒ, ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ๋Š” ์ผ๋‹จ ํŽธํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด์ฃผ์„ธ์š”.

์ธ์ž๋„ ํ•œ ๋ฒˆ ๋ฐ›์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

//ES5
const getName = function(name) {}

//ES6
const getName = (name) => {}
const getName = name => {}

์ธ์ž๊ฐ€ ํ•˜๋‚˜์ผ ๋•Œ๋Š” ์†Œ๊ด„ํ˜ธ ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ธ์ž๊ฐ€ ๋‘ ๊ฐœ์ผ ๋•Œ๋Š” ์ƒ๋žตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

//ES5
const getName = function(name, age) {}

//ES6
const getName = (name, age) => {}

์ด์ œ return ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ณผ๊นŒ์š”?

//ES5
function hi(text) {
  text += 'ํ•˜์„ธ์š”';
  return text;
}

//ES6
const hi = text => { 
  text += 'ํ•˜์„ธ์š”';
  return text 
};

๋งŒ์•ฝ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋‚ด์šฉ์ด ๋”ฑํžˆ ์—†์ด return๋งŒ ํ•œ๋‹ค๋ฉด return ํ‚ค์›Œ๋“œ์™€ ์ค‘๊ด„ํ˜ธ๊ฐ€ ์ƒ๋žต๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

//ES5
function getName(name) {
  return name;
}

//ES6
const hi = name => { return name };
const hi = name => name;

์ค‘๊ด„ํ˜ธ์™€ return๋ฌธ์ด ์ƒ๋žต๋  ๊ฒฝ์šฐ, ํ™”์‚ดํ‘œ ์˜ค๋ฅธ์ชฝ์—๋Š” ๋ฆฌํ„ด๋  **"๊ฐ’"**๋งŒ ์“ฐ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค.

ํ—ท๊ฐˆ๋ฆฌ๋‚˜์š”? ์˜ˆ์ œ ํ•˜๋‚˜๋งŒ ๋” ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

//ES5
function getFullName(first, family) {
  return first + family;
}

//ES6
const hi = (first, family) => { return first + family };
const hi = (first, family) => first + family;

์—ฌ๋Ÿฌ๋ถ„!

์•„์ง ์ž˜ ์ดํ•ด๊ฐ€ ์•ˆ ๋๋‹ค๋ฉด, ์œ„์˜ ์ฝ”๋“œ๋ฅผ ์™ผ์ชฝ ์ฝ”๋“œ ์ฐฝ์—์„œ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ž‘์„ฑํ•ด์ฃผ์‹œ๊ณ ! ๊ตฌ๊ธ€ ๊ฒ€์ƒ‰์œผ๋กœ ๋” ๋งŽ์€ ์˜ˆ์ œ๋ฅผ ์ฐพ์•„์„œ ์‹คํ–‰ํ•ด๋ด์ฃผ์„ธ์š”.

์ด๋ฒˆ ๋ ˆํ”Œ๋ฆฟ์€ ์—ฐ์Šต์ฐฝ์ด์–ด์„œ ์•„๋ฌด๊ฑฐ๋‚˜ ์ž‘์„ฑํ•˜๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋„ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ต๋‹ˆ๋‹ค.


Assignment

์ด๋ฒˆ assignment๋Š” ์ž๋™์ฑ„์ ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ž‘์„ฑํ•ด์„œ ์ œ์ถœํ•˜๋ฉด ์ฑ„์ ํ•ด๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

1. function ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„๋œ welcome ํ•จ์ˆ˜๋ฅผ, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ํ‘œํ˜„์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ์„ธ์š”.

2. ์ดํ›„, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ํ‘œํ˜„๋œ handleBio ํ•จ์ˆ˜๋ฅผ, function ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„๋œ ํ•จ์ˆ˜๋กœ ๋ฐ”๊ฟ”์ฃผ์„ธ์š”.

// function ์‚ฌ์šฉ
function welcome(name){
  return "์•ˆ๋…•ํ•˜์„ธ์š”" + name
}

// ์•„๋ž˜์—์„œ ๋ณ€ํ™˜ํ•ด์ฃผ์„ธ์š”!
const welcome2 = name => "์•ˆ๋…•ํ•˜์„ธ์š”" + name;

// ES6
const handleBio = (nickname, bio) =>  {
  const user = {
    nickname : nickname,
    bio : bio,
  }
   return user;
}

// ์•„๋ž˜์—์„œ ๋ณ€ํ™˜ํ•ด์ฃผ์„ธ์š”!
function handleBio(nickname, bio) {
  const user = {
    nickname : nickname,
    bio : bio,
  }
   return user;
}

โ28. [es6] template literals, string method

โ—‰ template literals

ES6 ์—์„œ ์ถ”๊ฐ€๋œ ๋ฌธ๋ฒ•์—์„œ ํŽธํ•œ ๊ฒƒ ์ค‘ ํ•˜๋‚˜๊ฐ€ template literal ์ž…๋‹ˆ๋‹ค.

์›๋ž˜ String์„ ์ž‘์„ฑํ•  ๋•Œ ๋”ฐ์˜ดํ‘œ๋ฅผ ์‚ฌ์šฉํ–ˆ์—ˆ์ง€๋งŒ,

const name = '๊น€๊ฐœ๋ฐœ';

์ด์ œ back tick์œผ๋กœ๋„ string์„ ๊ฐ์Œ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const name = `๊น€๊ฐœ๋ฐœ`;

๊ทธ๋ฆฌ๊ณ  back tick ์œผ๋กœ ๊ฐ์‹ธ๋ฉด ๊ทธ ์•ˆ์— ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์–ด์„œ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const name = '๊น€๊ฐœ๋ฐœ';
const hi = `์•ˆ๋…•ํ•˜์„ธ์š”. ์ €๋Š” ${name} ์ž…๋‹ˆ๋‹ค.`;

๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ${} ์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ๊ฐ์‹ธ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ES5 ํ‘œํ˜„์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ํ–ˆ์—ˆ์ฃ ?

const hi = '์•ˆ๋…•ํ•˜์„ธ์š”. ์ €๋Š” ' + name + ' ์ž…๋‹ˆ๋‹ค.';

์ด๋ ‡๊ฒŒ ํ–ˆ์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์—”ํ„ฐ ์ฒ˜๋ฆฌ(๊ฐœํ–‰, break line)๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋‚˜์š”?

์•„๋ž˜์˜ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•œ๊ฐ€์š”?

์•„๋ž˜๋Š” ๋ฌธ๋ฒ• ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.

let detail = '์ž์„ธํžˆ 
๋ณด์•„์•ผ
์ด์˜๋‹ค';
console.log(detail);

์ง์ ‘ ์ž‘์„ฑํ•ด๋ณด์„ธ์š”.

๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ผ string์€ ๊ฐœํ–‰ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋ฌธ๋ฒ• ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.

๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ผ string์—์„œ ๊ฐœํ–‰์„ ํ•˜๋ ค๋ฉด ์›๋ž˜ ์•„๋ž˜์ฒ˜๋Ÿผ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

let detail = '์ž์„ธํžˆ\n'+'๋ณด์•„์•ผ\n'+'์ด์˜๋‹ค';
console.log(detail);

๊ทธ๋Ÿฐ๋ฐ template literal์—์„œ๋Š” string์„ ์ž…๋ ฅํ•œ๋Œ€๋กœ ๊ฐœํ–‰์ด ๋ฉ๋‹ˆ๋‹ค.

let detail = `์ž์„ธํžˆ 
๋ณด์•„์•ผ
์ด์˜๋‹ค

๋‚ด์ฝ”๋“œ..`;
console.log(detail);

 

โ—‰ 28-2. string method

ES6์—์„œ ์ถ”๊ฐ€๋œ ๋ช‡ ๊ฐ€์ง€ ์œ ์šฉํ•œ string method๋ฅผ ์†Œ๊ฐœํ•ด ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๊ทธ ๋™์•ˆ string์—์„œ ํŠน์ • string์„ ์ฐพ๊ธฐ ์œ„ํ•ด indexOf ๋ฅผ ์‚ฌ์šฉํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด์ œ ์•„๋ž˜์˜ 3๊ฐ€์ง€ method๊ฐ€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.

์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ๊ธฐ๋Šฅ์„ ํŒŒ์•…ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • startsWith
  • endsWith
  • includes
const email = 'yealee.kim87@gmail.com';

console.log(email.startsWith('ye'));
console.log(email.endsWith('com'));
console.log(email.includes('@gmail'));

๊ทธ๋ฆฌ๊ณ  ํŠน์ • ๋ฌธ์ž์—ด์„ ๋ฐ˜๋ณตํ•˜๊ณ  ์‹ถ์œผ๋ฉด repeat ํ•จ์ˆ˜๋ฅผ ์“ฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

'#'.repeat(3);

๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€

๐Ÿ‘‰ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ŠคํŠธ๋ง

์—์„œ ๊ผญ ๊ณต๋ถ€ํ•˜๊ณ  ๋„˜์–ด๊ฐ€์ฃผ์„ธ์š”!


Assignment

handleEdit ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด ์ฃผ์„ธ์š”.

  • ์‡ผํ•‘๋ชฐ ํšŒ์›๊ฐ€์ž…์—์„œ ํ•œ ๋ฒˆ ์ฏค์€ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ๊ตฌ๋ฅผ ๋ณด์…จ์„ ๊ฒ๋‹ˆ๋‹ค.์ด๋Ÿฌํ•œ ๋ฌธ๊ตฌ์—์„œ๋Š” ์ด๋ฆ„ ๋ถ€๋ถ„๋งŒ ๊ณ„์† ๋ฐ”๋€Œ๊ณ  ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์€ ๊ณ ์ •๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ, ์ด๋ฆ„ ๋ถ€๋ถ„์„ ๋ณ€์ˆ˜๋กœ ๊ด€๋ฆฌ ํ•˜๊ฒ ์ฃ ?
ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์œ„์ฝ”๋“œ๋‹˜!
ํšŒ์›๊ฐ€์ž… ๊ธฐ๋…์œผ๋กœ ์ฟ ํฐ์„ ์ ๋ฆฝํ•ด ๋“œ๋ ธ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด handleEdit ๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด ๋ด…์‹œ๋‹ค.
  • ์ด ํ•จ์ˆ˜๋Š” nickname, interests ๋ผ๋Š” ๋‘ string์„ ์ธ์ž๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค. nickname์€ ์œ ์ €์˜ ๋‹‰๋„ค์ž„์„, interests ๋Š” ์œ ์ €์˜ ๊ด€์‹ฌ์‚ฌ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • interests ์—๋Š” ์—ฌ๋Ÿฌ ๊ด€์‹ฌ์‚ฌ๋ฅผ ์ ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๋•Œ ๊ทธ ๊ด€์‹ฌ์‚ฌ์˜ ๊ตฌ๋ถ„์„ ์ฝค๋งˆ(,)๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.
  • nickname ๊ณผ interests ๊ฐ€ ๋ฌธ์ œ ์—†์ด ์ž˜ ๋“ค์–ด์™”๋‹ค๋ฉด ์œ ์ € ์ •๋ณด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ Object์— ์ด ์ •๋ณด๋ฅผ ๋‹ด์•„์„œ ๊ด€๋ฆฌํ•  ๊ฒ๋‹ˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด ์ž…๋ ฅ ๊ฐ’์ด nickname = "๋šœ๋น„" , interests = "๋ฐฉํƒˆ์ถœ,ํ…Œ๋‹ˆ์Šค,๋ฉ ๋•Œ๋ฆฌ๊ธฐ" ๋ผ๊ณ  ํ–ˆ์„ ๋•Œ
  • ์•„๋ž˜์™€ ๊ฐ™์€ Object๋ฅผ ๋ฆฌํ„ดํ•˜๋„๋ก ๊ตฌํ˜„ํ•ด ์ฃผ์„ธ์š”.

โš ๏ธ ์ฃผ์˜

  • interests ๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
  • interests ๋ฅผ ์ ์„ ๋•Œ ์ฝค๋งˆ(,) ๋’ค์— ์ŠคํŽ˜์ด์Šค๋Š” ์ง€์›Œ์ฃผ์„ธ์š”.
     
{
    nickname: "๋šœ๋น„",
    interests: ["๋ฐฉํƒˆ์ถœ","ํ…Œ๋‹ˆ์Šค","๋ฉ ๋•Œ๋ฆฌ๊ธฐ"],
    bio: "์ œ ๋‹‰๋„ค์ž„์€ ๋šœ๋น„์ž…๋‹ˆ๋‹ค. ์ทจ๋ฏธ๋Š” ๋ฐฉํƒˆ์ถœ,ํ…Œ๋‹ˆ์Šค,๋ฉ ๋•Œ๋ฆฌ๊ธฐ์ž…๋‹ˆ๋‹ค."
}

โœ๏ธ ํ’€์ด

// ์•„๋ž˜์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.
const handleEdit = (nickname, interests) => {
if ((nickname != undefined) && (interests != undefined)){
    const info = {
      nickname,
      interests: interests.split(','),
      bio: `์ œ ๋‹‰๋„ค์ž„์€ ${nickname}์ž…๋‹ˆ๋‹ค. ์ทจ๋ฏธ๋Š” ${interests}์ž…๋‹ˆ๋‹ค.`
      };
    return info;
  }
}

 

 


โ29. array methods

arrow function์„ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•  ๋•Œ๋Š” callback ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉํ•  ๋•Œ ์ž…๋‹ˆ๋‹ค.

callback ํ•จ์ˆ˜๋ž€, ์ธ์ž๋กœ ์ „๋‹ฌ๋˜๋Š” ํ•จ์ˆ˜๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

arrow function์„ ์กฐ๊ธˆ ๋” ์—ฐ์Šตํ•˜๊ธฐ ์œ„ํ•ด array์˜ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” map, forEach ๋ฉ”์„œ๋“œ๋ฅผ ํ•จ๊ป˜ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • Array.map()
  • Array.forEach()

์ •๋ง ๋งŽ์ด ์“ฐ์ด๋Š” ๋ฉ”์„œ๋“œ ์ž…๋‹ˆ๋‹ค!


โ—‰  Array.map() 

map ๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด์„ ๋ฐ˜๋ณตํ•ด์ฃผ๋Š”๋ฐ,

callback ํ•จ์ˆ˜์—์„œ returnํ•œ ๊ฐ’์œผ๋กœ ๋งค(each) ์š”์†Œ๋ฅผ ์ˆ˜์ •ํ•ด ์ค๋‹ˆ๋‹ค.

map ๋ฉ”์„œ๋“œ์˜ return ๊ฐ’์€ ์ˆ˜์ •๋œ ๊ฐ’์œผ๋กœ ๋‹ค์‹œ ์ƒ์„ฑ๋œ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.

์œ„์˜ ์„ค๋ช…์ด ์ „๋ถ€์ด์ง€๋งŒ, ๋” ์ž์„ธํžˆ ์˜ˆ์ œ๋ฅผ ๋ณด๋ ค๋ฉด ์•„๋ž˜ ๊ธ€์—์„œ ๋” ๊ณต๋ถ€ํ•˜๊ฑฐ๋‚˜, ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

๐Ÿ‘‰ JS Map Function

const arr = [1, 2, 3];
const squares = arr.map(x => x * x);

๋‘๋ฒˆ์งธ ์ค„์—์„œ map ๋ฉ”์„œ๋“œ์— ์ธ์ž๋กœ ๋„˜์–ด๊ฐ„ ํ•จ์ˆ˜๋ฅผ ์›๋ž˜๋Œ€๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

const squares = arr.map(function (x) { 
  return x * x;
});

Array ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์†Œ ๊ฐฏ์ˆ˜ ๋งŒํผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋ณตํ•  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰ํ•  ํ•จ์ˆ˜๋ฅผ parameter๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ด callback ํ•จ์ˆ˜์—์„œ array์˜ ์š”์†Œ๋ฅผ ์ธ์ž(x)๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ์š”์†Œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์€๋Œ€๋กœ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๊ณ  returnํ•ด์ฃผ๋ฉด,

ํ•ด๋‹น index์˜ ์š”์†Œ๊ฐ€ return ๋œ ๊ฐ’์œผ๋กœ ์น˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

์™ผ์ชฝ ์ฝ”๋“œ ์ฐฝ์—์„œ map ํ•จ์ˆ˜๋ฅผ ๋‹ค์–‘ํ•˜๊ฒŒ ํ…Œ์ŠคํŠธํ•ด๋ด์ฃผ์„ธ์š”.

 

 

โ—‰  Array.forEach() 

forEach ๋Š” for ๋Œ€์‹  ์‚ฌ์šฉํ•˜๋Š” ๋ฐ˜๋ณต๋ฌธ์ž…๋‹ˆ๋‹ค.

map ๊ณผ์˜ ํฐ ์ฐจ์ด๋Š” forEach ํ•จ์ˆ˜ ์ž์ฒด๊ฐ€ return ํ•˜๋Š” ๊ฒƒ๋„ ์•„๋ฌด๊ฒƒ๋„ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ƒฅ forEach ํ•จ์ˆ˜๋ฅผ ํƒˆ์ถœํ•˜๊ณ  ์‹ถ์„ ๋•Œ return ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

map ์€ ์š”์†Œ๊ฐ€ ์ˆ˜์ •๋œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์ด return ๋˜์—ˆ๋‹ค๋ฉด,

forEach ๋Š” ์•„๋ฌด๊ฒƒ๋„ return ํ•˜๋Š” ๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ forEach ๋กœ ์ „๋‹ฌ๋˜๋Š” callback ํ•จ์ˆ˜์—์„œ๋„ returnํ•˜๋Š” ๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹ค.

forEach ๋Š” ๋‹จ์ง€ for ๋ฌธ ๋Œ€์‹  ์‚ฌ์šฉํ•˜๋Š” ๋ฐ˜๋ณต method ์ž…๋‹ˆ๋‹ค.

let startWithNames = [];
let names = ['a', 'ab', 'cbb', 'ada'];

names.forEach(el => {   
  if (el.startsWith('a')) {     
    startWithNames.push(el);   
  } 
});
let hasC = false;
let arr = ['a', 'b', 'c', 'd'];

arr.forEach(el => {
  if (el === 'c') {
    hasC = true;
  }
});

๋งŒ์•ฝ forEach์—์„œ ํ˜„์žฌ index ๋ฅผ ์•Œ๊ณ  ์‹ถ์œผ๋ฉด ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

let idxOfC = -1;
let arr = ['a', 'b', 'c', 'd'];

arr.forEach((el, idx) => {
  if (el === 'c') {
    idxOfC = idx;
    return;
  }
});

Assignment 

๋‘ ๋ฌธ์ œ ๋ชจ๋‘ map ๋ฉ”์„œ๋“œ์™€ arrow function์„ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”.

Assignment 1.  moreThan100 ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด ์ฃผ์„ธ์š”.

์ˆซ์ž๋กœ ๊ตฌ์„ฑ๋œ ๋ฐฐ์—ด์„ ์ธ์ž๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.

100 ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด, true ๋ฅผ

100 ๋ณด๋‹ค ์ž‘์œผ๋ฉด false ๋กœ ์š”์†Œ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ, ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ return ํ•ด์ฃผ์„ธ์š”.

์˜ˆ๋ฅผ ๋“ค์–ด,

nums(input)๊ฐ€
[100, 9, 30, 7]
์ด๋ผ๋ฉด

return์€
[true, false, false, false]

Assignment 2. formatDate ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด ์ฃผ์„ธ์š”.

  • ๋‚ ์งœ๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด์„ ์ธ์ž๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • ๋‚ ์งœ์˜ data type์€ string์ด๋ฉฐ, ๋ณด๋‚ด๋Š” ๋‚ ์งœ ํƒ€์ž…์€ 'YYYY-MM-DD' ์ž…๋‹ˆ๋‹ค.
  • ํ•ด๋‹น ๋‚ ์งœ์˜ ํ˜•์‹์„ 'YYYY๋…„ MM์›” DD์ผ' ๋กœ ๋ฐ”๊ฟ”์„œ, ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ return ํ•ด์ฃผ์„ธ์š”.
  • ์˜ˆ๋ฅผ ๋“ค์–ด,
dates(input)๊ฐ€
['2019-03-21', '2019-04-21', '2019-05-21']
์ด๋ผ๋ฉด

return์€
['2019๋…„ 03์›” 21์ผ', '2019๋…„ 04์›” 21์ผ', '2019๋…„ 05์›” 21์ผ']

โœ๏ธ ํ’€์ด

const.moreThan100 = nums => {
	//[100, 9, 30, 7]
	return nums.map((value) => {
    	return 100 <= value;
	});
    //[true, false, false, false]
}

const formatDate = dates => {
	return dates.map(date => {
    	const splited = date.split("-"); //["2019", "03", "21"]
    
    	return `${year}๋…„ ${month[1]}์›” ${day[2]}์ผ`;
    })
}

โ30. Object (3)

โ—‰ ๊ฐ์ฒด์˜ ํ‚ค๋ฅผ ๋ณ€์ˆ˜๋กœ ์ ‘๊ทผํ•˜๊ธฐ 

Object ๋‘๋ฒˆ์งธ ๊ฐ•์˜์—์„œ, ๊ฐ์ฒด์˜ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด์˜ ํŠน์ • ํ‚ค์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š”๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋ฐ˜๋Œ€๋กœ ๊ฐ์ฒด์— ํŠน์ • ํ‚ค๋ฅผ ๋งŒ๋“ค๊ณ  ๊ฐ’์„ ํ• ๋‹นํ•˜๋Š”๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค! information ์ด๋ผ๋Š” ๊ฐ์ฒด ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

const information = {
  name: '๊น€๊ฐœ๋ฐœ'
}

์—ฌ๊ธฐ์— ํ‚ค ํ•˜๋‚˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ทธ ํ‚ค์— ๊ฐ’์„ ํ• ๋‹นํ•ด์ฃผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํ‚ค์™€ ๊ฐ’์„ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฐ›์•„์˜จ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ์š”?

const verb = 'developes'
const project = 'facebook'

verb์˜ ๊ฐ’์„ ํ‚ค๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ณ , project์˜ ๊ฐ’์„ ๊ทธ ํ‚ค์˜ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ–ˆ์„๋•Œ

information[verb] = project // [A]
information.developes = 'facebook' // [B]

A์™€ ๊ฐ™์ด ํ• ๋‹น์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. B์˜ ๋ฐฉ์‹์œผ๋กœ๋„ ํ• ๋‹น์ด ๊ฐ€๋Šฅํ•  ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ, ์ด ๊ฒฝ์šฐ ํ‚ค์™€ ๊ฐ’์€ ํ•ญ์ƒ ์ •ํ•ด์ ธ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ A์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์€ ๋ณ€์ˆ˜ verb์™€ project๊ฐ€ ๊ฐ€์ง€๋Š” ๊ฐ’์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํ‚ค์™€ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์ง€๋Š”๊ฒŒ ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

 

 

โ—‰ ๊ฐ์ฒด ์ˆœํšŒํ•˜๊ธฐ

์•ž์„  ๊ฐ•์˜์—์„œ ๊ฐ์ฒด๋Š” ์ˆœ์„œ๊ฐ€ ์—†๊ณ  ํ‚ค๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ด์œ ๋กœ ๊ฐ์ฒด์— ์žˆ๋Š” ๋ชจ๋“  ํ‚ค์— ํ•œ๋ฒˆ์”ฉ ์ ‘๊ทผํ•ด์•ผํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์จ์•ผํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ์š”? ๋‹คํ–‰ํžˆ๋„ ๊ฐ์ฒด๋„ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ˆœํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค!

๋‹ค๋งŒ ๋ฐฐ์—ด๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •ํ•ด์ง„ ์ˆœ์„œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์–ด๋–ค ์ˆœ์„œ์— ๋”ฐ๋ผ ๊ฐ์ฒด์˜ ํ‚ค์— ์ ‘๊ทผํ•˜๊ฒŒ ๋ ์ง€ ์•Œ ์ˆœ ์—†์Šต๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ๊ฐ์ฒด์˜ ์ˆœํšŒ๋Š” "์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š์€ ์ˆœํšŒ" ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ๋ฐฐ์—ด์„ ์ˆœํšŒํ• ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ for ๋ฌธ์„ ์‚ฌ์šฉํ–ˆ์—ˆ์ฃ ?

const arr = ['coconut', 'banana', 'pepper', 'coriander']
for (let i = 0; i < arr.length; i++) {
  console.log(arr[i])
}

์ด๋Ÿฐ ๋ฐ˜๋ณต๋ฌธ์€ ๋ฐฐ์—ด์ด length ๋ผ๋Š” ํ‚ค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๊ฐ ๋ฐฐ์—ด์š”์†Œ์— ์ ‘๊ทผํ• ์ˆ˜ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ์š”. ๊ฐ์ฒด๋Š” length ํ‚ค๊ฐ€ ๋”ฐ๋กœ ์ฃผ์–ด์ ธ์žˆ์ง€ ์•Š๊ณ , ์ธ๋ฑ์Šค๋„ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ์‹์˜ ๋ฐ˜๋ณต๋ฌธ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  ํฌ๊ฒŒ ๋‘๊ฐ€์ง€์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ์ฒด์˜ ๋ฐ˜๋ณต๋ฌธ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค!

 

 

โ—‰ Object.keys()

Object.keys ๋ฉ”์†Œ๋“œ๋Š” ์–ด๋–ค ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ‚ค๋“ค์˜ ๋ชฉ๋ก์„ ๋ฐฐ์—ด๋กœ ๋ฆฌํ„ดํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค. ๊ฐ์ฒด์˜ ๋‚ด์žฅ ๋ฉ”์†Œ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ๊ฐ์ฒด ์ƒ์„ฑ์ž์ธ Object ๊ฐ€ ์ง์ ‘ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

const obj = {
  name: 'melon',
  weight: 4350,
  price: 16500,
  isFresh: true
}

Object.keys(obj) // ['name', 'weight', 'price', 'isFresh']

Object.keys ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ฆฌํ„ดํ•˜๋Š” ๊ฐ’์€ ๋ฐฐ์—ด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฑธ๋กœ ์šฐ๋ฆฌ๊ฐ€ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

const keys = Object.keys(obj) // ['name', 'weight', 'price', 'isFresh']

for (let i = 0; i < keys.length; i++) {
  const key = keys[i] // ๊ฐ๊ฐ์˜ ํ‚ค
  const value = obj[key] // ๊ฐ๊ฐ์˜ ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ๊ฐ์˜ ๊ฐ’
  console.log(value)
}

์ƒˆ๋กœ์šด ES6 ๋ฌธ๋ฒ•์—์„œ๋Š” Object.keys ์™ธ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Object์ƒ์„ฑ์ž์˜ ๋ฉ”์†Œ๋“œ์ธ Object.values, Object.entries ์™€ ๊ฐ™์€ ์ž๋งคํ’ˆ๋“ค์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Object.values ๋Š” ๊ฐ์ฒด์˜ ํ‚ค๊ฐ€ ์•„๋‹Œ ๊ฐ’์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐฐ์—ด์„ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค. Object.entries ๋Š” ๊ฐ์ฒด์˜ ํ‚ค์™€ ๊ฐ’์˜ ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๊ธธ์ด 2์งœ๋ฆฌ ๋ฐฐ์—ด๋กœ ์ด๋ฃจ์–ด์ง„, ๋ฐฐ์—ด์„ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ฐฐ์—ด์—์„œ ์ธ๋ฑ์Šค [0]์˜ ๊ฐ’์€ ๊ฐ๊ฐ์˜ ํ‚ค๋ฅผ, ์ธ๋ฑ์Šค [1]์˜ ๊ฐ’์€ ํ•ด๋‹น ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

const values = Object.values(obj)
// values === ['melon', 4350, 16500, true]

const entries = Object.entries(obj)

/*
entries === [
  ['name', 'melon'],
  ['weight', 4350],
  ['price', 16500],
  ['isFresh', true]
]
*/

Object.entries๊ฐ€ ์กฐ๊ธˆ ๋ณต์žกํ•ด๋ณด์ด๊ธด ํ•˜์ง€๋งŒ, Object.keys, Object.values, Object.entries ์„ธ๊ฐ€์ง€ ์ค‘์—์„œ ์ œ์ผ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ž…๋‹ˆ๋‹ค. ๊ผญ ์•Œ์•„๋‘์„ธ์š”.

 

 

โ—‰  for-in 

๊ฐ์ฒด๋ฅผ ์ˆœํšŒํ•˜๋Š” ๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ for-in ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ณต๋ฌธ์ธ for๋ฌธ๊ณผ ๊ฐ™์€ ์ข…๋ฅ˜์˜ ๋ฌธ๋ฒ•์ด์ง€๋งŒ, ๊ฐ์ฒด์™€ ๋ฐฐ์—ด์„ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ์กด์žฌํ•˜๋Š”, ES6 ์—์„œ ์ถ”๊ฐ€๋œ ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด๊ฑด ๊ฐ์ฒด ์ˆœํšŒ ์™ธ์—๋„, ์ผ๋ฐ˜์ ์ธ ๋ฐฐ์—ด์„ ์ˆœํšŒํ• ๋•Œ๋„ ์•„์ฃผ ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”.

const arr = ['coconut', 'banana', 'pepper', 'coriander']

for (let i = 0; i < arr.length; i ++) {
  console.log(i)
  console.log(arr[i])
}

์•ž์„œ ์˜ˆ์‹œ๋กœ ๋“ฑ์žฅํ–ˆ์—ˆ๋˜ ๋ฐฐ์—ด์˜ ๋ฐ˜๋ณต๋ฌธ์ž…๋‹ˆ๋‹ค. for๋ฌธ์„ ๊ทธ๋™์•ˆ ๋งŽ์ด ์จ๋ณธ ๋ถ„๋“ค์ด๋ผ๋ฉด, ๋ฐฐ์—ด์— ๋Œ€ํ•œ for๋ฌธ ์„ ์–ธ์‹œ ์“ฐ๋Š” for(let i = 0; i < arr.length; i ++) ์ด๋Ÿฐ ๋ฌธ๋ฒ•์ด ์•„์ฃผ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ๋ฒ•์ด๋ผ๋Š”๊ฑธ ์•Œ๊ณ ๊ณ„์‹คํ…๋ฐ์š”. ์ด๊ฑธ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ถ•์•ฝํ•œ ๋ฌธ๋ฒ•์ด ๋ฐ”๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

for (let i in arr) {
  console.log(i)
  console.log(arr[i])
}

i๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , ๋ฐฐ์—ด์˜ ๊ธธ์ด์™€ ๋น„๊ตํ•˜๊ณ , i๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๋“ฑ์˜ ์ฝ”๋“œ๋ฅผ ์ƒ๋žตํ• ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“  ES6 ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด for-in ๋ฌธ์€ ์ธ๋ฑ์Šค์˜ ๊ฐ’์œผ๋กœ ๋ฌด์—‡์„ ํ• ๋‹นํ•˜๊ณ , ๋ฐ˜๋ณต๋ฌธ์ด ๋ช‡๋ฒˆ ๋Œ์•„์•ผ ํ•  ์ง€๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„ ๋‚ด๋ถ€์—์„œ ์ž๋™์œผ๋กœ ๊ฒฐ์ •ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

for-in ๋ฌธ์€ ๋ฐฐ์—ด๋ฟ ์•„๋‹ˆ๋ผ ๊ฐ์ฒด์—์„œ๋„ ์ž‘๋™ํ•˜๋„๋ก ๋งŒ๋“ค์–ด์กŒ๋Š”๋ฐ์š”.

const obj = {
  name: 'melon',
  weight: 4350,
  price: 16500,
  isFresh: true
}

for (let key in obj) {
  const value = obj[key]

  console.log(key)
  console.log(value)
}

์ด๋ ‡๊ฒŒ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  for-in ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด, for-in ๋ฌธ์˜ ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ๋ณ€์ˆ˜๊ฐ€, ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฐ์ฒด์˜ ๊ฐ๊ฐ์˜ ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์ž์—ด์„ ํ• ๋‹น๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


Assignment

์•„๋ž˜ ์„ค๋ช…์„ ์ฝ๊ณ  getExamResult ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜์„ธ์š”.

์ธ์ž scores ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ๊ฐ์ฒด์˜ ์š”์†Œ์˜ ๊ฐฏ์ˆ˜ ๋ฐ ํ‚ค์˜ ์ด๋ฆ„๋“ค์€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์ฒด์˜ ๊ฐ’์€ ๋‹ค์Œ 9๊ฐ€์ง€ ๋ฌธ์ž์—ด ์ค‘์—์„œ ํ•˜๋‚˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • 'A+', 'A', 'B+', 'B', 'C+', 'C', 'D+', 'D', 'F'
{
  '์ƒํ™œ์†์˜ํšŒ๊ณ„': 'C',
  '๋…ผ๋ฆฌ์ ๊ธ€์“ฐ๊ธฐ': 'B',
  '๋…์ผ๋ฌธํ™”์˜์ดํ•ด': 'B+',
  '๊ธฐ์ดˆ์ˆ˜ํ•™': 'D+',
  '์˜์–ดํšŒํ™”': 'C+',
  '์ธ์ง€๋ฐœ๋‹ฌ์‹ฌ๋ฆฌํ•™': 'A+',
}

์ธ์ž requiredClasses ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฌธ์ž์—ด๋กœ ๋œ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.

['์˜์–ดํšŒํ™”', '๊ธฐ์ดˆ์ˆ˜ํ•™', '๊ณตํ•™์ˆ˜ํ•™', '์ปดํ“จํ„ฐ๊ณผํ•™๊ฐœ๋ก ']

๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•˜๋„๋ก ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด์ฃผ์„ธ์š”.

  1. scores ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ‚ค๋“ค์€ ์ƒˆ๋กœ์šด ๊ฐ์ฒด์— ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, ๊ทธ ๊ฐ’๋“ค์€ ๋‹ค์Œ ์›๋ฆฌ์— ๋”ฐ๋ผ ์ˆซ์ž๋กœ ๋ฐ”๋€Œ์–ด ํ• ๋‹น๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • A+ => 4.5
    • A => 4
    • B+ => 3.5
    • B => 3
    • C+ => 2.5
    • C => 2
    • D+ => 1.5
    • D => 1
    • F => 0
  2. requiredClasses ๋ฐฐ์—ด์˜ ์š”์†Œ๋กœ๋Š” ์กด์žฌํ•˜์ง€๋งŒ, scores์˜ ํ‚ค๋กœ๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ•ญ๋ชฉ์ด ์žˆ๋‹ค๋ฉด, ํ•ด๋‹น ์š”์†Œ๋Š” ์ƒˆ๋กœ์šด ๊ฐ์ฒด์˜ ํ‚ค๊ฐ€ ๋˜๊ณ , ๊ฐ’์œผ๋กœ 0์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์œ„์—์„œ ์˜ˆ์‹œ๋กœ ๋ฌ˜์‚ฌ๋œ ๊ฐ์ฒด์™€ ๋ฐฐ์—ด์ด ์ธ์ž๋กœ ๋“ค์–ด์™”๋‹ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ์ฒด๊ณผ ๋ฆฌํ„ด๋ฉ๋‹ˆ๋‹ค. ์š”์†Œ๊ฐ„ ์ˆœ์„œ๋Š” ๋‹ค๋ฅผ์ˆ˜ ์žˆ์ง€๋งŒ, ์ฑ„์ ์— ๋ฌด๊ด€ํ•ฉ๋‹ˆ๋‹ค.
     
{
  '์ƒํ™œ์†์˜ํšŒ๊ณ„': 2,
  '๋…ผ๋ฆฌ์ ๊ธ€์“ฐ๊ธฐ': 3,
  '๋…์ผ๋ฌธํ™”์˜์ดํ•ด': 3.5,
  '๊ธฐ์ดˆ์ˆ˜ํ•™': 1.5,
  '์˜์–ดํšŒํ™”': 2.5,
  '์ธ์ง€๋ฐœ๋‹ฌ์‹ฌ๋ฆฌํ•™': 4.5,
  '๊ณตํ•™์ˆ˜ํ•™': 0,
  '์ปดํ“จํ„ฐ๊ณผํ•™๊ฐœ๋ก ': 0,
}
// Assignment ๋ฐฉ๋ฒ•1

const getExamResult = (scores, requiredClasses) => {
  const result = {}
  const list = {
    "A+":4.5,
    "A":4,
    "B+":3.5,
    "B":3,
    "C+":2.5,
    "C":2,
    "D+":1.5,
    "D":1,
    "F":0    
  }
  
  for(let key in scores){
    result[key] = list[scores[key]];
  }
  
  const keys=Object.keys(result)
  for(let i in requiredClasses){
    if(!keys.includes(requiredClasses[i])){
      result[requiredClasses[i]] = 0;
    }
  }
  
  return result;
}
// Assignment ๋ฐฉ๋ฒ•2

const getExamResult = (scores, requiredClasses) => {
  const result = scores;
  
  for(let key in result){
    if(result[key] === "A+"){
      result[key] = 4.5;
    }
    else if(result[key] === "A"){
      result[key] = 4;
    }
    else if(result[key] === "B+"){
      result[key] = 3.5;
    }
    else if(result[key] === "B"){
      result[key] = 3;
    }
    else if(result[key] === "C+"){
      result[key] = 2.5;
    }
    else if(result[key] === "C"){
      result[key] = 2;
    }
    else if(result[key] === "D+"){
      result[key] = 1.5;
    }
    else if(result[key] === "D"){
      result[key] = 1;
    }
    else if(result[key] === "F"){
      result[key] = 0;
    }
  }
  
  requiredClasses.forEach((el) => {
   if(result[el] === undefined){
      result[el] = 0;
    }
  })
  
  return result
}

 

'TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

TIL :: code-kata-js / (2)  (0) 2022.05.25
TIL :: code-kata-js / (1)  (0) 2022.05.24
TIL :: DOM + Event  (0) 2022.05.17
TIL :: JavaScript / replit. 21~24  (0) 2022.05.17
TIL :: JavaScript / replit. 11~20  (0) 2022.05.17