λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ’¬/γ…γ……γ…Œγ…‹γ…γ…… μ±Œλ¦°μ§€

21일차

πŸ“¦

21일차

 

Part 4. JavaScript Level up

Ch 1. JS 데이터

 


 

Ch 1. JS 데이터

 

 

주제

 

  • JS 문법

 

 

μ£Όμš” λ‚΄μš©

 

 πŸ”— 객체 

 

정적(static) λ©”μ†Œλ“œ: prototype이 λΆ™μ–΄ μžˆμ§€ μ•ŠλŠ” λ©”μ†Œλ“œ => μ‹€μ œ 데이터 객체에 직접 μ‚¬μš©ν•  수 μ—†λ‹€.

 

  • object.assign(target, sources): ν•˜λ‚˜ μ΄μƒμ˜ 좜처 객체(sources)λ‘œλΆ€ν„° λŒ€μƒ 객체(target)둜 속성을 볡사
const userAge = {
  // key: value
  name: "Yujin",
  age: 23,
};
const userEmail = {
  name: "Yujin",
  email: "yujinny00@gmail.com",
};

const target = Object.assign({}, userAge);
console.log(target);
console.log(userAge);
console.log(target === userAge);

// μ„œλ‘œ λ‹€λ₯Έ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό 바라 λ΄„.
const a = { k: 123 };
const b = { k: 123 };
console.log(a === b);

 

 

  • object.keys(obj): key λ“€λ§Œ μΆ”μΆœν•˜μ—¬ μƒˆλ‘œμš΄ λ°°μ—΄λ‘œ λ³€ν™˜
const user = {
  name: "Yujin",
  age: 23,
  email: "hyjinny00@gmail.com",
};

const keys = Object.keys(user);
console.log(keys);
// ['name', 'age', 'email']

console.log(user["email"]);

const values = keys.map((key) => user[key]);
console.log(values);

 

 

 

 πŸ”— ꡬ쑰 λΆ„ν•΄ ν• λ‹Ή 

const user = {
  name: "Yujin",
  age: 23,
  email: "hyjinny00@gmail.com",
  address: "USA",
};

const { name: yujin, age, address = "Korea" } = user;
// {address = "Korea"} : κΈ°λ³Έκ°’ 지정

console.log(`μ‚¬μš©μžμ˜ 이름은 ${name}μž…λ‹ˆλ‹€.`);
console.log(`${yujin}의 λ‚˜μ΄λŠ” ${age}μž…λ‹ˆλ‹€.`);
console.log(`${yujin}의 이메일 μ£Όμ†ŒλŠ” ${user.email}μž…λ‹ˆλ‹€.`);
console.log(address);

const fruits = ["Apple", "Banana", "Cherry"];
const [, , b] = fruits;
console.log(b);

 

 

 

 πŸ”— μ „κ°œ μ—°μ‚°μž (Spread) : ν•˜λ‚˜μ˜ λ°°μ—΄ 데이터λ₯Ό μ‰Όν‘œ(,)둜 κ΅¬λΆ„ν•˜λŠ” 각각의 μ•„μ΄ν…œμœΌλ‘œ μ „κ°œν•΄μ„œ 좜λ ₯

const fruits = ["Apple", "Banana", "Cherry", "Orange"];
console.log(fruits);
console.log(...fruits);
// console.log('Apple', 'Banana', 'Cherry')

const toObject = (a, b, ...c) => ({
  a,
  b,
  c,
});
console.log(toObject(...fruits));

 

 

 

 πŸ”— λΆˆλ³€μ„± (Immutability) 

 

μ›μ‹œ 데이터: String, Number, Boolean, undefined, null

  • 데이터가 'λΆˆλ³€'ν•˜κΈ° λ•Œλ¬Έμ— λ°μ΄ν„°μ˜ μƒκΉ€μƒˆκ°€ λ˜‘κ°™μœΌλ©΄ 같은 데이터라고 봐도 λ¬΄λ°©ν•˜λ‹€.

 

 

let a = 1;
let b = 4;

