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

λ…μ„œ λͺ©λ‘/λͺ¨λ”₯λ‹€ Modern JS Deep Dive

[λͺ¨λ”₯λ‹€] 10μž₯ 객체 λ¦¬ν„°λŸ΄

728x90

(μˆ˜μ • 23.5.2)

 

🌷 10.1 κ°μ²΄λž€?

 

JSλŠ” 객체 기반의 ν”„λ‘œκ·Έλž˜λ° 언어이며, JS λ₯Ό κ΅¬μ„±ν•˜λŠ” 거의 λͺ¨λ“  것이 객체.

μ›μ‹œκ°’μ€ λ³€κ²½ λΆˆκ°€λŠ₯μ΄μ§€λ§Œ, κ°μ²΄λŠ” λ³€κ²½ κ°€λŠ₯ν•œ κ°’

κ°μ²΄λŠ” 0개 μ΄μƒμ˜ ν”„λ‘œνΌν‹°λ‘œ κ΅¬μ„±λœ 집합이며, ν”„λ‘œνΌν‹°λŠ” 킀와 κ°’μœΌλ‘œ κ΅¬μ„±λœλ‹€. 

ν”„λ‘œνΌν‹° 값이 ν•¨μˆ˜μΌ 경우, 일반 ν•¨μˆ˜μ™€ κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ 'λ©”μ„œλ“œ' 라고 ν•œλ‹€. 

 

let counter = {
	num: 0 // ν”„λ‘œνΌν‹°
	increase: function(){
    	this.num++;
        } //λ©”μ„œλ“œ
}

 

🎡 ν”„λ‘œνΌν‹° : 객체의 μƒνƒœκ°’μ„ λ‚˜νƒ€λƒ„. 

🎡 λ©”μ„œλ“œ : ν”„λ‘œνΌν‹°λ₯Ό μ°Έμ‘°ν•˜κ³  μ‘°μž‘ν•  수 μžˆλŠ” λ™μž‘

 

-> κ°μ²΄λŠ” μƒνƒœμ™€ λ™μž‘μ„ ν•˜λ‚˜μ˜ λ‹¨μœ„λ‘œ ꡬ쑰화 ν•  수 μžˆμ–΄ 유용

 

🎡 객체와 ν•¨μˆ˜

- ν•¨μˆ˜λ‘œ 객체λ₯Ό μƒμ„±ν•˜κΈ°λ„ ν•˜μ§€λ§Œ, ν•¨μˆ˜ μžμ²΄κ°€ 객체이기도 ν•˜λ‹€.

 

 

 

 

 

 

🌷10.2 객체 λ¦¬ν„°λŸ΄μ— μ˜ν•œ 객체 생성

 

JSλŠ” ν”„λ‘œν† κΈ°λ°˜ 객체 지ν–₯ μ–Έμ–΄ -> λ‹€ν–₯ν•œ 객체 생성 방법을 지원함. 

(클래슀 기반 객체 지ν–₯κ³Ό 닀름)

- 객체 λ¦¬ν„°λŸ΄

- Object μƒμ„±μž ν•¨μˆ˜

- μƒμ„±μž ν•¨μˆ˜

- Object.create λ§€μ„œλ“œ

- ν΄λž˜μ„œ (ES6)

 

=> κ°€μž₯ 일반적이고 κ°„λ‹¨ν•œ 방법은 객체 λ¦¬ν„°λŸ΄μ„ μ‚¬μš©ν•˜λŠ” 방법. 

- λ³€μˆ˜ ν• λ‹Ήν•˜λ©΄μ„œ {} μ•ˆμ— μ“°λ©΄ 됨. 

ex)

const person = { name: "λž„λž„λΌ", sayHello: () => console.log(`Hello ${this.name}`) };

(this λ₯Ό μ¨μ€˜μ•Ό μ‚¬μš©μ΄ κ°€λŠ₯)

 

- 객체 λ¦¬ν„°λŸ΄μ€ κ°’μœΌλ‘œ ν‰κ°€λ˜λŠ” ν‘œν˜„μ‹. => μ„Έλ―Έμ½œλ‘ μ„ 뢙인닀.

- 객체 생성 이후에 ν”„λ‘œνΌν‹°λ₯Ό λ™μ μœΌλ‘œ μΆ”κ°€ν•  μˆ˜λ„ μžˆλ‹€.

 

 

 

 

 

 πŸŒ·10.3 ν”„λ‘œνΌν‹°

 

