객체란 키(key)와 값(value)으로 구성된 프로퍼티(Property)들의 집합이다.
자바스크립트는 객체(Object) 기반의 스크립트 언어이며, 자바스크립트를 이루고 있는 거의 "모든 것"이 객체다. 원시 타입(Primitives)을 제외한 나머지 값들(함수, 배열, 정규표현식 등)은 모두 객체이기 때문에 자바스크립트에서 객체는 필수 불가결한 존재다.
객체는 데이터를 의미하는 프로퍼티(Property)와 데이터를 참조하고 조작할 수 있는 동작을 의미하는 메소드(Method)로 구성된 집합이다. 객체는 데이터(프로퍼티)와 그 데이터에 관련되는 동작(메소드)을 모두 포함할 수 있기 때문에 데이터와 동작을 하나의 단위로 구조화할 수 있어 유용하다.
관련 있는 정보들을 서로 연결하는 데에 객체를 활용하면, 데이터(Value)와 문자열(Key)을 연관 지어서 저장할 수 있기 때문에 코드를 유지 보수할 때에도 매우 편리하다.
프로퍼티란 속성이라는 뜻으로, JS에서는 객체 내부의 속성을 의미한다.
프로퍼티는 키와 값으로 구성된 프로퍼티의 집합으로 자바스크립트에서 사용할 수 있는 모든 값을 사용할 수가 있다.
키는 문자열로 지정하지 않아도 문자열로 변환된다.
let person = {
name: 'juan',
age: 28
};
프로퍼티: name: juan, age: 28
프로퍼티 키: name, age
프로퍼티 값: juan, 28
1. let 객체이름 = {};
2. let 객체이름 = new Object();
object.propertyKey
object.["propertyKey"]
object.[1] // index number
일반적으로는 마침표로 접근하나 대괄호를 사용할 때가 있다.
키(key)가 유효한 값이 아닐 경우 대괄호를 사용해야한다.
- 공백이 존재
- 숫자로 시작
- $,_ 와 같은 특수문자 사용
위와 같이 유효한 값이 아닐경우 대괄호 표기법을 사용하여 접근할 수 있다.
var person = {
name: "JY",
sayHello: function() {
console.log("hello, my name is " + this.name);
}
};
person.name = "Han";
person.sayHello();
person.age = 25;
console.log(person.age);
delete 연산자를 사용하여 객체의 프로퍼티를 삭제할 수 있음delete 연산자의 피연산자는 프로퍼티의 키여야 함var person = {
name: "JY",
sayHello: function() {
console.log("hello, my name is " + this.name);
}
};
delete person.name;
마침표 접근법과 대괄호 접근법을 적절하게 쓰면 쉽다.
let classRoom = {
teacher: [{
a : 1,
b : 2,
c : 3
},{
d : 4,
e : 5,
f : 6
}],
student: [{
g : 7,
h : 8,
i : 9
},{
j : 10,
k : 11,
l : 12
}]
}
console.log(classRoom.teacher[1].e); // 4
console.log(classRoom.student[0].g); // 7
배열은 JavaScript의 원시 자료형이 아닌 객체형에 속하기 때문에 객체처럼 동작한다.
여기서 객체란 ❔
🔐객체라는 자료구조는 키를 사용해 식별할 수 있는 값(키의 값)을 담은 컬렉션으로 이를 이용해 데이터를 저장할 수 있고 객체만으로도 다양한 작업들이 충분히 가능하다.
그럼 배열은 왜 만들진걸까요?
순서가 있는 목록을 만들 때 🔏객체를 사용하면 순서와 관련된 메서드가 없어 불편하다.
객체는 태생이 순서를 고려하지 않고 만들어진 자료구조이기 때문에 🔏객체를 이용하면 새로운 프로퍼티를 기존 프로퍼티 사이에 끼워 넣는 것도 불가능하다.
요약
이러한 이유들로 인해 🔑배열의 본질은 바로 객체로 순서가 있는 자료를 저장하고 관리하는 용도에 최적화된 자료구조이다.
순서가 없는 임의의 키(Key)를 사용하는 자료구조를 사용한다면 배열이 아닌 일반 객체{}가 사용하기에 적합할 것이다.