(πŸ“– λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ λ”₯λ‹€μ΄λΈŒ) 10μž₯. 객체 λ¦¬ν„°λŸ΄

λ…Έμ˜μ™„Β·2023λ…„ 9μ›” 27일
0

JavaScript(Deep Dive)

λͺ©λ‘ 보기
5/23
post-thumbnail

객체 λ¦¬ν„°λŸ΄

1.κ°μ²΄λž€?

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 객체 기반의 ν”„λ‘œκ·Έλž˜λ° 언어이며, μ›μ‹œ κ°’(숫자, λ¬Έμžμ—΄, λΆˆλ¦¬μ–Έ, undefined, null, μ‹¬λ²Œ)을 μ œμ™Έν•œ λ‚˜λ¨Έμ§€κ°’( ν•¨μˆ˜, λ°°μ—΄, μ •κ·œ ν‘œν˜„μ‹ λ“±)은 λͺ¨λ‘ 객체닀.

μ›μ‹œνƒ€μž…μ€ 단 ν•˜λ‚˜μ˜ κ°’λ§Œ λ‚˜νƒ€λ‚΄μ§€λ§Œ 객체 νƒ€μž…μ€ λ‹€μ–‘ν•œ νƒ€μž…μ˜ κ°’(μ›μ‹œ κ°’ λ˜λŠ” λ‹€λ₯Έ 객체)을 ν•˜λ‚˜μ˜ λ‹¨μœ„λ‘œ κ΅¬μ„±ν•œ 볡합적인 μžλ£Œκ΅¬μ‘°λ‹€.

μ›μ‹œ 값은 λ³€κ²½ λΆˆκ°€λŠ₯ν•œ κ°’μ΄μ§€λ§Œ 객체 νƒ€μž…μ˜ 값은 λ³€κ²½ κ°€λŠ₯ν•œ 값이닀.

κ°μ²΄λŠ” 0개 μ΄μƒμ˜ ν”„λ‘œνΌν‹°λ‘œ κ΅¬μ„±λœ 집합이며, ν”„λ‘œνΌν‹°λŠ” 킀와 κ°’μœΌλ‘œ κ΅¬μ„±λ˜μžˆλ‹€. λ˜ν•œ, μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” λͺ¨λ“ κ°’(μ›μ‹œκ°’ 객체값)은 ν”„λ‘œνΌν‹° 값이 될 수 μžˆλ‹€.

let person = {
  name: "noh", // ν”„λ‘œνΌν‹°
  gender: "male" // ν”„λ‘œνΌν‹°
  // ν”„λ‘œνΌν‹° ν‚€ : name, gender
  // ν”„λ‘œνΌν‹° κ°’ : "noh", "male"
}

β“ν”„λ‘œνΌν‹° 값이 ν•¨μˆ˜μΌ 경우?

❓ μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ ν•¨μˆ˜λŠ” 일급 κ°μ²΄μ΄λ―€λ‘œ κ°’μœΌλ‘œ μ·¨κΈ‰ν•  수 μžˆλ‹€. λ”°λΌμ„œ ν•¨μˆ˜λ„ ν”„λ‘œνΌν‹° κ°’μœΌλ‘œ μ‚¬μš©κ°€λŠ₯ν•œλ° ν”„λ‘œνΌν‹° 값이 ν•¨μˆ˜μΌ 경우 μΌλ°˜ν•¨μˆ˜μ™€ κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ λ©”μ„œλ“œλΌ λΆ€λ₯Έλ‹€
ν”„λ‘œνΌν‹° : 객체의 μƒνƒœλ₯Ό λ‚˜νƒœλ‚˜λŠ” κ°’(data)
λ©”μ„œλ“œ : ν”„λ‘œνΌν‹°λ₯Ό μ°Έμ‘°ν•˜κ³  μ‘°μž‘ν•  수 μžˆλŠ” λ™μž‘

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

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

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” ν”„λ‘œν† νƒ€μž… 기반 객체지ν–₯ μ–Έμ–΄λ‘œμ„œ λ‹€μ–‘ν•œ 객체 생성 방법(객체 λ¦¬ν„°λŸ΄,Object μƒμ„±μž ν•¨μˆ˜,μƒμ„±μž ν•¨μˆ˜,Object.create λ©”μ„œλ“œ,클래슀(ES6))을 μ§€μ›ν•œλ‹€.

  • κ°€μž₯ 일반적이고 κ°„λ‹¨ν•œ 방법은 객체 λ¦¬ν„°λŸ΄μ„ μ‚¬μš©ν•˜λŠ” 것. λ¦¬ν„°λŸ΄μ΄λž€? μ‚¬λžŒμ΄ 이해할 수 μžˆλŠ” 문자 λ˜λŠ” μ•½μ†λœ 기호λ₯Ό μ‚¬μš©ν•˜μ—¬ 값을 μƒμ„±ν•˜λŠ” ν‘œκΈ°λ²•μ„ λ§ν•œλ‹€. 즉, 객체 λ¦¬ν„°λŸ΄μ΄λž€ 객체λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•œ ν‘œκΈ°λ²•
  • 객체 λ¦¬ν„°λŸ΄μ€ μ€‘κ΄„ν˜Έ({})내에 0개 μ΄μƒμ˜ ν”„λ‘œνΌν‹°λ₯Ό μ •μ˜ λ³€μˆ˜μ— ν• λ‹Ήλ˜λŠ” μ‹œμ μ— μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 객체 λ¦¬ν„°λŸ΄μ„ 해석해 객체λ₯Ό μƒμ„±ν•œλ‹€.