κ°μ²΄λŠ” ν”„λ‘œνΌν‹°μ˜ 집합이며, ν”„λ‘œνΌν‹°λŠ” 킀와 κ°’μœΌλ‘œ κ΅¬μ„±λœλ‹€.

ν”„λ‘œνΌν‹°λŠ” , 둜 ꡬ뢄

const person = {
  name: ['Bob', 'Smith'],
  age: 32,
  interests: ['music', 'skiing'],
  greeting: function() {
    alert('Hi! I\'m ' + this.name[0] + '.');
  }
};

- ν”„λ‘œνΌν‹° ν‚€ : 빈 λ¬Έμžμ—΄μ„ ν¬ν•¨ν•˜λŠ” λͺ¨λ“  λ¬Έμžμ—΄ λ˜λŠ” μ‹¬λ²Œ κ°’

- ν”„λ‘œνΌν‹° κ°’ : JS μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” λͺ¨λ“  κ°’

 

ν”„λ‘œνΌν‹° ν‚€

ν”„λ‘œνΌν‹° ν‚€λŠ” ν”„λ‘œνΌν‹° 값에 μ ‘κ·Όν•  수 μžˆλŠ” 이름 -> μ‹λ³„μž μ—­ν• 

λ°˜λ“œμ‹œ μ‹λ³„μž 넀이밍 κ·œμΉ™μ„ 따라야 ν•˜λŠ” 것은 μ•„λ‹ˆμ§€λ§Œ, λ”°λ₯΄μ§€ μ•Šμ„ μ‹œμ—” "" λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

λ¬Έμžμ—΄λ‘œ 평가할 수 μžˆλŠ” ν‘œν˜„μ‹μ„ μ‚¬μš©ν•΄ ν‚€λ₯Ό λ™μ μœΌλ‘œ μ‚¬μš©ν•  경우 (λ¬Έμžμ—΄μ΄ λ³€μˆ˜μ— μ €μž₯λ˜μ–΄ μžˆμ„ λ•Œ, κ·Έ λ³€μˆ˜ 이름 μ‚¬μš©) => [ key 이름 ] λŒ€κ΄„ν˜Έλ‘œ λ¬Άμ–΄μ„œ μ‚¬μš©ν•΄μ•Όν•¨

빈 λ¬Έμžμ—΄λ„ ν”„λ‘œνΌν‹° ν‚€λ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.

ν”„λ‘œνΌν‹° ν‚€λ‘œ 숫자λ₯Ό μ‚¬μš©ν•˜λ©΄ λ”°μ˜΄ν‘œλŠ” 뢙지 μ•Šμ§€λ§Œ, λ‚΄λΆ€μ μœΌλ‘œλŠ” λ¬Έμžμ—΄λ‘œ λ³€ν™˜λ¨

μ˜ˆμ•½μ–΄λ₯Ό ν”„λ‘œνΌν‹° ν‚€λ‘œ μ‚¬μš©ν•΄λ„ μ—λŸ¬κ°€ λ‚˜μ§„ μ•Šμ§€λ§Œ, μ˜ˆμƒμΉ˜ λͺ»ν•œ μ—λŸ¬κ°€ λ°œμƒν•  수 μžˆμœΌλ‹ˆ ꢌμž₯ν•˜μ§„ μ•ŠμŒ.

(ex) var, const... )

 

const key = "last-name";

const person = {
  firstName: 'Bob', // O
  last-name:'Smith', // ❌
  "last-name":'Smith', // O
};

console.log(person[key]); // 'Smith'

 

 

 

 

 

 

 

🌷 10.4 λ©”μ„œλ“œ

 

JSμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” λͺ¨λ“  값은 ν”„λ‘œνΌν‹° κ°’μœΌλ‘œ μ‚¬μš© κ°€λŠ₯

ν•¨μˆ˜λŠ” κ°’μœΌλ‘œ μ·¨κΈ‰ν•  수 있기 λ•Œλ¬Έμ— ν”„λ‘œνΌν‹° κ°’μœΌλ‘œ μ‚¬μš© κ°€λŠ₯. 

 

λ©”μ„œλ“œ : 객체에 λ¬Άμ—¬μžˆλŠ” ν•¨μˆ˜

λ§€μ„œλ“œ λ‚΄λΆ€μ˜ this : 객체 μžμ‹ μ„ κ°€λ¦¬ν‚€λŠ” μ°Έμ‘°λ³€μˆ˜

 

 

 

 

 

🌷 10.5 ν”„λ‘œνΌν‹° μ ‘κ·Ό

 

μ ‘κ·Ό 방법

- λ§ˆμΉ¨ν‘œ ν”„λ‘œνΌν‹° μ ‘κ·Ό μ—°μ‚°μž :  . 

