객체(object) 파트 정리
: 여러 속성을 하나의 변수에 저장할 수 있도록 해주는 데이터 타입. Javascript는 '객체지향(기반)언어'이기 때문에 객체는 Javascript의 모든 것이라고 여겨지기도 한다.
객체 myself
가 있다면,
let myself = {
name: 'Code Kim',
location: { country: 'South Korea', city: 'Seoul'},
age: 30,
cats: ['냥순', '냥돌']
}
= name: 'Code Kim' / location: { country: 'South Korea', city: 'Seoul'} / age: 30 / cats: ['냥순', '냥돌']
= name / location / age / cats
'string' 형태
= 'Code Kim' / { country: 'South Korea', city: 'Seoul'} / 30 / ['냥순', '냥돌']
모든 데이터 타입 가능
: key를 이용하여 value에 접근한다.
myself.name // ='Code Kim'
myself.location // = { country: 'South Korea', city: 'Seoul'}
myself['cats'] // = ['냥순', '냥돌']
myself['age'] // =30
Dot | Bracket | |
---|---|---|
⭐️변수사용⭐️ | ❌ | ⭕️ |
띄어쓰기 | ❌ obj.prop name | ⭕️ obj["prop name"] |
숫자로 시작하는 | ❌ obj.1prop | ⭕️ obj["1prop"] |
특수 문자가 포함된 | ❌ obj.### | ⭕️ obj["###"] |
_ 혹은 $가 포함, 시작 | ⭕️ obj.prop_1, obj.prop$ | ⭕️ obj["prop_1"], obj.["prop$"] |
두 방법의 가장 큰 차이점은 "변수의 활용 여부"이다.
let myself = {
name: 'Code Kim',
location: { country: 'South Korea', city: 'Seoul'},
age: 30,
cats: ['냥순', '냥돌'],
}
//변수 name에 key값 'cats'를 할당
let name = 'cats';
console.log(myself.name);// 'Code Kim'
//Dot notation에서는 name을 변수가 아닌 객체 myself의 key로만 인식하여
//name key의 value를 출력.
console.log(myself[name]);// ['냥순', '냥돌']
//Bracket notation에서는 name 변수 선언을 인식.
//∴ myself['cats']와 같으므로 cats key의 value를 출력.
console.log(myself['name']);// 'Code Kim'
//문자열 'name' ≠ 변수 name ∴ name key의 value를 출력.
let person = {
name: "Minjee Son"
};
console.log(person.name);// "Minjee Son"
console.log(person.age);// undefined(없음)
person.age = 20;
//or
person["age"] = 20;
console.log(person.age);// 20
let person = {
name: "Minjee Son",
age: 20
};
console.log(person.name);// "Minjee Son"
console.log(person.age);// 20
person.age = 25;
//or
person["age"] = 25;
console.log(person.age);// 25
: delete 연산자 사용
let person = {
name: "Minjee Son",
age: 25
};
console.log(person.name);// "Minjee Son"
console.log(person.age);// 25
delete person.age;
console.log(person.age);// undefined
✅ 배열은 [index_number] / 객체는 .(Dot Natation) or [](Bracket Notation)으로 접근한다.
let myPlants = [
{
type: "flowers",
list: [
"rose",
"tulip",
"dandelion"
]
},
{
type: "trees",
list: [
"fir",
"pine",
"birch"
]
}
];
1) myPlants의 "pine"
value에 접근하고 싶다면?
let foundValue = myPlants[1].list[1];
2) myPlants의 "flowers"
value에 접근하고 싶다면?
let foundValue = myPlants[0].type;
자바스크립트는 크게 원시형 타입(primitive type)과 참조형 타입(Reference Type) 으로 나눠지며, 참조형 타입은 객체의 번지를 참조하므로 그냥 전부 객체(Object) 라고 분류하기도 한다.
따라서 참조형 타입에 속하는 함수, 배열은 모두 객체처럼 동작한다.
객체는 key를 이용해 데이터를 지정할 수 있고 다양한 작업이 가능하지만, 순서가 없다는 특징이 있다.
개발을 하다보면 꼭 순서가 필요한 작업이 있는데, 이때 객체는 순서와 관련된 메서드가 없어 불편하고 새로운 데이터(Property)를 기존 데이터 사이에 끼워 넣는 것도 불가능하다.
따라서,
💡 순서가 있는 컬렉션이 필요할 때 사용하는 자료구조 = 배열
즉, 배열의 본질 = 객체 이며
배열은 key가 숫자(number)인 객체라고 볼 수 있다.