728x90
1. 자바스크립트에게 객체란?
- 자바스크립트 : 객체 기반의 프로그래밍 언어이며 자바스크립트를 구성하는 거의 모든 것이 객체
- 객체지향 프로그래밍 : 객체의 집합으로 프로그램을 표현하려는 프로그래밍 패러다임
- 원시값을 제외한 나머지 값(함수, 배열, 정규 표현식 등)은 모두 객체
- 객체 타입은 다양한 타입의 값(원시값 또는 다른 객체)을 하나의 단위로 구성한 복잡한 자료구조
- 원시타입값 : 변경 불가능한 값, 객체 타입의 값 : 변경 가능한 값
2. 객체란?
a. 객체
- 프로퍼티와 메서드로 구성된 집합체
- 0개 이상의 프로퍼티로 구성된 집합, 프로퍼티는 키와 값으로 구성
b. 프로퍼티
- 프로퍼티 : 객체의 상태를 나타내는 값
- 자바스크립트에서 사용할 수 있는 모든 값은 프로퍼티 값 가능
- 자바스크립트의 함수는 일급 객체이므로 값으로 취급 가능 -> 함수도 프로퍼티 값으로 사용 가능
- 프로퍼티 값이 함수일 경우 일반 함수와 구분하기 위해 메서드라고 부름
c. 메서드
- 메서드 : 프로퍼티를 참조하고 조작할 수 있는 동작
- 객체는 상태와 동작을 하나의 단위로 구조화 할 수 있어 유용함
- 함수로 객체를 생성하기도 하고 함수자체가 객체이기도 함
3. 객체 리터럴에 의한 객체 생성
a. 자바스크립트는 프로토 타입 기반 객체지향 언어로서 다양한 객체 생성 방법 지원
- 객체 리터럴
- Object 생성자 함수
- 생성자 함수
- Object.create 메서드
- 클래스(ES6)
b. 객체 리터럴
- 가장 일반적이고 간단한 방법 -> 자바스크립트의 유연함과 강력함을 대표하는 객체 생성 방식
- 중괄호({...}) 내에 0개 이상의 프로퍼티 정의
- 변수가 할당되는 시점에 자바스크립트 엔진은 객체 리터럴을 해석해 객체 생성
- 중괄호 내에 프로퍼티 정의하지 않으면 빈 객체 생성
- 객체 리터럴은 값으로 평가되는 표현식 -> 코드블록 ✕ -> 중괄호 뒤에 세미콜론을 붙임
- 객체리터럴 외 다른 방법은 모두 함수를 사용해 객체 생성
4. 프로퍼티
a. 프로퍼티
객체 : 프로퍼티의 집합, 프로퍼티는 키와 값으로 구성
프로퍼티 나열할 땐 쉼표(,)로 구분, 마지막은 생략 가능
b. 프로퍼티 키에 대해서
프로퍼티 키
- 프로퍼티 키 : 빈 문자열을 포함하는 모든 문자열 또는 심벌 값
- 프로퍼티 값에 접근할 수 있는 이름으로 식별자 역할
프로퍼티 키를 문자열로? 심벌값으로?
- 심벌값도 프로퍼티 키로 사용할 수 있지만 일반적으로 문자열 사용
- 문자열일 경우 : "", '' 로 묶어줘야함
- 심벌값일 경우 : 식별자 네이밍 규칙을 따라야함
계산된 속성명
- 문자열, 문자열로 평가되는 표현식을 사용해 프로퍼티 키를 동적 생성 가능
- 프로퍼티 키로 사용할 표현식을 대괄호([...])로 묶어줌
프로퍼티 키에 문자열, 심벌 값 외 다른걸 사용하면?
- 암묵적 타입 변환을 통해 문자열로 변환
- 숫자 리터럴 사용 시 따옴표가 붙진 않지만 내부적으로 문자열로 변환
- 예약어를 사용해도 에러가 나지 않지만 예상치 못하므로 지양
프로퍼티 키를 중복 선언하면?
- 나중에 선언한 프로퍼티로 덮어쓰여짐
- 에러 없음
c. 프로퍼티 값에 대해서
프로퍼티 값
자바스크립트에서 사용할 수 있는 모든 값
메서드
자바스크립트의 함수는 객체(일급 객체) -> 함수는 값으로 취급 가능 -> 프로퍼티 값으로 사용 가능
메서드 : 프로퍼티 값이 함수인 경우 -> 객체에 묶여 있는 함수
5. 프로퍼티 접근
a. 접근 방법
- 마침표 표기법 : 마침표(.) 프로퍼티 접근 연산자 사용
- 대괄호 표기법 : 대괄호([...]) 프로퍼티 접근 연산자 사용
b. 대괄호 표기법
대괄호 프로퍼티 접근 연산자 내부에 지정하는 프로퍼티 키는 반드시 따옴표로 감싼 문자열이어야 함
->따옴표 없으면 식별자로 해석하기때문
숫자 리터럴인경우 따옴표 생략 가능
식별자 네이밍 규칙을 준수하지 않는 경우 대괄호 표기법만 사용 가능
c. Node.js 환경과 브라우저 환경에서의 에러 차이
- person.last-name 실행할 때 자바스크립트 엔진은 먼저 person.last를 평가
- person 객체에는 last인 프로퍼티 키가 없기 때문에 undefinde로 평가
- => person.last-name은 undefinde-name과 같음
- 자바스크립트 엔진이 name을 프로퍼티 키가 아닌 식별자로 찾음
- Node.js 환경에는 name 이라는 선언이 없어서 ReferenceError 발생
- 브라우저 환경에는 전역객체 window 프로퍼티에 name이 기본값 문자열로 암묵적으로 존재해 undefinde-name과 같아 NaN
6. 프로퍼티 값 추가, 변경, 삭제
a. 프로퍼티 값 갱신
- 이미 존재하는 프로퍼티에 값을 할당하면 프로퍼티 값 갱신
b. 프로퍼티 동적 생성
- 존재하지 않는 프로퍼티에 값을 할당하면 프로퍼티가 동적으로 생성되어 추가되고 프로퍼티 값이 할당
c. 프로퍼티 삭제
- delete 연산자를 통해 객체 프로퍼티 삭제 가능
- 존재하지 않는 프로퍼티 삭제 시 에러 없이 무시
7. ES6에서 추가된 객체 리터럴의 확장 기능
a. 프로퍼티 축약 표현
- 프로퍼티 값으로 변수 사요하는 경우, 변수 이름과 프로퍼티 키가 동일한 이름일 때 프로퍼티 키 생략 가능
- 프로퍼티 키는 변수 이름으로 자동 생성
b. 계산된 속성명
- 문자열, 문자열로 타입변환할 수 있는 값으로 평가되는 표현식 사용해 프로퍼티 키를 동적으로 생성 가능
- 계산된 속성명으로 프로퍼티 키 동적 생성하려면 프로퍼티 키로 사용할 표현식을 대괄호([...])로 묶어야함
c. 메서드 축약 표현
메서드 정의 방법
- ES5 : 프로퍼티 값으로 함수 할당
- ES6 : 프로퍼티 값으로 함수 할당할 때 function 키워드 생략한 축약 표현 사용 가능
- 축약 표현으로 정의한 메서드는 프로퍼티에 할당한 함수와 다르게 동작
모던 자바스크립트 딥다이브 책을 보고 정리한 내용입니다!!
728x90
'개념 정리 > 모던 자바스크립트 딥다이브' 카테고리의 다른 글
모던 자바스크립트 : 실행 컨텍스트의 생성과 식별자 검색 과정 (0) | 2023.10.31 |
---|---|
모던 자바스크립트 : 실행 컨텍스트 기초 (1) | 2023.10.30 |
모던 자바스크립트 : 타입변환과 단축평가 (0) | 2023.10.18 |
모던 자바스크립트 : 제어문 (0) | 2023.10.17 |
모던 자바스크립트 : 데이터 타입과 연산자 (1) | 2023.10.17 |