Skip to content

Latest commit

Β 

History

History
123 lines (85 loc) Β· 4.2 KB

객체.md

File metadata and controls

123 lines (85 loc) Β· 4.2 KB

객체

Create Date: 2022/12/30
Update Date: 2022/12/30

λ…Έμ…˜μ—μ„œ ν™•μΈν•˜κΈ°

κ°μ²΄λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ κ°€μž₯ 기본적인 데이터 νƒ€μž…μ΄λ©° μ €ν¬λŠ” 이미 μ‚΄νŽ΄λ³Έ 적이 μžˆμŠ΅λ‹ˆλ‹€.
κ°μ²΄λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ ꡉμž₯히 μ€‘μš”ν•œ λΆ€λΆ„μ΄λ―€λ‘œ 객체가 μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€ μžμ„Ένžˆ μ΄ν•΄ν•΄λ΄…μ‹œλ‹€!

κ°μ²΄λž€?

κ°μ²΄λŠ” λ³΅ν•©λœ κ°’μž…λ‹ˆλ‹€. κ°μ²΄λŠ” μ—¬λŸ¬ 가지 κ°’(κΈ°λ³Έ κ°’μ΄λ‚˜ λ‹€λ₯Έ 객체)을 λͺ¨μ•„μ„œ 이름을 톡해 값을 μ €μž₯ν•˜κ³  κ°€μ Έμ˜¬ 수 있게 ν•©λ‹ˆλ‹€.

const obj = {
  hello: 'world',
  name: 'secret',
};

obj.map;

κ°μ²΄λŠ” λ‹¨μˆœνžˆ λ¬Έμžμ—΄κ³Ό κ°’λ§Œ μ—°κ²°ν•œ 것이 μ•„λ‹™λ‹ˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈ κ°μ²΄λŠ” μžμ‹ λ§Œμ˜ ν”„λ‘œνΌν‹°λ₯Ό κ°€μ§€λŠ” 것 외에도 ν”„λ‘œν† νƒ€μž…μ΄λΌκ³  λΆˆλ¦¬λŠ” λ‹€λ₯Έ κ°μ²΄μ—μ„œ ν”„λ‘œνΌν‹°λ₯Ό μƒμ†ν•˜κΈ°λ„ ν•©λ‹ˆλ‹€.

이 ν”„λ‘œν† νƒ€μž… 상속이 μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μ€‘μš”ν•œ κΈ°λŠ₯μž…λ‹ˆλ‹€.

객체 생성

객체 λ¦¬ν„°λŸ΄

μœ„μ— μ˜ˆμ‹œλ₯Ό λ“€μ—ˆλ˜ μ½”λ“œκ°€ λ°”λ‘œ 객체 λ¦¬ν„°λŸ΄μ„ μ‚¬μš©ν•˜μ—¬ 객체λ₯Ό μƒμ„±ν•œ μ½”λ“œμž…λ‹ˆλ‹€. λ‹€μ‹œ ν•œ 번 κ°€μ Έμ˜¬κΉŒμš”?

const obj = {
  hello: 'world',
  name: 'secret',
  test: 'test',
};

콜둠으둜 κ΅¬λΆ„ν•œ 이름: κ°’ ν˜•μ‹μœΌλ‘œ λ˜μ–΄μ Έ μžˆλŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

객체 λ¦¬ν„°λŸ΄μ˜ λ§ˆμ§€λ§‰ ν”„λ‘œνΌν‹° 뒀에 콀마λ₯Ό μ“Έ 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ λ§ˆμ§€λ§‰μ— 콀마λ₯Ό 남겨둔닀면 객체의 ν”„λ‘œνΌν‹°λ₯Ό μΆ”κ°€ν•  λ•Œ 문법 μ—λŸ¬λ₯Ό μ΄ˆλž˜ν•  κ°€λŠ₯성이 쀄어듀기에 이런 μŠ€νƒ€μΌμ„ ꢌμž₯ν•˜λŠ” μ‚¬λžŒλ„ μžˆμŠ΅λ‹ˆλ‹€.

new

const o = new Object();
const a = new Array();

new μ—°μ‚°μžλŠ” μƒˆ 객체λ₯Ό μƒμ„±ν•˜κ³  μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€. new ν‚€μ›Œλ“œ λ’€μ—λŠ” λ°˜λ“œμ‹œ ν•¨μˆ˜ 호좜이 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. 이런 ν˜•νƒœλ‘œ μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜λ₯Ό μƒμ„±μžλΌκ³  λΆ€λ₯΄κ³  μƒˆλ‘œ μƒμ„±λœ 객체λ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ” λͺ©μ μœΌλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.

Object.create()

ν•΄λ‹Ή 뢀뢄을 읽기 전에 ν”„λ‘œν† νƒ€μž…μ„ λ¨Όμ € 읽고 μ˜€μ‹œλŠ” 것을 μΆ”μ²œν•©λ‹ˆλ‹€!!

첫 번째 인자λ₯Ό ν”„λ‘œν† νƒ€μž… μ‚Όμ•„ μƒˆ 객체λ₯Ό μƒμ„±ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€. μž„μ˜μ˜ ν”„λ‘œν† νƒ€μž…μ„ μ‚¬μš©ν•˜μ—¬ μƒˆ 객체λ₯Ό λ§Œλ“€ 수 μžˆλŠ” 것은 κ°•λ ₯ν•œ κΈ°λŠ₯μž…λ‹ˆλ‹€.

const o = Object.create({ x: 1, y: 2 }); // => Object.prototype
const a = Object.create(Array.prototype); // => Array.prototype / Object.prototype

const d = Object.create(Date.prototype); // ??
  • dμ—λŠ” μ–΄λ–€ ν”„λ‘œν† νƒ€μž…μ΄ μžˆμ„κΉŒμš”? Date.prototype / Object.prototype

TMI

단좕 ν”„λ‘œνΌν‹°

ES6 μ΄ν›„μ—λŠ” 같은 λ³€μˆ˜λͺ… 일 μ‹œ μ½œλ‘ μ„ μƒλž΅ν•œ 훨씬 κ°„κ²°ν•œ 문법을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

let x = 1,
  y = 2;
const o = {
  x: x,
  y: y,
};

//μœ„μ˜ μ½”λ“œλŠ” μ•„λž˜μ™€ 같이 μˆ˜μ •μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.
const o = {
  x,
  y,
};

λΆ„ν•΄ μ—°μ‚°μž

ES2018 μ΄ν›„μ—λŠ” 객체 λ¦¬ν„°λŸ΄ μ•ˆμ—μ„œ λΆ„ν•΄ μ—°μ‚°μž …λ₯Ό μ‚¬μš©ν•΄ κΈ°μ‘΄ 객체의 ν”„λ‘œνΌν‹°λ₯Ό μƒˆ 객체에 볡사할 수 μžˆμŠ΅λ‹ˆλ‹€.

const position = { x: 0, y: 0 };
const dimensions = { width: 100, height: 75 };

const rect = {...position, ...dimensions };

for(n) {
	const rect = {...position, ...dimensions }; // 2 * 2 * n
}

저희에겐 κ·Έμ € 점 3개일 수 μžˆκ² μ§€λ§Œ μžλ°”μŠ€ν¬λ¦½νŠΈ 인터프리터가 μƒλ‹Ήνžˆ λ§Žμ€ 일을 ν•˜κ²Œ 될 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

객체에 ν”„λ‘œνΌν‹°κ°€ n개 μžˆλ‹€λ©΄ 이 ν”„λ‘œνΌν‹°λ₯Ό λ‹€λ₯Έ 객체둜 λΆ„ν•΄ν•˜λŠ” μž‘μ—…μ€ $O(n)$ μž‘μ—…μΌ κ²λ‹ˆλ‹€.

…λ₯Ό λ£¨ν”„λ‚˜ μž¬κ·€ ν•¨μˆ˜μ— λ„£μ–΄ 데이터λ₯Ό 큰 객체 ν•˜λ‚˜μ— λˆ„μ‚°ν•œλ‹€λ©΄ μ–΄λ–»κ²Œ λ κΉŒμš”? $n$이 컀질수둝 λΉ„νš¨μœ¨μ μΈ $O(p^2)$ μ•Œκ³ λ¦¬μ¦˜μ„ μ“°κ²Œ λ©λ‹ˆλ‹€.

참고 자료