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

JavaScript

JavaScript (ES6) - Object

글을 μž‘μ„±ν•˜κΈ°μ— μ•žμ„œ 이 κ²Œμ‹œκΈ€μ˜ 지식은 유튜브 λ“œλ¦Όμ½”λ”© by μ—˜λ¦¬λ‹˜μ˜ λ™μ˜μƒμ΄ μΆœμ²˜μž„μ„ μ•Œλ €λ“œλ¦½λ‹ˆλ‹€.

https://www.youtube.com/watch?v=1Lbr29tzAA8&list=PLv2d7VI9OotTVOL4QmPfvJWPJvkmv6h-2&index=7

 

 

Object μƒμ„±ν•˜λŠ” 방법

 

const obj1 = {name: 'song' , age: 25};

 

이런 μ‹μœΌλ‘œ λ§Œλ“€ μˆ˜λ„ μžˆλ‹€

이 방법을 'object literal' 이라고 ν•˜λ©°

 

const obj2 = new Object();

 

클래슀λ₯Ό μ΄μš©ν•˜μ—¬ new ν‚€μ›Œλ“œλ‘œ μƒμ„±ν•˜λŠ” 방법도 μžˆλ‹€

이 방법을 'object constructor' 이라고 ν•œλ‹€.

​

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” ν΄λž˜μŠ€κ°€ 없어도 κ΄„ν˜Έ {} λ₯Ό μ‚¬μš©ν•˜μ—¬ 였브젝트λ₯Ό 생성할 수 μžˆλ‹€.

​

​

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” 이미 μ•„λž˜μ™€ 같이 nameκ³Ό ageλ₯Ό μ •μ˜ν–ˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  또 λ‹€λ₯Έ ν”„λ‘œνΌν‹°λ₯Ό 생성할 수 μžˆλ‹€

 

const song = {name: 'song' , age: 25};

song.hasjob = true;

 

μ΄λ ‡κ²Œ λ™μ μœΌλ‘œ μƒμ„±ν•˜κ²Œ 되면 μœ μ§€ λ³΄μˆ˜κ°€ νž˜λ“€λ‹€

κ·ΈλŸ¬λ―€λ‘œ κ°€λŠ₯ν•˜λ©΄ 이것을 ν”Όν•΄μ„œ μ½”λ”©ν•  것 !

 

 

μΆ”κ°€λ‘œ ν”„λ‘œνΌν‹°μ˜ μ‚­μ œλ„ κ°€λŠ₯ν•˜λ‹€

 

delete song.hasjob;

 

짚고 λ„˜μ–΄κ°€μ•Ό ν•  뢀뢄은

ObjectλŠ” key와 value의 집합체이닀

​

μ—¬κΈ°μ„œ keyλŠ” object둜 μ ‘κ·Όν•  수 μžˆλŠ” λ³€μˆ˜, 즉 ν”„λ‘œνΌν‹°μ™€

κ·Έ ν”„λ‘œνΌν‹°κ°€ κ°€μ§€κ³  μžˆλŠ” 값인 value둜 이루어져 μžˆλ‹€

 

 


 

Object ['key'] / Computed properties

 

 

μ§€κΈˆκΉŒμ§€ 였브젝트 μ•ˆμ˜ ν”„λ‘œνΌν‹°μ— μ ‘κ·Όν•˜λŠ” 방법은

 

console.log(song.name);

 

μœ„μ™€ 같이 . 으둜 μ ‘κ·Όν•˜λŠ” 방법이 μžˆμ—ˆλŠ”λ°

또 λ‹€λ₯Έ 방법이 μ‘΄μž¬ν•œλ‹€

 

console.log(song['name']);

 

였브젝트 μ•ˆμ— name μ΄λΌλŠ” λ³€μˆ˜μ˜ 이름을 string ν˜•νƒœλ‘œ 접근이 κ°€λŠ₯ν•˜λ‹€

( κΌ­ 'name' 과같이 λ”°μ˜΄ν‘œ 사이에 μ‘΄μž¬ν•΄μ•Ό ν•œλ‹€ )

​

μ΄λ ‡κ²Œ 두 κ°€μ§€λ‘œ 접근이 κ°€λŠ₯ν•˜λ‹€ !

​

μ•„λž˜μ™€ 같은 방법을 Computed properties 라고 ν•œλ‹€

​

이 방법을 μ“°λŠ” κ²½μš°λŠ”

 

function printValue(obj, key) {
  console.log(obj.key);
}

printValue(song,'name');

 

μœ„μ™€ 같이 obj.key λΌλŠ” 것은 song μ˜€λΈŒμ νŠΈμ— keyλΌλŠ” 값이 μžˆλƒκ³  물은 κ²ƒμ΄λ‚˜ 닀름없닀 κ·Έλž˜μ„œ 결과값은

​

undefined

​

μ—¬κΈ°μ„œ song 였브젝트의 keyλ₯Ό λΆˆλ €μ„ λ•Œ name이 ν˜ΈμΆœν•˜λŠ” 방법은

Computed properties λ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€

 

function printValue(obj, key) {
  console.log(obj[key]);
}

printValue(song,'name');

 

μœ„μ™€ 같이 [] μ•ˆμ— keyλ₯Ό ν˜ΈμΆœν•˜λ©΄ song 였브젝트 μ•ˆμ— name을 ν˜ΈμΆœν•˜κ²Œ λ˜μ–΄μ„œ 정상적인 값인 song이 좜λ ₯λœλ‹€

​

λ™μ μœΌλ‘œ 킀에 κ΄€λ ¨λœ value λ₯Ό 받아와야 ν•  λ•Œ μœ μš©ν•˜κ²Œ μ“Έ 수 μžˆλ‹€.

 

 


 

 

Property value shorthand

 

const person1 = { name: 'bob', age: 2};
const person2 = { name: 'steve', age: 3};
const person3 = { name: 'dave', age: 4};

 

μœ„μ™€ 같이 personμ΄λΌλŠ” 였브젝트λ₯Ό 3κ°€μ§€ λ§Œλ“€μ–΄ λ†“μ•˜λ‹€

μ—¬κΈ°μ„œ 4번째 person을 λ§Œλ“€λ €κ³  ν•  λ•Œ 또 μœ„μ™€ 같이 번거둭게 이름과 λ‚˜μ΄λ₯Ό 일일이 μž‘μ„±ν•΄μ•Ό ν•œλ‹€

​

이λ₯Ό 더 νŽΈν•˜κ²Œ ν•˜κΈ° μœ„ν•˜μ—¬ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€

 

function makePerson(name, age) {
  return{ 
    name: name,
    age : age,
  };
}

const person4 = makePerson('song', 25);

 

μœ„μ™€ 같이 makePersonμ΄λΌλŠ” ν•¨μˆ˜λ₯Ό μƒμ„±ν•˜κ³  λ§€κ°œλ³€μˆ˜λ‘œ name κ³Ό ageλ₯Ό λ°›μ•„

ν”„λ‘œνΌν‹°λ‘œμ„œ μ˜€λΈŒμ νŠΈμ— ν¬ν•¨λ˜κ²Œ ν•œλ‹€

​

μ—¬κΈ°μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” Property value shorthand λΌλŠ” κΈ°λŠ₯이 μžˆμ–΄μ„œ μ•„λž˜μ™€ 같이 μ‚¬μš©ν•œλ‹€

 

function makePerson(name, age) {
  return{ 
    name,
    age,
  };
}

 

key와 value의 이름이 λ™μΌν•˜λ‹€λ©΄ name : name 과같이 할당을 μƒλž΅ν•  수 μžˆλ‹€

​

μœ„μ™€ 같이 ν•΄μ€€λ‹€λ©΄ μ •μƒμ μœΌλ‘œ μ˜€λΈŒμ νŠΈκ°€ 생성이 λœλ‹€ !

​

 

 


 

 

Constructor function

 

 

μœ„μ—μ„œ μ‚΄νŽ΄λ³Έ makePerson μ΄λΌλŠ” ν•¨μˆ˜λŠ” ν΄λž˜μŠ€μ™€ λΉ„μŠ·ν•œ κ°œλ…μ΄λΌκ³  보면 λœλ‹€

​

κ·Έλž˜μ„œ ν΄λž˜μŠ€κ°€ μ‘΄μž¬ν•˜μ§€ μ•Šλ˜ μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” μœ„μ—μ„œ μ•Œμ•„λ³Έ λ°©μ‹μœΌλ‘œ 였브젝트λ₯Ό μƒμ„±ν•˜κ³€ ν–ˆλ‹€

​

이제 μ œλŒ€λ‘œ μ‚΄νŽ΄λ³΄μž

 

function Person(name, age) {
  this.name = name;
  this.age = age;
}

 

μœ„μ™€ 같이 였브젝트λ₯Ό μƒμ„±ν•˜λŠ” ν•¨μˆ˜μ˜ 경우 이름이 λŒ€λ¬Έμžλ‘œ μ‹œμž‘ν•œλ‹€ 'Person'

​

그리고 return 을 μ‚¬μš©ν•˜μ§€ μ•Šκ³  this λ₯Ό μ‚¬μš©ν•˜μ—¬ valueλ₯Ό key에 ν• λ‹Ήν•œλ‹€

