๐ Javascript ๋ฐ์ดํฐ #02 :)
4. ๊ฐ์ฒด(Object)
๐ ์ ์ ๋ฉ์๋(Static)
: Object๊ฐ์ฒด์ prototype ์์ฑ์ ๋ฉ์๋๊ฐ ์๋ ๋ฉ์๋
: ์ง์ ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๋ฉ์๋!!!!
ex) {}.assign() -> ์ฌ์ฉ ๋ชปํจ
๐ต Object.assign()
- ์ถ์ฒ ๊ฐ์ฒด๋ค์ ๋ชจ๋ ์ด๊ฑฐ ๊ฐ๋ฅํ ์์ฒด ์์ฑ์ ๋ณต์ฌํด ๋์ ๊ฐ์ฒด์ ๋ถ์ฌ๋ฃ๋๋ค. ๊ทธ ํ ๋์ ๊ฐ์ฒด๋ฅผ ๋ฐํํจ.
- assign(๋์๊ฐ์ฒด, ํ๋ ์ด์์ ์ถ์ฒ ๊ฐ์ฒด)
: ๋ฐํ๊ฐ -> ๋์๊ฐ์ฒด!!!!
๐พ #1
const target = { a:1, b:2 };
const source = { b: 4, c:5 };
const returnTarget = Object.assign(target, source);
console.log(target);
// Object { a: 1, b: 4, c: 5 }
console.log(returnTarget);
// Object { a: 1, b: 4, c: 5 }
console.log(target === returnTarget); // true
assign({}, ํ๋ ์ด์์ ์ถ์ฒ ๊ฐ์ฒด)
: ๋น์ด์๋ ๊ฐ์ฒด์ ๋๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ฝ์ ํด, ๋๊ฐ์ ๊ฐ์ฒด๋ฅผ ํฉ์น ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ฌ!!
๐พ #2
const source1 = { a:1, b:2 };
const source2 = { b: 4, c:5 };
const returnTarget = Object.assign({}, source1, source2);
console.log(returnTarget);
// Object {a: 1, b: 4, c: 5}
๐ต Object.Keys()
Object.Keys(๊ฐ์ฒด)
: ๊ฐ์ฑ์ key๋ฅผ ์ถ์ถํ์ฌ ์๋ก์ด ๋ฐฐ์ด ๋ฐ์ดํฐ๋ก ๋ฐํํจ
๐พ #1
const user = {
name: 'Zooyaho',
age: 24,
email: '[email protected]'
}
const keys = Object.keys(user)
console.log(keys) // ['name', 'age', 'email']
๊ฐ์ฒด ๋ฐ์ดํฐ๋ ์ธ๋ฑ์ฑ๋ฐฉ๋ฒ์ ์ ๊ณตํจ!!!!
console.log(user['email']) // [email protected]
const values = keys.map(key => user[key])
console.log(values)
// ['Zooyaho', 24, '[email protected]']
5. ๊ตฌ์กฐ ๋ถํด ํ ๋น(Destructuring assignment) == ๋น๊ตฌ์กฐํ ํ ๋น
๐ต ๊ฐ์ฒด๋ฐ์ดํฐ์์์ ๊ตฌ์กฐ ๋ถํด ํ ๋น
- ๊ฐ์ฒด ๋ฐ์ดํฐ์์ ๋ด์ฉ์ ๊ตฌ์กฐ๋ถํดํด์ ๋ด๊ฐ ์ํ๋ ์์ฑ๋ค๋ง ๊บผ๋ด์ ์ฌ์ฉํ ์์์.
- ๊ฐ์ฒด์ ์์ฑ์ด ๋ง์ ๋ ํ์ํ ๋ฐ์ดํฐ๋ง ๊บผ๋ด์ด ์ฌ์ฉํ ์ ์์.
- const { key1, key2, key3, ...} = ๊ฐ์ฒด๋ช
-> ${๊ฐ์ฒด๋ช .key1} ์๋ ${key1}๋ก ์ฌ์ฉ ๊ฐ๋ฅ = ๊ฐํธํด์ง.
๐พ #1
const user = {
name = 'Zooyaho',
age: 85,
email: '[email protected]'
}
cost {name, age, email, address} = user
๐ ๋ณ๋ช
์ง์ ํ์ฌ ์ฌ์ฉ
const { key1: nickname, key2, key3, ...} = ๊ฐ์ฒด๋ช
-> ${key1}์ด ์๋ ์ง์ ํ ๋ณ์ ${nickname}์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ, key1๋ ์ฌ์ฉ ๋ถ๊ฐ๋ฅ(error)
๐ ๊ธฐ๋ณธ๊ฐ ์ง์
const { key1 = 'zooyaho', key2, key3, ...} = ๊ฐ์ฒด๋ช
-> ${key1} ๋ฐํ ์ undefined๊ฐ ์๋ zooyaho๋ก ๋ฐํ ๋จ
-> ๊ฐ์ฒด์ key1์ ๊ฐ์ด ์ง์ ๋์ด ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ์ ๋ฌด์๋จ.
๐ต ๋ฐฐ์ด๋ฐ์ดํฐ์์์ ๊ตฌ์กฐ ๋ถํด ํ ๋น
- const [a, b, c, d] = ๊ฐ์ฒด
-> ์ธ๋ฑ์ค ๋ฒํธ๋ฅผ ๊ฐ๊ฐ a, b, c, d๋ก ์ง์ ํ์ฌ
console.log(a,b,c,d)๋ก ๋ฐฐ์ด ๊ฐ๋ค์ ์ถ๋ ฅํจ!- ์ด๋ฆ์ด ์๋ ์์๋๋ก ๊ตฌ์กฐ ๋ถํด๋ฅผ ํจ!!
๐พ #1
const fruits = ['Apple', 'Banana', 'Cherry']
const [a, b, c, d] = fruits
console.log(a,b,c,d) // Apple Banana Cherry undefined
๐ ํน์ ์ธ๋ฑ์ค๋ฒํธ๋ง ๊ตฌ์กฐ ๋ถํดํ ๊ฒฝ์ฐ
- 1์ธ๋ฑ์ค๋ง ๋น๊ตฌ์กฐํ ํ ๋น์ ํ๋ ค๋ฉด ๋ช ์ํ์ง ์๊ณ ์ผํ๋ง ์์ฑํจ!
๐พ #2
const [, b] = fruits
console.log(b) // Banana
6. ์ ๊ฐ ์ฐ์ฐ์(Spread) ...
- ํ๋์ ๋ฐฐ์ด๋ฐ์ดํฐ๋ฅผ ์ผํ๋ก ๊ตฌ๋ถํ๋ ๊ฐ๊ฐ์ ์์ดํ ์ผ๋ก ์ ๊ฐํด์ ์ถ๋ ฅํจ
๐พ #1
const fruits = {'Apple', 'Banana', 'Cherry'}
console.log(...fruits) // Appple Banana Cherry
function toObjsct(a,b,c) {
return {
a:a,
b:b,
c:c
}
}
console.log(toObjsect(...fruits))
// {a: 'Apple', b:'Banana', c:'Cherry'}
๐ ๋งค๊ฐ๋ณ์์์ ์ ๊ฐ์ฐ์ฐ์ ์ฌ์ฉํ๊ธฐ
- rest parameter: ๋๋จธ์ง์ ๋ชจ๋ ์ธ์๋ฅผ ๋ค ๋ฐ์๋ด๋ ์ญํ
- ๋ฐฐ์ด์ ๋๋จธ์ง item์ ๋ฃ์ ์ธ์๋ ๋ฐฐ์ด์ ๋ฐํํจ.
๐พ #2
const fruits = {'Apple', 'Banana', 'Cherry', 'Orange'}
function toObjsct(a,b,...c) {
return {
a:a,
b:b,
c:c
}
}
console.log(toObjsect(...fruits))
// {a: 'Apple', b:'Banana', c:Array(2)}
/* ์ถ์ฝํ */
// 1. ์์ฑ์ ์ด๋ฆ์ ๋ฐ์ดํฐ์ ์ด๋ฆ์ด ๊ฐ์ผ๋ฉด ์ถ์ฝ๊ฐ๋ฅ
function toObject(a, b, ...c) {
return { a, b, c }
}
// 2. ํ์ดํ ํจ์
const toObject = (a, b, ...c) => ({ a, b, c })
// {}๋ ํจ์์ ๋ฒ์๋ฅผ ๋ํ๋ด๋ ๋จ์ํ ๋ธ๋ก์ ์๋ฏธ๋ก ํด์๋๊ธฐ ๋๋ฌธ์ ()์ ๋ถ์ฌ์ผ ๊ฐ์ฒด๋ฐ์ดํฐ๋ฅผ ๋ฐํํจ!!!
7. ๋ฐ์ดํฐ ๋ถ๋ณ์ฑ(Immutability)
- ์์ ๋ฐ์ดํฐ: String, Number, Boolean, undefined, null
- ์ฐธ์กฐํ ๋ฐ์ดํฐ: Object, Array, Function
- ์์๋ฐ์ดํฐ๋ ๋ถ๋ณ์ฑ, ์ฐธ์กฐํ์ ๊ฐ๋ณ์ฑ์ ๋๋ค.
๐ ์์ ๋ฐ์ดํฐ
๐พ #1
let a = 1
let b = 4
b = a
console.log(a === b) // true
๐๐ป b์ ๊ฐ์ธ 1์ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฑํด์ ํ ๋นํ ๊ฒ์ด ์๋๋ผ ๊ธฐ์กด์ ์๋ 1์ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ณ๊ฒฝ๋ ๊ฒ์ด๋ค. b๋ ๊ฐ์ ๋ณ๊ฒฝํ๊ฒ์ด ์๋ ๋ฐ์ดํฐ์ ์ฃผ์๊ฐ์ด ๋ณ๊ฒฝ๋ ๊ฒ์ด๋ค.
๐ ์ฐธ์กฐํ ๋ฐ์ดํฐ
๐พ #2
let a = { k:1 }
let b = { k:1 }
console.log( a === b) // false - ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
b = a
console.log( a === b) // true - ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
let c = b
console.log( a === c) // true
a.k = 9
console.log( a === c) // true
console.log(a,b,c) // {k:9}{k:9}{k:9}
8. ์์ ๋ณต์ฌ์ ๊น์ ๋ณต์ฌ
๐ต ์์ ๋ณต์ฌ(shallow copy)
๐พ #1
const user = {
name = 'Zooyaho',
age: 85,
emails: ['[email protected]']
}
// ์์ ๋ณต์ฌ
const copyUser = {...user}
// const copyUser = Object.assign({}, user)
console.log(copyUser === user) // false
// emails์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ณต์ ํ๊ณ ์์
user.emails.push('[email protected]')
console.log(copyUser.emails === user.emails) // true
๐ ์์ ๋ณต์ฌ๋ ์ฐธ์กฐํ ๋ฐ์ดํฐ๊น์ง ๋ณต์ฌ๊ฐ ๋์ง ์์.
๐ต ๊น์ ๋ณต์ฌ(deep copy)
- lodash ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ ๊น์๋ณต์ฌ ์งํ ๊ฐ๋ฅ
- cloneDeep() ๋ฉ์๋ ์ฌ์ฉ(_.cloneDeep(๊ฐ์ฒด) : ๊ฐ์ฒด ๋ฐํ)
๐พ #2
const user = {
name = 'Zooyaho',
age: 85,
emails: ['[email protected]']
}
// ์์ ๋ณต์ฌ
const copyUser = _.cloneDeep(user)
console.log(copyUser === user) // false
// emails์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ณต์ ํ๊ณ ์์
user.emails.push('[email protected]')
console.log(copyUser.emails === user.emails) // false
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ Javascript ๋ฐ์ดํฐ #02 :)), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@zooyaho/Javascript-๋ฐ์ดํฐ-02์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค