12/30 정리 객체
1. 객체란?
객체는 각기 다른 값을 가지지만 동일한 데이터 종류를 가진 여러 데이터묶음을 간편하게 사용하기 위해 만들어졌다.
객체는 키(key)와 값(value)으로 구성되어 있으며 '키: 값' 쌍으로 구성된 것을 프로퍼티(property)라고 한다. 배열과는 다르게 각각의 프로퍼티 사이에 순서가 없다.
2. 객체 접근
객체에 접근하는 방법에는 2가지가 있다.
let user = {
name : 'Kim',
email : 'Kim@gmail.com',
country : 'Korea'
}
console.log(user.name) // 'Kim' 점 표기법(dot notation)
console.log(user['email']) // 'Kim@gmail.com' 대괄호 표기법(bracket notation)
* 대괄호 표기법으로 객체에 접근할 때 따옴표나 백틱으로 감싸줘야 한다.( 키가 문자열이기 때문이다.)
3. 객체 다루기
위와 마찬가지로 dot notation과 bracket notation으로 프로퍼티를 추가할 수 있다. delete키워드로 삭제도 할 수 있다.
let user = {
name : 'Kim',
email : 'Kim@gmail.com',
country : 'Korea'
}
user.boolean = true;
user['age'] = 20;
delete user.name;
console.log(user);
// {
// age: 20
// boolean: true
// country: "Korea"
// email: "Kim@gmail.com"
// }
in 연산자를 이용하면 객체에 키가 있는지 확인할 수 있다.
let user = {
name : 'Kim',
email : 'Kim@gmail.com',
country : 'Korea'
}
console.log('country' in user); // true
console.log('age' in user); //false
4. 페어와 객체 문제 풀기
- 객체를 다룰 때 for in문을 자주 사용했다.
var obj = {a: 1, b: 2, c: 3};
for (const prop in obj) {
console.log(`obj.${prop} = ${obj[prop]}`);
}
// Output:
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"
- 객체도 매서드가 있다.
let obj1 = {
name : 'Kim',
age : 20,
city : 'Seoul'
}
console.log(Object.keys(obj1)); // ["name", "age", "city"] 객체의 keys를 배열로 반환
console.log(Object.values(obj1)); // ["Kim", 20, "Seoul"] 객체의 values를 배열로 반환
let obj2 = {
country : 'Korea'
}
let objAssign = Object.assign(obj1,obj2); // 두 객체를 더해서 새로운 객체 반환
console.log(objAssign); // {name: "Kim", age: 20, city: "Seoul", country: "Korea"}
let result = Object.is(obj1,obj2); // 두 객체가 같은 객체인지 확인
console.log(result); // false
- 마지막 문제가 매우 어려웠는데, 문자열을 입력 받아서 가장 많이 반복되는 문자를 출력하는 문제였다.
let obj = { mostCount: 0, mostFrequent: '' };
let result = {};
for (let i of strArr) {
if (!(i in result)) {
result[i] = 1;
} else {
result[i] = result[i] + 1;
}
// 이 세줄을 작성하기 위해 한시간이 넘게 결렸다..
if(result[i] > obj['mostCount']){
obj['mostCount'] = result[i];
obj['mostFrequent'] = i;
}
}
return obj['mostFrequent'];
가장 많이 반복되는 문자는 찾았는데, 가장 많이 반복되는 문자가 여러개이면 가장 먼저 해당회수에 도달하는 문자를 찾는것이 힘들었다. 페어와 함께 방법을 고민고민 하다가 결국 구글링을 해서 관련 자료를 찾아서 이해하는 식으로 문제를 풀었다. '가장 먼저' 라는 키워드에 너무 매몰되어 있었던 것 같다. 그냥 먼저 찾은것을 변수에 넣어두고 이후 같은 회수가 중복된 문자를 찾으면 그냥 버리면 되는 문제였다. 알고리즘적인 사고가 아직은 부족한 것 같다.
* 개발자도구 debugger; 기능을 사용하면 함수가 어떻게 동작하는지 매 단계마다 확인할 수 있다. 이 기능을 이용하면 어떤 단계에서 오류가 발생하는지 확인할 수 있다.