console.log(a, b, a === b); // a b의 λ©”λͺ¨λ¦¬ μ£Όμ†Œκ°€ λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— μΌμΉ˜ν•˜μ§€ μ•ŠλŠ”λ‹€.
b = a;
console.log(a, b, a === b);
a = 7;
console.log(a, b, a === b);
let c = 1; // μ›μ‹œ λ°μ΄ν„°λŠ” ν•œ 번 λ§Œλ“€μ–΄μ§€λ©΄ μƒˆλ‘œ λ§Œλ“€μ–΄μ§€λŠ” 것이 μ•„λ‹ˆλΌ 'λΆˆλ³€'ν•œλ‹€.
console.log(b, c, b === c);

 

 

 

μ°Έμ‘°ν˜• 데이터: Object, Array, Function

  • 데이터가 λΆˆλ³€ν•˜λŠ” κ°œλ…μ΄ μ•„λ‹ˆκΈ°('κ°€λ³€'ν•˜κΈ°) λ•Œλ¬Έμ—, μ„ μ–Έν•  λ•Œ λ§ˆλ‹€ μƒˆλ‘œμš΄ λ©”λͺ¨λ¦¬ μ£Όμ†Œμ— 데이터듀이 ν• λ‹Ήλ˜μ–΄ μƒκΉ€μƒˆκ°€ λ˜‘κ°™λ”λΌλ„ 같은 데이터가 아닐 수 μžˆλ‹€.
  • (주의) ν•œ μͺ½μ„ μˆ˜μ •ν•˜λ©΄ μ˜λ„μΉ˜ μ•Šκ²Œ λ‹€λ₯Έ μͺ½λ„ μˆ˜μ •λœλ‹€.
  • (ν•΄κ²°) '볡사'λΌλŠ” κ°œλ…μ„ ν†΅ν•΄μ„œ 데이터λ₯Ό λ©”λͺ¨λ¦¬ μƒμ—μ„œ λΆ„λ¦¬ν•œλ‹€.

 

 

let a = { k: 1 };
let b = { k: 1 };

// μ°Έμ‘°ν˜• λ°μ΄ν„°λŠ” μƒˆλ‘œμš΄ 값을 λ§Œλ“€ λ•Œ λ§ˆλ‹€, μƒˆλ‘œμš΄ λ©”λͺ¨λ¦¬ μ£Όμ†Œμ— ν• λ‹Ήλœλ‹€. => λΆˆλ³€μ„±μ΄ μ—†λ‹€. 'κ°€λ³€'ν•œλ‹€.
// (주의) 같은 λ©”λͺ¨λ¦¬λ₯Ό 바라보고 μžˆλŠ” μ—¬λŸ¬ 개의 λ³€μˆ˜κ°€ μžˆμ„ λ•Œ, ν•œ μͺ½μ˜ λ³€μˆ˜μ— μžˆλŠ” 값을 μˆ˜μ •ν•˜λ©΄ λ‹€λ₯Έ 값이 μ˜λ„ν•˜μ§€ μ•Šκ²Œ λ°”κ»΄μ Έ μžˆλŠ” μƒνƒœκ°€ 될 수 μžˆλ‹€.

console.log(a, b, a === b); // a b의 λ©”λͺ¨λ¦¬ μ£Όμ†Œκ°€ λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— μΌμΉ˜ν•˜μ§€ μ•ŠλŠ”λ‹€.
a.k = 7;
b = a;
console.log(a, b, a === b);
a.k = 2;
console.log(a, b, a === b);
let c = b;
console.log(a, b, c, a === c);

 

 

 

 πŸ”— 얕은 볡사와 κΉŠμ€ 볡사 

 

  • κΉŠμ€ 볡사 (lodash - ._cloneDeep())

https://lodash.com/docs/4.17.15#cloneDeep

 

Lodash Documentation

_(value) source Creates a lodash object which wraps value to enable implicit method chain sequences. Methods that operate on and return arrays, collections, and functions can be chained together. Methods that retrieve a single value or may return a primiti