3. ν”„λ‘œνΌν‹°

κ°μ²΄λŠ” ν”„λ‘œνΌν‹°μ˜ 집합이며, ν”„λ‘œνΌν‹°λŠ” 킀와 κ°’μœΌλ‘œ κ΅¬μ„±λœλ‹€.
ν”„λ‘œνΌν‹° ν‚€ : 빈 λ¬Έμžμ—΄μ„ ν¬ν•¨ν•˜λŠ” λͺ¨λ“  λ¬Έμžμ—΄ λ˜λŠ” μ‹¬λ²Œ κ°’.
ν”„λ‘œνΌν‹° κ°’ : μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” λͺ¨λ“  κ°’.

  • ν”„λ‘œνΌν‹° ν‚€λŠ” ν”„λ‘œνΌν‹° 값에 μ ‘κ·Όν•  수 μžˆλŠ” μ΄λ¦„μœΌλ‘œμ„œ μ‹λ³„μž 역할을 ν•œλ‹€.
  • ν”„λ‘œνΌν‹° ν‚€λŠ” μ‹λ³„μž 넀이밍 κ·œμΉ™μ„ μ€€μˆ˜ν•˜λŠ” ν”„λ‘œνΌν‹° ν‚€λ₯Ό μ‚¬μš©ν•˜λŠ” 것을 ꢌμž₯ 넀이밍 κ·œμΉ™μ„ μ€€μˆ˜ν•˜λ©΄ λ”°μ˜΄ν‘œλ₯Ό μ œκ±°ν•  수 μžˆλ‹€.

πŸ’‘ λ¬Έμžμ—΄ λ˜λŠ” λ¬Έμžμ—΄λ‘œ 평가할 수 μžˆλŠ” ν‘œν˜„μ‹μ„ μ‚¬μš©ν•΄ ν”„λ‘œνΌν‹° ν‚€λ₯Ό λ™μ μœΌλ‘œ 생성할 수 μžˆλ‹€.

πŸ’‘ ν”„λ‘œνΌν‹° ν‚€λ‘œ μ‚¬μš©ν•  ν‘œν˜„μ‹μ„ λŒ€κ΄„ν˜Έ([])둜 λ¬ΆλŠ”λ‹€.

let obj = {}
let key = "hello"
obj[key] = "world"
cosole.log(obj) // {hello: "world"}
obj["key"] = "value"
cosole.log(obj) // {hello: "world", key: value}

4. ν”„λ‘œνΌν‹° μ ‘κ·Ό

ν”„λ‘œνΌν‹°μ— μ ‘κ·Όν•˜λŠ” 방법은 λ‹€μŒκ³Ό 같이 두 가지닀.
λ§ˆμΉ¨ν‘œ ν‘œκΈ°λ²• : λ§ˆμΉ¨ν‘œ ν”„λ‘œνΌν‹° μ ‘κ·Όμ—°μ‚°μž .λ₯Ό μ‚¬μš©
λŒ€κ΄„ν˜Έ ν‘œκΈ°λ²• : λŒ€κ΄„ν˜Έ ν”„λ‘œνΌν‹° μ ‘κ·Όμ—°μ‚°μž []λ₯Ό μ‚¬μš©

  • ν”„λ‘œνΌν‹° ν‚€κ°€ μ‹λ³„μž 넀이밍 κ·œμΉ™μ„ μ€€μˆ˜ν•˜λŠ” 이름, 즉 μžλ°” μŠ€ν¬λ¦½νŠΈμ—μ„œ μ‚¬μš© κ°€λŠ₯ν•œ μœ νš¨ν•œ 이름이면 λ§ˆμΉ¨ν‘œ ν‘œκΈ°λ²•, λŒ€κ΄„ν˜Έ ν‘œκΈ°λ²•μ„ λͺ¨λ‘ μ‚¬μš©ν•  수 μžˆλ‹€.
  • μ‹λ³„μž 넀이밍 κ·œμΉ™μ„ μ€€μˆ˜ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ λŒ€κ΄„ν˜Έ ν‘œκΈ°λ²•λ§Œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.
  • λŒ€κ΄„ν˜Έ ν‘œκΈ°λ²•μ„ μ‚¬μš©ν•˜λŠ” 경우 λŒ€κ΄„ν˜Έ ν”„λ‘œνΌν‹° μ ‘κ·Ό μ—°μ‚°μž 내뢀에 μ§€μ •ν•˜λŠ” ν”„λ‘œνΌν‹° ν‚€λŠ” λ°˜λ“œμ‹œ λ”°μ˜΄ν‘œλ‘œ 감싼 λ¬Έμžμ—΄μ΄μ–΄μ•Ό ν•œλ‹€.

