10장 (객체 리터럴)
- 객체는 0개 이상의 프로퍼티로 구성된 집합이며, 프로퍼티는 키와 값으로 구성된다
const person = {
name: 'ko',
age: 30
}
name:'ko' => 프로퍼티
name => 프로퍼티 key
'ko' => 프로퍼티 value
-
객체란 프로퍼티와 메서드로 구성된 집합체
프로퍼티: 객체의 상태를 나타내는 값
메서드: 프로퍼티를 참조하고 조작할 수 있는 동작
-
인스턴스
- 클래스에 의해 생성되어 메모리에 저장된 실체
- 객체지향 프로그래밍에서는 객체는 클래스와 인스턴스를 포함한 개념
- 클래스는 인스턴스를 생성하기 위한 템플릿 역할
-
자바스크립트의 객체 생성 방법
- 객체 리터럴
- Object 생성자 함수
- Object.create 메서드
- 클래스
-
프로퍼티의 키는 네이밍 규칙을 따르지 않으면 반드시 따옴표를 사용해야 한다.
- ex) "last-name":'ji'
-
메서드
- 프로퍼티 값이 함수일 경우 일반 함수와 구분하기 위해 메서드라고 부른다.
- 객체에 묶여 있는 함수
-
프로퍼티 접근
마침표 표기법 -> person.name
대괄호 표기법 -> persion['name']
**존재하지 않는 프로퍼티에 접근 시 undefined를 반환한다
-
프로퍼티 삭제
- delete 연산자는 객체의 프로퍼티를 삭제한다.
- delete 연산자의 피연산자는 프로퍼티 값에 접근할 수 있는 표현식이어야 한다.
ex) delete person.name
-
ES6 에서는 프로퍼티 값으로 변수를 사용하는 경우 변수 이름과 프로퍼티 키가 동일한 이름일 때 키 값 생략가능
ex)
const name = 'ko'
const age = 30
const persion = { name, age }
11장 (원시 값과 객체의 비교)
- 원시 값은 변경 불가능한 값이다. 다만 객체는 변경 가능한 값이다.
- 객체를 변수에 할당하면 변수에는 참조 값이 저장된다.
- 값을 할당 할 때, 원본의 원시 값이 복사되어 전달 되면 값에 의한 전달, 원본의 참조 값이 복사되어 전달 되면 참조에 의한 전달이라 한다.
- const 를 통해 선언된 변수에 할당한 원시 값은 변경 불가능 하지만, 객체는 변경 가능하다.
- 유사 배열 객체
- 배열처럼 인덱스로 값에 접근할 수 있고, length 프로퍼티를 갖는 객체
- 문자열은 객체처럼 동작한다.
- 다만 문자열의 일부를 변경해도 반영되지 않는다. 문자열은 변경 불가능한 값이기 때문이다.
- 객체는 원시 값과 다르게 여러 개의 식별자가 하나의 객체를 공유할 수 있다.
- 이것은 객체의 구조적 단점
- 얕은 복사와 깊은 복사
- 얕은 복사: 객체에 중첩되어 있는 객체의 경우 참조 값을 복사
- 깊은 복사: 객체에 중첩되어 있는 객체까지 모두 복사해서 원시 값처럼 완전한 복사복은 만든다.
값에 의한 전달과 참조에 의한 전달은 식별자가 기억하는 메모리 공간에 저장되어 있는 값을 복사해서 전달한다는 면에서 동일하다.
다만, 식별자가 기억하는 메모리 공간, 즉 변수에 저장되어 있는 값이 원시 값이냐 참조 값이냐의 차이만 있을 뿐이다.
따라서 자바스크립트에는 참조에 의한 전달은 존재하지 않고 값에 의한 전달만이 존재한다고 말할 수 있다.
12장 (함수)
- 함수는 일련의 과정을 문으로 구현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것
- 함수 내부로 입력을 전달받은 변수를 매개변수, 입력을 인수, 출력을 반환값 이라 한다.
- 인수를 매개변수를 통해 함수에 전달하면서 함수의 실행을 명시적으로 지시하는 것을 함수 호출이라 한다.
- 함수를 사용하는 이유
- 재사용 가능한 코드를 만들 수 있다.
- 유지보수의 편의성을 높이고, 실수를 줄여 코드의 신뢰성을 높일 수 있다.
- 함수 이름, 변수 이름 등 역할에 대한 명시가 잘되어 있으면 코드의 가독성을 높일 수 있다.
- 함수 리터럴은 function 키워드, 함수 이름, 매개 변수 목록, 함수 몸체로 구성된다.
const add = function add(x,y){
return x + y;
}
- 함수 리터럴의 구성 요소

- 함수는 객체지만 일반 객체와는 다르다. 일반 객체는 호출할 수 없지만 함수는 호출할 수 있으며 고유한 프로퍼티를 갖는다.
- 자바스크립트 엔진은 생성된 함수를 호출하기 위해 함수 이름과 동일한 이름의 식별자를 암묵적으로 생성하고 함수 객체를 할당한다.
- 함수는 함수 이름으로 호출하는 것이 아니라 함수 객체를 가리키는 식별자로 호출한다.
- 자바스크립트의 함수는 일급 객체다. 일급 객체랄 함수를 값처럼 자유롭게 사용할 수 있다는 의미
- 함수 표현식으로 정의한 함수는 함수 표현식 이전에 호출할 수 없다. 함수 표현식으로 정의한 함수는 런타임시 변수로 호이스팅하여 undefined로 초기화 하기 때문이다.
- 함수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 것은 함수 호이스팅이라 한다
- 재귀 함수
- 함수가 자기 자신을 호출하는 것을 재귀 호출이라 한다.
- 재귀 함수 작성시 탈출조건을 꼭 명시하여야 한다.
- 반복문을 사용하는 것보다 직관적으로 더 이해하기 쉬울 때만 사용하는 것이 바람직
- 함수 내부에 정의된 함수를 중첩 함수라 하며, 중첩 함수를 포함하는 것을 외부 함수라고 한다.
- 고차함수 (HOF)
- 고차 함수는 매개변수를 통해 전달받은 콜백 함수의 호출 시점을 결정해서 호출한다
- 콜백 함수는 고차 함수에 의해 호출되며 이때 고차 함수는 필요에 따라 콜백 함수에 인수를 전달할 수 있다.
- 순수 함수와 비순수 함수
- 순수 함수: 부수 효과가 없는 함수
- 비순수 함수: 부수 효과가 있는 함수