​

κ²°κ΅­ this에 μƒˆλ‘œμš΄ ν”„λ‘œνΌν‹°λ₯Ό λ„£κ³  this λ₯Ό return ν•΄μ£ΌλŠ” ν•¨μˆ˜μ΄λ‹€

​

이λ₯Ό Constructor function 이라고 ν•œλ‹€

 

 


 

in operator

 

 

in operatorλŠ” ν•΄λ‹Ήν•˜λŠ” 였브젝트 μ•ˆμ— keyκ°€ μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” 것이닀

 

console.log('name' in song);

 

nameμ΄λΌλŠ” keyκ°€ songμ΄λΌλŠ” 였브젝트 μ•ˆμ— μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜λŠ” 것

κ²°κ³ΌλŠ” true λ˜λŠ” falseκ°€ 좜λ ₯λœλ‹€

​

 


 

 

for.. in vs for.. of

 

 

for .. in 은 ν”„λ‘œμ νŠΈλ₯Ό ν•  λ•Œ μ•„μ£Ό μœ μš©ν•˜κ²Œ 쓰인닀

 

 

for(key in song) {
  console.log(key);
}

 

μœ„μ™€ 같이 for .. in 을 μ‚¬μš©ν•˜λ©΄ for λ¬Έμ•ˆμ—μ„œ song에 μžˆλŠ” 값이 key에 λ°°μ—΄λ‘œ ν• λ‹Ήλ˜μ–΄ 좜λ ₯ν•˜λ©΄

song μ˜€λΈŒμ νŠΈμ— μ‘΄μž¬ν•˜λŠ” λͺ¨λ“  keyκ°€ 좜λ ₯λœλ‹€

​

λͺ¨λ“  킀듀을 λ°›μ•„μ™€μ„œ μ“Έ λ•Œ for .. in 을 μ‚¬μš©ν•˜λ©΄ μ’‹λ‹€

​

 

 

λ‹€μŒμ€ for .. of 

 

const array = [1, 2, 3, 4, 5];

for( let i = 0; i < array.length; i++) {
  console.log(array[i]);
}

 

보톡 μœ„μ™€ 같이 array λΌλŠ” λ°°μ—΄μ˜ 값을 for 문을 μ΄μš©ν•˜μ—¬ array의 값을 좜λ ₯ν•˜μ§€λ§Œ

​

μ΄λ ‡κ²Œ μ‚¬μš©ν•˜λ©΄ μ½”λ“œκ°€ κΈΈμ–΄μ Έ μ’‹μ§€ μ•Šλ‹€

​

for(value of array) {
  console.log(value);
}

 

μœ„μ™€ 같이 for .. ofλ₯Ό μ‚¬μš©ν•˜κ²Œ 되면 array에 μžˆλŠ” 값이 value에 ν• λ‹Ήλ˜λ©΄μ„œ 순차적으둜 좜λ ₯이 λœλ‹€

​

κΈ°λŠ₯은 κ°™μ§€λ§Œ λ”μš± νŽΈλ¦¬ν•œ κΈ°λŠ₯이닀

​

 

 


 

 

cloning

 

cloning에 λŒ€ν•΄ μ˜ˆμ‹œλ₯Ό 톡해 μ•Œμ•„λ³΄μž

 

const user = { name: 'song', age: '25' };
const user2 = user;

 

μœ„μ™€ 같이 userλΌλŠ” 였브젝트λ₯Ό μƒμ„±ν•˜κ³  user2에 user 였브젝트λ₯Ό λ„£μ–΄μ£Όμ—ˆλ‹€

​

이 κ²½μš°μ—λŠ” user2κ°€ userκ°€ κ°€λ¦¬ν‚€λŠ” 값을 λ™μΌν•˜κ²Œ κ°€λ¦¬ν‚¨λ‹€λŠ” 말이 λœλ‹€

​

그럼 user2에 valueλ₯Ό λ‹€λ₯Έ κ°’μœΌλ‘œ λ³€κ²½ν•œλ‹€λ©΄ μ–΄λ–»κ²Œ λ˜λŠ”μ§€ μ•Œμ•„λ³΄μž

 

user2.name = 'coder';
console.log(user);

 

μœ„μ™€ 같이 user2의 name 을 coder둜 λ³€κ²½ν•΄ μ£Όκ³ 

user 객체λ₯Ό 좜λ ₯ν•˜λ©΄

 

{name: "coder", age: "25"}

 

μœ„μ™€ 같이 name이 coder둜 λ°”λ€Œμ–΄ μžˆλŠ” 것을 확인할 수 μžˆλ‹€