5. ν”„λ‘œνΌν‹° μ‚­μ œ

delete μ—°μ‚°μžλŠ” 객체의 ν”„λ‘œνΌν‹°λ₯Ό μ‚­μ œν•œλ‹€. μ΄λ•Œ delete μ—°μ‚°μžμ˜ ν”Όμ—°μ‚°μžλŠ” ν”„λ‘œνΌν‹° 값에 μ ‘κ·Όν•  수 μžˆλŠ” ν‘œν˜„μ‹μ΄μ–΄μ•Ό ν•œλ‹€.

let person = {
	name : "noh",
	gender: "male"
    };
delete person.gender;
delete person.age; // ageλŠ” μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” ν”„λ‘œνΌν‹° μ‚­μ œν•  수 μ—†λ‹€(μ ‘κ·Ό λΆˆκ°€μ΄κΈ° λ•Œλ¬Έ)
console.log(person); // {name: "noh"}

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

6-1. ν”„λ‘œνΌν‹° μΆ•μ•½ ν‘œν˜„

let x = 1, y =2;
let obj = {
  x:x, // ν”„λ‘œνΌν‹° ν‚€ μƒλž΅κ°€λŠ₯.
  y:y // ν”„λ‘œνΌν‹° ν‚€ μƒλž΅κ°€λŠ₯.
};
console.log(obj); // {x:1, y:2}
// λ³€μˆ˜ 이름(ν”„λ‘œνΌν‹° κ°’)이 ν”„λ‘œνΌν‹° 킀와 λ™μΌν•œ 이름일 λ•Œ ν”„λ‘œνΌν‹° ν‚€λ₯Ό μƒλž΅ κ°€λŠ₯.
let x = 1, y =2;
const obj = {x,y};
console.log(obj); // {x:1, y:2}

6-2. κ³„μ‚°λœ ν”„λ‘œνΌν‹° 이름

ES5μ—μ„œ κ³„μ‚°λœ ν”„λ‘œνΌν‹° μ΄λ¦„μœΌλ‘œ ν”„λ‘œνΌν‹° ν‚€λ₯Ό 동적 μƒμ„±ν•˜λ €λ©΄ 객체 λ¦¬ν„°λŸ΄ μ™ΈλΆ€μ—μ„œ λŒ€κ΄„ν˜Έ([ ... ]) ν‘œκΈ°λ²•μ„ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
ES6μ—μ„œλŠ” 객체 λ¦¬ν„°λŸ΄ λ‚΄λΆ€μ—μ„œλ„ κ³„μ‚°λœ ν”„λ‘œνΌν‹° μ΄λ¦„μœΌλ‘œ ν”„λ‘œνΌν‹° ν‚€λ₯Ό 동적 생성할 수 μžˆλ‹€.

// ES5
var prefix1 = 'prop';
var i = 0;

var obj1 = {};

obj1[prefix1 + '-' + ++i] = i;
obj1[prefix1 + '-' + ++i] = i;
obj1[prefix1 + '-' + ++i] = i;

console.log(obj1);	// {prop-1: 1, prop-2: 2, prop-3: 3}


// ES6
const prefix2 = 'prop';
let j = 0;

const obj2 = {
  [`${prefix2}-${++j}`]: j,
  [`${prefix2}-${++j}`]: j,
  [`${prefix2}-${++j}`]: j
};

console.log(obj2);	// {prop-1: 1, prop-2: 2, prop-3: 3}

6-3. λ©”μ„œλ“œ μΆ•μ•½ ν‘œν˜„

// ES6μ—μ„œλŠ” λ©”μ„œλ“œλ₯Ό μ •μ˜ν•  λ•Œ function ν‚€μ›Œλ“œλ₯Ό μƒλž΅ν•œ μΆ•μ•½ ν‘œν˜„μ„ μ‚¬μš©ν•  수 μžˆλ‹€.
// ES6
const obj = {
  name: 'Kozel',
  say() {
    console.log('Hello, ' + this.name);
  }
};

obj.say();	// Hello, Kozel

0개의 λŒ“κΈ€