객체는 몇 가지 특수한 기능을 가진
연관 배열 (associative array)
객체는 프로퍼티를 저장한다.
{key:value}
이것을 property 라고 한다.
key: 문자형 (문자열, 심볼)
value : 모든 자료형
let user = { // 객체 user
name: "John", //첫 번째 프로퍼티
age: 30 //두 번째 프로퍼티. key는 age, value는 30
객체이름.key
점 표기법 (dot notation)
: 객체에 저장된 key에 해당하는 value 불러오기.
delete 프로퍼티이름
프로퍼티 삭제
복수의 단어를 사용한 키값은 따옴표로 묶어라
trailing (hangoing) ,
예시)
한 줄에 하나의 문장을 담고 쉼표로 구분지어 밑으로 내려간다.
let user = {
name: "John",
age: 30
}
주의!! 상수(const) 객체는 수정될 수 있다.
const 객체이름 = {key:value}
에서 const는 객체의 값을 고정하지만 그 내용은 고정하지 않는다.
const 는 user=... 를 전체적으로 설정하려고 할 때 오류가 발생한다.
점 표기법으로 프로퍼티 값을 읽어올 수 없는 경우! (띄어쓰기가 있는 경우)
대괄호 [ ] 표기법(square bracket notation) 을 이용한다.
대괄호 표기법은 키에 어떤 문자열이 있던지 상관없이 동작한다.
계산된 프로퍼티(computed property)
프로퍼티 키가 대괄호 [ ]로 둘러싸여 있다.
{[fruit]:5}
이름과 값이 변수의 이름과 동일한 경우
단축 프로퍼티 사용 가능!
name : name 대신
name 만 사용해도 알아들음
프로퍼티 이름 짓기
예약어 (for let return...등) 사용 금지
* 하지만 객체 프로퍼티에는 __proto__ 외에는 제약이 없다.
* 예약어를 key로 사용 가능.
* 문자형이나 심볼형에 속하지 않은 값은 문자열로 자동 형변환된다.
"key" in object
프로퍼티 존재 여부 확인하기
* 자바스크립트 객체의 중요한 특징
: 존재하지 않는 프로퍼티에 접근하려고 해도 에러가 발생하지 않고 undefined를 반환한다.
for in 반복문
객체의 모든 키를 순회 가능
for (key in object) {
// 각 프로퍼티 키(key)를 이용하여 본문(body)를 실행합니다.
}
객체 정렬 방식
정수 프로퍼티 (integer property)는 자동으로 정렬
그 외의 프로퍼티는 객체에 추가한 순서 그대로 정렬
참조에 의한 객체 복사
객체는 참조에 의해 (by reference) 저장되고 복사된다.
* 객체가 할당된 변수를 복사 = 객체의 참조값이 복사되고, 객체는 복사되지 않는다.
참조에 의한 비교
객체 비교시 == 와 ===는 동일함
피연산자인 두 객체가 동일한 객체인 경우 true를 반환
객체 복사
정말 필요한 경우 :
1. 새로운 객체를 만든 다음,
2. 기존의 객체 프로퍼티들을 순회,
3. 원시수준까지 프로퍼티를 복사.
let user = {
name : "John",
age : 30
};
let clone = {}; // 새로운 빈 객체
// 빈 객체에 user 프로퍼티 전부를 복사해 넣습니다.
for (let key in user) {
clone[key] = user[key];
}
// 이제 clone은 완전히 독립적인 복제본이 되었습니다.
clone.name = "Pete"; // clone의 데이터를 변경합니다.
alert( user.name ); // 기존 객체에는 여전히 John이 있습니다.
또는 Object.assign 이용 : 얕은 복사 (shallow copy)
Object.assign(dest, [src1, src2, src3 ....])
dest = 목표로 하는 객체
src1, src2, ... 복사하고자 하는 객체
중첩 객체 복사
프로퍼티가 다른 객체에 대한 참조 값인 경우 복사를 하고 싶을 때 사용 = deep cloning (깊은 복사)
Structed cloning algorithm
(자바스크립트 라이브러리 lodash 의 메서드인 _.cloneDeep(obj)를 이용하면
알고리즘을 직접 구현하지 않고 깊은 복사 처리 가능)
객체 지향 프로그래밍 (object-oriented programming, OOP)
참고서 : <GoF의 디자인 패턴> 에릭 감마 , <UML을 활용한 객체지향 분석 설계> 그래디 부치
메서드 : 객체 프로퍼티에 저장된 함수
function을 생략해도 메서드를 정의할 수 있다.
this : '현재 객체' 를 나타낸다.
메서드 내부에서 this 키워드를 사용하면 객체에 접근할 수 있다.
( 메서드는 this로 객체를 참조한다. )
화살표 함수 =>는 고유한 this 를 가지지 않는다.
생성자 함수 (constructor function)
1. 함수 이름의 첫 글자 = 대문자
2. new 연산자를 붙여 실행
3. new 와 함께 호출하면 내부에서 this 가 암시적으로 만들어지고, 마지막엔 this 가 반환)
- 생성자 함수에는 return 문이 없다. (this 가 역할을 대신)
소감
전보다는 조금 더 이해가 되는 것 같다. 더이상 외계어가 아니라는 사실이 좋다. 파이팅.
출처 : 스파르타 코딩 클럽 내일 배움 캠프 [자바스크립트 핸드북]
'학습 내용 정리 > javascript' 카테고리의 다른 글
javascript 문법 총정리 (0) | 2023.05.22 |
---|---|
javascript 6. 객체 순회 , 객체 분해 , 배열 분해 (1) | 2023.05.03 |
javascript 4. 함수 (3) | 2023.05.03 |
javascript 3. 배열과 반복문 (1) | 2023.05.03 |
javascript 2. 조건문 if switch (1) | 2023.05.02 |