Front-End/JavaScript

[μžλ°”μŠ€λ¦½νŠΈ(JavaScript )] 09. 객체 (Object)

Bigone17 2022. 2. 3. 11:44

🟑 1. 객체 (Object)

 - μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 객체 기반의 슀크립트 언어이며 μ›μ‹œ νƒ€μž…μ„ μ œμ™Έν•œ λͺ¨λ“  값듀은 κ°μ²΄μž…λ‹ˆλ‹€. (그만큼 μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ κ°μ²΄λŠ” 맀우 μ€‘μš”β—)

 - κ°μ²΄λŠ” ν‚€(key)와 κ°’(value)으둜 κ΅¬μ„±λœ ν”„λ‘œνΌν‹°(property)λ“€μ˜ λ¬ΆμŒμž…λ‹ˆλ‹€. 

 

- ν”„λ‘œνΌν‹°μ˜ 값은 λͺ¨λ“  νƒ€μž…μ΄ λ“€μ–΄κ°ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” ν•¨μˆ˜λŠ” 일급 κ°μ²΄μ΄λ―€λ‘œ κ°’μœΌλ‘œ μ·¨κΈ‰ν•  수 있고, ν”„λ‘œνΌν‹°μ˜ κ°’μœΌλ‘œλ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ ν•¨μˆ˜λŠ” 일반 ν•¨μˆ˜μ™€ κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄μ„œ λ©”μ†Œλ“œλΌκ³  λΆ€λ¦…λ‹ˆλ‹€. (객체 μ•ˆμ— μžˆλŠ” ν•¨μˆ˜λŠ” λ©”μ†Œλ“œ

let person = {
	// λ©”μ†Œλ“œ
	sayHello = function(){
    	console.log('Hello');
    }
}
// 객체의 λ©”μ†Œλ“œ 호좜
person.sayHello(); // 'Hello'


// ν•¨μˆ˜
let hi = function(){
	console.log('Hi');
}
// ν•¨μˆ˜ 호좜
hi(); // 'Hi'

 

 - μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ κ°μ²΄λŠ” 객체지ν–₯의 상속을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ "ν”„λ‘œν† νƒ€μž…(prototype)"이라고 λΆˆλ¦¬λŠ” 객체의 ν”„λ‘œνΌν‹°μ™€ λ©”μ†Œλ“œλ₯Ό 상속받을 수 μžˆμŠ΅λ‹ˆλ‹€. 객체λ₯Ό μƒμ„±ν•˜λ©΄ μžλ™μ μœΌλ‘œ ν• λ‹Ήλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

object의 prototype

 

 

🟑 2. 객체 생성 방법

 - 객체λ₯Ό μƒμ„±ν•˜λŠ” 방법은 3가지 방법이 μžˆμŠ΅λ‹ˆλ‹€.

 

 πŸŸ£ 2.1 객체 λ¦¬ν„°λŸ΄

 - κ°€μž₯ 일반적인 λ°©λ²•μœΌλ‘œ, λ³€μˆ˜μ— 빈 μ€‘κ΄„ν˜Έλ₯Ό ν• λ‹Ήν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

let obj = {};
console.log(typeof(obj)); // "object"
console.log(obj); // {}


//빈 객체에 ν”„λ‘œνΌν‹° 생성 및 ν• λ‹Ή
obj.a = 1;
console.log(obj); // {a : 1}
obj.b = 2;
console.log(obj); // {a : 1, b : 2}

 

 

 πŸŸ£ 2.2 Object μƒμ„±μž ν•¨μˆ˜

 - new μ—°μ‚°μžμ™€ Object μƒμ„±μž ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ 빈 객체λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. 
 - μƒμ„±μž(contructor) ν•¨μˆ˜λž€ new ν‚€μ›Œλ“œμ™€ ν•¨κ»˜ 객체λ₯Ό μƒμ„±ν•˜κ³  μ΄ˆκΈ°ν™”ν•˜λŠ” ν•¨μˆ˜λ₯Ό λ§ν•©λ‹ˆλ‹€. μƒμ„±μž ν•¨μˆ˜λ₯Ό 톡해 μƒμ„±λœ 객체λ₯Ό μΈμŠ€ν„΄μŠ€(instance)라 ν•©λ‹ˆλ‹€. 

let obj = new Object();

console.log(typeof(obj)); //"object"
console.log(obj); //{}

// 빈 객체에 ν”„λ‘œνΌν‹° μΆ”κ°€
obj.name = 'bigone';
obj.age = 30;

console.log(obj); // {name : 'bigone', age : 30}

 - 객체 λ¦¬ν„°λŸ΄ 방식(2.1방식)κ³Ό Object μƒμ„±μž ν•¨μˆ˜(2.2방식)λ₯Ό 톡해 객체λ₯Ό λ§Œλ“œλŠ” 방법은 같은 λ°©λ²•μž…λ‹ˆλ‹€. 객체 λ¦¬ν„°λŸ΄ λ°©μ‹μœΌλ‘œ 객체 생성을 지정해 λ†“μœΌλ©΄ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진 λ‚΄λΆ€μ—μ„œ Object μƒμ„±μž ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄μ„œ μƒˆλ‘œμš΄ 객체λ₯Ό λ§Œλ“­λ‹ˆλ‹€. κ²°κ΅­ 객체 λ¦¬ν„°λŸ΄ 방식 ({})은 Object μƒμ„±μž ν•¨μˆ˜λ₯Ό μΆ•μ•½ ν‘œν˜„ν•œ κ²ƒμž…λ‹ˆλ‹€.

 

 πŸŸ£ 2.3 μƒμ„±μž ν•¨μˆ˜

 - λ™μΌν•œ ν”„λ‘œνΌν‹°λ₯Ό κ°–λŠ” 객체λ₯Ό 생성할 λ•Œ μœ μš©ν•˜κ²Œ μ‚¬μš©λ˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

// μƒμ„±μž ν•¨μˆ˜
function Dog(name, dog_breed, age){
	this.name = name;
    this.dog_breed = dog_breed,
    this.age = age;
    this.bark = function(){
    	console.log('μ™ˆμ™ˆ!');
    }
}

// μΈμŠ€ν„΄μŠ€ 생성
let Dog1 = new Dog('μŠˆλ‹ˆ','μš”ν¬μ…” ν…Œλ¦¬μ–΄',3);
let Dog2 = new Dog('κΎΈκΈ°', '폼피츠', 1);


console.log(Dog1); // Dog {name: 'μŠˆλ‹ˆ', dog_breed: 'μš”ν¬μ…” ν…Œλ¦¬μ–΄', age: 3, bark: ƒ}
console.log(Dog2); // Dog {name: 'κΎΈκΈ°', dog_breed: '폼피츠', age: 1, bark: ƒ}

Dog1.bark() // 'μ™ˆμ™ˆ!';
Dog2.bark() // 'μ™ˆμ™ˆ!';
  • μƒμ„±μž ν•¨μˆ˜ 이름은 일반적으둜 λŒ€λ¬Έμžλ‘œ μ‹œμž‘ν•©λ‹ˆλ‹€. μƒμ„±μž ν•¨μˆ˜μž„μ„ μ•Œλ €μ£ΌλŠ” 약속이라고 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • thisλŠ” μƒμ„±μž ν•¨μˆ˜κ°€ 생성할 μΈμŠ€ν„΄μŠ€λ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€.
  • this에 μ—°κ²°(바인딩)λ˜μ–΄ μžˆλŠ” ν”„λ‘œνΌν‹°μ™€ λ©”μ†Œλ“œλŠ” μ™ΈλΆ€μ—μ„œ μ°Έμ‘°, μ‚¬μš©μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • this에 μ—°κ²°λ˜μ–΄ μžˆμ§€ μ•Šμ€ μƒμ„±μž μ•ˆμ— λ³€μˆ˜λ“€μ€ μ™ΈλΆ€μ—μ„œ μ°Έμ‘°, μ‚¬μš©μ΄ λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.
     
// μƒμ„±μž ν•¨μˆ˜
function Dog(name, dog_breed, age){
    this.name = name;
    this.dog_breed = dog_breed,
    this.age = age;
    this.bark = function(){
    	console.log('μ™ˆμ™ˆ!');
    }
    let eat = '간식먹기';
}


let dog1 = new Dog('κΎΈκΈ°', '폼피츠', 1);


// this둜 μ—°κ²°ν•œ ν”„λ‘œνΌν‹°
console.log(dog1.name); // 'κΎΈκΈ°'
// Dog μƒμ„±μž μ•ˆμ—μ„œλ§Œ μ“°λŠ” λ³€μˆ˜
console.log(dog1.eat);// undefined

 - nameμ΄λΌλŠ” ν”„λ‘œνΌν‹°λŠ” this에 μ—°κ²°λ˜μ–΄ μžˆμœΌλ―€λ‘œ μ™ΈλΆ€μ—μ„œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜μ§€λ§Œ, eatλΌλŠ” ν”„λ‘œνΌν‹°λŠ” this에 연결이 λ˜μ–΄ μžˆμ§€ μ•ŠμœΌλ―€λ‘œ μ™ΈλΆ€μ—μ„œ μ‚¬μš©μ΄ λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.

 

 

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

- ν”„λ‘œνΌν‹°λž€ 객체에 λ“€μ–΄μžˆλŠ” ν‚€(key)-κ°’(value)을 ν•œ 쌍으둜 이루어진 λ³€μˆ˜λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. 

 

 πŸŸ£ 3.1 ν”„λ‘œνΌν‹° ν‚€

 - ν”„λ‘œνΌν‹° ν‚€λŠ” 일반적으둜 λ¬Έμžμ—΄(빈 λ¬Έμžμ—΄ 포함)을 μ§€μ •ν•©λ‹ˆλ‹€. ν”„λ‘œνΌν‹° 킀에 λ¬Έμžμ—΄μ΄λ‚˜ symbol κ°’ μ΄μ™Έμ˜ 값을 μ§€μ •ν•˜λ©΄ μ•”λ¬΅μ μœΌλ‘œ λ¬Έμžμ—΄λ‘œ λ³€ν™˜λ©λ‹ˆλ‹€. 

 - ν”„λ‘œνΌν‹° ν‚€λŠ” λ¬Έμžμ—΄μ΄λ―€λ‘œ λ”°μ˜΄ν‘œ('', "")λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. λ‹€λ§Œ μžλ°”μŠ€ν¬λ¦½μ—μ„œ μ‚¬μš© κ°€λŠ₯ν•œ μœ νš¨ν•œ 이름인 κ²½μš°μ—λŠ” λ”°μ˜΄ν‘œλ₯Ό μƒλž΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ°˜λŒ€λ‘œ μ‚¬μš© κ°€λŠ₯ν•˜μ§€ μ•ŠλŠ” 이름인 경우 λ”°μ˜΄ν‘œλ₯Ό λ°˜λ“œμ‹œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

 

let user = {
	id : 'bigone',
    'first-name' : '길동', // λ”°μ˜΄ν‘œκ°€ μ—†μœΌλ©΄ first - name 으둜 인식을 ν•˜κΈ° λ•Œλ¬Έμ— μœ νš¨ν•œ 이름이 μ•„λ‹˜
    'last-name' : '홍',
    gender : 'male',
    function : 10 // μ‚¬μš©μ΄ κ°€λŠ₯ν•˜μ§€λ§Œ μ˜ˆμ•½μ–΄λŠ” μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹λ‹€ (μ˜ˆμ•½μ–΄ : function, for, if ...)
}

- μœ„ μ½”λ“œλ₯Ό 보면 firt-nameκ³Ό last-name은 λ”°μ˜΄ν‘œκ°€ μ‚¬μš©λœ 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. κ·Έ μ΄μœ λŠ” λ”°μ˜΄ν‘œκ°€ μ—†λŠ” κ²½μš°μ—λŠ” first - name 즉, λ¬Έμžμ—΄ -(μ‚°μˆ μ—°μ‚°μž) λ¬Έμžμ—΄λ‘œ μΈμ‹ν•˜κΈ° λ•Œλ¬Έμ— 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

- μ˜ˆμ•½μ–΄λ₯Ό μ‚¬μš©ν–ˆμ„ λ•Œ μ—λŸ¬κ°€ λ°œμƒν•˜μ§€λŠ” μ•Šμ§€λ§Œ, λ‚˜μ€‘μ— μ–΄λ– ν•œ μ—λŸ¬κ°€ λ°œμƒν•  μˆ˜λ„ 있고 κ°œλ°œμ— ν˜Όλž€μ΄ 올 수 μžˆμœΌλ―€λ‘œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

// μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ μ‚¬μš©λ˜λŠ” μ˜ˆμ•½μ–΄
abstract  arguments 
boolean   break 
byte	case  
catch  char  
class  const
continue  debugger  
default delete  do
double  else  enum 
eval  export  extends 
false final finally 
float  for function 
goto  if  implements
import in  instanceof  
int interface  let 
long  native  new null
package private protected 
public  return  short static  
super  switch  synchronized
this  throw throws  transient 
true  try typeof  var void  
volatile  while with  yield

 

 

 πŸŸ£ 3.2 ν”„λ‘œνΌν‹° κ°’ 읽기

 - 객체의 ν”„λ‘œνΌν‹° 값에 μ ‘κ·Όν•˜κΈ° μœ„ν•΄μ„œλŠ” ν”„λ‘œνΌν‹°μ˜ ν‚€λ₯Ό μ΄μš©ν•©λ‹ˆλ‹€. 그리고 λ§ˆμΉ¨ν‘œ(.) ν‘œκΈ°λ²•κ³Ό λŒ€κ΄„ν˜Έ([]) ν‘œκΈ°λ²•μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

let user = {
    id : 'bigone',
    'first-name' : '길동',
    'last-name' : '홍',
    gender : 'male',
    1 : 10
}


console.log(user.id) // 'bigone'
console.log(user[id]) // id is not defined - μ—λŸ¬ λ°œμƒ
console.log(user['id']) // 'bigone'


console.log(user.first-name) // NaN - μ—λŸ¬ λ°œμƒ
console.log(user[first-name]) // first is not defined - μ—λŸ¬ λ°œμƒ
console.log(user['fist-name']) // '길동'


console.log(user.1) //after argument list - μ—λŸ¬ λ°œμƒ
console.log(user[1]) // 10 - 암묡적 νƒ€μž… λ³€ν™˜ 1 -> '1'
console.log(user['1']) // 10


console.log(user.name) // undefined - 객체에 μ—†λŠ” ν”„λ‘œνΌν‹° ν˜ΈμΆœμ‹œ undefined λ°˜ν™˜

 - ν”„λ‘œνΌν‹° ν‚€κ°€ μœ νš¨ν•œ μžλ°”μŠ€ν¬λ¦½νŠΈ 이름이고 μ˜ˆμ•½μ–΄κ°€ μ•„λ‹Œ 경우 λ§ˆμΉ¨ν‘œ, λŒ€κ΄„ν˜Έ ν‘œκΈ°λ²•μœΌλ‘œ 값을 κ°€μ Έμ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€. (id, gender)

 - ν”„λ‘œνΌν‹° ν‚€κ°€ μœ νš¨ν•œ μžλ°”μŠ€ν¬λ¦½νŠΈ 이름이 μ•„λ‹ˆκ±°λ‚˜ μ˜ˆμ•½μ–΄μΈ 경우 ν”„λ‘œνΌν‹° 값은 λŒ€κ΄„ν˜Έ ν‘œκΈ°λ²•μœΌλ‘œ 값을 가져와야 ν•©λ‹ˆλ‹€. λŒ€κ΄„ν˜Έ μ•ˆμ— 이름은 무쑰건 λ¬Έμžμ—΄μ΄μ–΄μ•Ό ν•©λ‹ˆλ‹€. (first-name, last-name, 1)

 

 

🟣 3.3 ν”„λ‘œνΌν‹° κ°’ κ°±μ‹ 

let user = {
    id : 'bigone',
    'first-name' : '길동',
    'last-name' : '홍',
    gender : 'male',
    1 : 10
}

console.log(user); // {1: 10, id: 'bigone', first-name: '길동', last-name: '홍', gender: 'male'}

user.id = 'smallone';
user['last-name'] = 'κΉ€';

console.log(user); // {1: 10, id: 'smallone', first-name: '길동', last-name: 'κΉ€', gender: 'male'}

 - ν”„λ‘œνΌν‹° 값을 ν˜ΈμΆœν•΄μ„œ μƒˆλ‘œμš΄ 값을 ν• λ‹Ήν•˜λ©΄ κ°±μ‹ λ©λ‹ˆλ‹€.

 

🟣  3.4 ν”„λ‘œνΌν‹° 동적 생성

let user = {
    id : 'bigone',
    'first-name' : '길동',
    'last-name' : '홍',
    gender : 'male',
    1 : 10
}

console.log(user); // {1: 10, id: 'bigone', first-name: '길동', last-name: '홍', gender: 'male'}

// user에 ageλΌλŠ” ν”„λ‘œνΌν‹° 동적 생성
user.age = 30;

console.log(user); // {1: 10, id: 'bigone', first-name: '길동', last-name: '홍', gender: 'male', age: 30}

 

 

🟣 3.5 ν”„λ‘œνΌν‹° μ‚­μ œ

let user = {
    id : 'bigone',
    'first-name' : '길동',
    'last-name' : '홍',
    gender : 'male',
    1 : 10
}

console.log(user); // {1: 10, id: 'bigone', first-name: '길동', last-name: '홍', gender: 'male'}

// 1, genderλΌλŠ” ν”„λ‘œνΌν‹° μ‚­μ œ
delete user['1'];
delete user.gender;

console.log(user); // {id: 'bigone', first-name: '길동', last-name: '홍'}

- delete μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ ν”„λ‘œνΌν‹°λ₯Ό μ‚­μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

πŸ“ μ •λ¦¬ 

  • κ°μ²΄λŠ” ν”„λ‘œνΌν‹°λ“€μ˜ λ¬ΆμŒμ΄λ‹€.
  • ν”„λ‘œνΌν‹°λŠ” ν‚€(key)-κ°’(value)이 ν•œ μŒμ„ μ΄λ£¨λŠ” λ³€μˆ˜μ΄λ‹€.
  • ν”„λ‘œνΌν‹° ν‚€λŠ” λ¬Έμžμ—΄μ΄μ–΄μ•Ό ν•œλ‹€.
  • ν”„λ‘œνΌν‹° 값은 μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” λͺ¨λ“  데이터 νƒ€μž…μ„ μ‚¬μš©ν•  수 μžˆλ‹€.
  • ν”„λ‘œνΌν‹° κ°’ ν˜ΈμΆœμ€ λ§ˆμΉ¨ν‘œ(.) ν‘œκΈ°λ²•κ³Ό λŒ€κ΄„ν˜Έ([]) ν‘œκΈ°λ²•μ΄ μžˆλ‹€.
  • λŒ€κ΄„ν˜Έ ν‘œκΈ°λ²•μ—μ„œ λŒ€κ΄„ν˜Έ μ•ˆμ—λŠ” 무쑰건 λ¬Έμžμ—΄μ΄ 듀어와야 ν•œλ‹€.
  • ν”„λ‘œνΌν‹° κ°’ 변경은 ν”„λ‘œνΌν‹° 값을 호좜 ν›„ μƒˆλ‘œμš΄ 값을 ν• λ‹Ήν•΄μ£Όλ©΄ λœλ‹€.
  • ν”„λ‘œνΌν‹° 동적 생성은 객체. μƒˆλ‘œμš΄ ν”„λ‘œνΌν‹° = κ°’μœΌλ‘œ λ§Œλ“€λ©΄ λœλ‹€.
  • ν”„λ‘œνΌν‹° μ‚­μ œλŠ” delete μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•΄μ„œ μ‚­μ œν•˜λ©΄ λœλ‹€.

 

 

κΈ΄ κΈ€ μ½μ–΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€ :) 
ν‹€λ¦° λ‚΄μš©μ΄ μžˆκ±°λ‚˜, 덧뢙일 λ‚΄μš©μ΄ μžˆλ‹€λ©΄ μ–Έμ œλ“ μ§€ λŒ“κΈ€ λ‹¬μ•„μ£Όμ„Έμš”!
제 글이 μ‘°κΈˆμ΄λ‚˜λ§ˆ μ½μœΌμ‹  λΆ„λ“€μ—κ²Œ 도움이 λ˜λ„λ‘ λ…Έλ ₯ν•˜κ² μŠ΅λ‹ˆλ‹€
λ‹€μŒ νŽΈμ— λ΄¬μš”~

728x90
λ°˜μ‘ν˜•