- λŒ€κ΄„ν˜Έ ν”„λ‘œνΌν‹° μ ‘κ·Ό μ—°μ‚°μž : [...]

 

[] μ‚¬μš©μ‹œ ->

ν”„λ‘œνΌν‹° ν‚€λŠ” λ°˜λ“œμ‹œ λ”°μ˜΄ν‘œλ‘œ 감싼 λ¬Έμžμ—΄μ΄μ—¬μ•Ό 함.

μ•ˆκ·ΈλŸΌ μ‹λ³„μžλ‘œ 해석함. 

const person = {
 name: 'Lee'
};

console.log(person.name) // 'Lee'

console.log(person['name']) // 'Lee'

μ•„λž˜ λ‘κ°œ κ°™μ€κ±°μž„. 

 

넀이밍을 μ€€μˆ˜ν•˜μ§€ μ•Šμ€ 이름이면 λŒ€κ΄„ν˜Έ ν‘œκΈ°λ²•μ„ μ‚¬μš©ν•΄μ•Όν•¨. 

ν”„λ‘œνΌν‹° ν‚€κ°€ 숫자인 경우 '' μƒλž΅ κ°€λŠ₯

 

const person = {
 1: 10,
}

person[1] === person['1']) //κ°™μ€κ±°μž„

//μ΄λ ‡κ²ŒλŠ” μ‚¬μš© λͺ»ν•¨
person.1 
person.'1'

 

 

 

 

 

🌷 10.6 ν”„λ‘œνΌν‹° κ°’ κ°±μ‹ 

 

이미 μ‘΄μž¬ν•˜λŠ” ν”„λ‘œνΌν‹°μ— 값을 ν• λ‹Ήν•˜λ©΄ 값이 갱신됨. 

 

 

 

 

🌷 10.7 ν”„λ‘œνΌν‹° 동적 생성

 

μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” ν”„λ‘œνΌν‹°μ— 값을 ν• λ‹Ήν•˜λ©΄ ν”„λ‘œνΌν‹°κ°€ λ™μ μœΌλ‘œ 생성 & μΆ”κ°€ & ν”„λ‘œνΌν‹° 값이 할당됨. 

 

 

 

🌷 10.8 ν”„λ‘œνΌν‹° μ‚­μ œ

delete둜 μ‚­μ œν•  수 있음. 

const person = { name: "λž„λž„λΌ", sayHello: () => console.log(`Hello ${this.name}`) }; 
delete person.name;

console.log(person);
//{ sayHello: () => console.log(`Hello ${this.name}`) };

 

μ΄λŸ°μ‹μœΌλ‘œ ν™œμš©ν•  수 있음. 

 

 

 

 

 

 

🌷 10.9 ES6μ—μ„œ μΆ”κ°€λœ 객체 λ¦¬ν„°λŸ΄μ˜ ν™•μž₯ κΈ°λŠ₯

 

10.9.1 ν”„λ‘œνΌν‹° μΆ•μ•½ ν‘œν˜„

 

ν”„λ‘œνΌν‹° κ°’μœΌλ‘œ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 경우, λ³€μˆ˜μ˜ 이름과 ν”„λ‘œνΌν‹° ν‚€κ°€ λ™μΌν•œ 이름일 경우 ν‚€λ₯Ό μƒλž΅ν•  수 μžˆλ‹€

 

 

10.9.2 κ³„μ‚°λœ ν”„λ‘œνΌν‹° 이름

 

μ‚¬μš©ν•  ν‘œν˜„μ‹μ€ [] 둜 λ¬Άμ–΄μ•Ό ν•œλ‹€. 

객체 λ¦¬ν„°λŸ΄ `` 도 μ‚¬μš©ν•΄μ„œ 이름을 λ§Œλ“€ 수 μžˆλ‹€.

 

const name = 'Name';
let i = 0;

obj [name + '_' + ++i]  = i;

// obj = {
 Name_1 : 1
}

const obj = {

obj[`${x} + ${y}`] : i

}

 

 

 

10.9.3 λ©”μ„œλ“œ μΆ•μ•½ ν‘œν˜„

 

function ν‚€μ›Œλ“œ μƒλž΅ κ°€λŠ₯. 

const obj1 = {
    sayHi: function () {
        console.log("Hi");
    }
}
const obj2 = {
    sayHi() {
        console.log("Hi");
    }
}

 

λ‘κ°œ κ°™μ€κ±°μž„. 

 

 

 

728x90
λ°˜μ‘ν˜•