lodash.com

import _ from "lodash";

const user = {
  name: "Yujin",
  age: 23,
  emails: ["hyjinny00@gmail.com"],
};

// 얕은 볡사
// const copyUser = Object.assign({}, user);
// const copyUser = { ...user };
// κΉŠμ€ 볡사
const copyUser = _.cloneDeep(user);
console.log(copyUser === user);

user.age = 13;
console.log("user", user);
console.log("copyUser", copyUser);

console.log("------");
console.log("------");

// κΉŠμ€ 볡사 => μ°Έμ‘° 데이터 μ•ˆ μ°Έμ‘° 데이터(emile)은 ν•œ 번 더 κΉŠμ€ 볡사λ₯Ό ν•΄μ€˜μ•Ό 됨.
user.emails.push("hyjinny00@naver.com");
console.log(user.emails === copyUser.emails);
console.log("user", user);
console.log("copyUser", copyUser);

 

 

 

λŠλ‚€μ 

 

 μ§€κΈˆκΉŒμ§€ 배운 JS 문법듀이 μ§μ ‘μ μœΌλ‘œ μ›Ήμ‚¬μ΄νŠΈλ₯Ό λ§Œλ“œλŠ”λ° μ–΄λ–€ 도움이 될지 μΆ”μƒμ μœΌλ‘œ ν•™μŠ΅ν•œ 것이라고 말할 수 μžˆλ‹€. κ·Έλž˜μ„œ μ§€κΈˆ 배운 κ²ƒλ“€λ‘œ μ–΄λ–»κ²Œ μ›Ήμ‚¬μ΄νŠΈλ₯Ό λ§Œλ“œλŠ”μ§€ ??? μƒνƒœμΌ 수 μžˆλ‹€.

 ν•˜μ§€λ§Œ JSλ₯Ό ν†΅ν•΄μ„œ 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” κ³Όμ • μžμ²΄κ°€ μ›Ή μ‚¬μ΄νŠΈλ₯Ό λ§Œλ“œλŠ”λ° μ€‘μš”ν•œ μž‘μš©μ„ ν•œλ‹€. κ·ΈλŸ¬λ―€λ‘œ JS 데이터λ₯Ό μ˜¨μ „νžˆ μˆ™λ‹¬ν•˜κ³  κ΄€λ¦¬ν•˜μ§€ λͺ»ν•˜λ©΄ κ²°κ΅­μ—λŠ” μ›Ή μ‚¬μ΄νŠΈλ₯Ό λ§Œλ“œλŠ”λ° 지μž₯이 생긴닀.

 κ²°κ΅­ μš°λ¦¬λŠ” μ§€κΈˆ 'JS' ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ 문법 자체λ₯Ό 배운 것이고, 이것을 톡해 μ›Ή μ‚¬μ΄νŠΈλ₯Ό λ§Œλ“œλŠ” 방법은 λ’€μͺ½μ—μ„œ Vue, Reactλ₯Ό ν•™μŠ΅ν•˜λŠ” μ‹œκ°„μ— μΆ©λΆ„νžˆ μ•Œμ•„ λ³Όκ±°λ‹€.

 κ·ΈλŸ¬λ‹ˆκΉŒ μ§€κΈˆμ€ μ›Ή μ‚¬μ΄νŠΈλ₯Ό μ œμž‘ν•˜λŠ” κ±°μ—λŠ” ??? μ΄κ² μ§€λ§Œ μ‘°κΈˆμ€ 이것을 내렀놓고, JS ν•™μŠ΅ μ‹œκ°„μ—λŠ” 문법 μžμ²΄μ— μ§‘μ€‘ν•΄μ„œ ν•™μŠ΅μ„ ν•˜λ©΄ 였히렀 좔후에 도움이 될 κ±°λ‹€.

 

 μŒ€μ΄ 이번 κ°•μ˜ μ΄ˆλ°˜μ— 말씀 ν•˜μ‹  건데 쒋은 말인거 κ°™μ•„μ„œ κ°€μ Έμ™”λ‹€!!!