JavaScript 객체

ctrs·2023년 5월 23일
0
post-custom-banner

객체
key - value pair
하나의 변수에 여러개의 값을 넣을 수 있다.


1. 객체 생성(선언) 방법

1-1. 기본적인 객체 선언 방법

let person ={
name: "홍길동",
age: 30,
gender: "남자"
};

1-2. 생성자 함수를 이용한 객체 선언 방법

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

let person1 = new Person("홍길동", 30, "남자");
let person2 = new Person("홍길순", 20, "여자");
// this 키워드는 뒤에서 배운다. 지금은 이런게 있다는것만 알아두자


2. 접근하는 방법

객체명.키

console.log("1", person.name); //실행 결과: 1 홍길동
console.log("2", person.age); //실행 결과: 2 30
console.log("3", person.gender); //실행 결과: 3 남자


3. 객체 메소드(객체가 가진 여러가지 기능: Object.~~)

3-1. Object.key(): key를 가져오는 메소드

let keys = Object.keys(person); // 객체 person에 저장된 key들이 변수 keys 안에 배열의 형태로 저장된다.
console.log('keys => ', keys);
// 실행 결과: keys => [ 'name', 'age', 'gender' ]

3-2. values

let values = Object.values(person); // 객체 person에 저장된 key의 값들이 변수 values 안에 배열의 형태로 저장된다.
console.log('values =>', values);
// 실행 결과: values => [ '홍길동', 30, '남자' ]

3-3. entries
key와 value를 묶어서 배열로 만든 배열

let entries = Object.entries(person);
// 객체 person에 저장된 key와 key의 값을 변수 entries 안에 2차원 배열의 형태로 저장한다. 행과 열이 있는 표는 아니다.

console.log('entries => ', entries);
// 실행 결과: entries => [ [ 'name', '홍길동' ], [ 'age', 30 ], [ 'gender', '남자' ] ]

3-4. assign
객체를 복사한다

let newPerson = {}; // 예시, 붙여넣기 할 대상은 빈 객체로 생성한다.
Object.assign(newPerson, person); // person의 key와 key 값을 복사하여 객체 newPerson에 저장한다.
console.log('newPerson =>', newPerson);
// 실행 결과: newPerson => { name: '홍길동', age: 30, gender: '남자' }

만약 key 값 중 하나를 수정해서 저장하고 싶다면
예제) 객체 person의 key와 key값을 복사하여 객체 newPerson에 넣어라. 단, age의 값은 31로 수정하라

Object.assign(newPerson, person, {age: 31});
console.log('newPerson =>', newPerson);
// 실행 결과: newPerson => { name: '홍길동', age: 31, gender: '남자' }

3-5. 객체 비교
객체 person01과 person02는 객체명만 다를 뿐 같은 key와 key값을 가지고있다.
이 경우 person01과 person02는 같은 객체인가?

let person01 ={
name: "홍길동",
age: 30,
gender: "남자"
};

let person02 ={
name: "홍길동",
age: 30,
gender: "남자"
};

console.log("answer is", person01 === person02);
// 실행 결과: answer is false
// 같은 객체가 아니다.

그렇다면 변수는 어떨까?

let str1 = "aaa";
let str2 = "aaa";
console.log("answer is", str1 === str2);
// 실행 결과: answer is true

무슨 차이일까?

객체와 배열은 다른 데이터 타입에 비해서 그 크기가 상당히 크기 때문에
메모리에 저장할 때 각각 별도의 공간에 저장한다.

person1과 person2라는 객체명은 각각 가지고 있는 key와 key값이 저장된 주소를 가지고 있을 뿐이다.
따라서 비록 person1과 person2가 서로 같은 데이터를 가지고 있다 하더라도 메모리 상에서의 그 위치는 다르기 때문에 완전히 같다고 할 수 없다.

이 내용은 3주차 메모리에서 더 자세히 배운다

그런데 만약 진짜 정말 진심 두 객체의 값이 같은지 검사하고 싶다면?
json의 stringigy 기능을 쓴다. 이 기능은 주어진 객체를 string, 문자열화한다.

console.log("answer is", JSON.stringify(person01) === JSON.stringify(person02));
// 실행 결과: answer is true

3-6. 객체 병합

let person03 = {
name: "홍길동",
age: 30,
};

let person04 = {
gender: "남자",
};

더 나아가서,
... : spread operator, ES6부터 나온 기능, 객체의 값을 풀어헤친다

let perfectMan = {...person03, ...person04};
console.log(perfectMan);
// 실행 결과: { name: '홍길동', age: 30, gender: '남자' }

이건 2주차에서 다시 배운다.

profile
저장을 습관화
post-custom-banner

0개의 댓글