220829(월)
🪴 성장일지
책 행복한 이기주의자(웨인 다이어)
의 내용에 자극받아 시작하는 소박한 성장기록
살아있는 꽃과 죽은 꽃은 어떻게 구별하는가?<br/> 성장하고 있는 것이 살아 있는 것이다.<br/> 생명의 유일한 증거는 성장이다!
🌳 키워드 최대한 간단하게 정리, 추후에 보면서 스스로 설명
JavaScript
일급 객체
자바스크립트의 함수는 일급 객체
라고 한다. 일급 객체란 무엇일까?
- 무명의 리터럴로 생성할 수 있다.(즉, 런타임에 생성이 가능하다.)
- 변수나 자료구조(객체, 배열 등)에 저장할 수 있다.
- 함수의 매개변수에 전달할 수 있다.
- 함수의 반환값으로 사용 가능하다.
자바스크립트의 함수는 위 조건을 모두 만족하므로 일급 객체
이다.<br/>
말 그대로 함수를 객체와 동일하게 사용할 수 있다는 의미이다.<br/>
다만 함수는 호출이 가능하고 일반 객체에는 없는 함수 고유의 프로퍼티를 소유할 수 있다.
JavaScript
프로토타입
자바스크립트는 프로토타입
기반 언어이다. 그래서 프로토타입이 정확히 뭘까?<br/>
사전적 의미로는 원형
의 의미를 지닌다. 비유를 해보자면 어떤 객체의 유전 정보같은 느낌이다.<br/>
대표적으로 생성자 함수에서 생성자의 프로퍼티이며 new 연산자를 통해 인스턴스를 만들었을 때, 그 인스턴스는 생성자의 프로토타입을 참조하는 __proto__
라는 접근자 프로퍼티를 갖는다.
<br/>var Dog = function (name, age) { this.name = name; this.age = age; }; var hodu = new Dog('hodu', 2); (Dog.prototype === hodu.__proto__) === Object.getPrototypeOf(hodu); // true
객체지향 프로그래밍이란? 실세계의 실체(사물 혹은 개념)를 인식하는 철학적 사고를 프로그래밍에 접목하려는 프로그래밍 패러다임 강아지가 있다면, 강아지라는 개념에서 각각의 강아지 개체들은 이름, 나이 등 다양한 속성이 존재한다. 이 때 필요한 속성들만 간추려 표현하는 것을
추상화
라고 한다. 객체의상태
를 나타내는 데이터는프로퍼티
, 객체의동작
을 나타내는 함수는메서드
라고 한다.
프로토타입 체이닝
객체의 프로퍼티(혹은 메서드)에 접근하려 할 때, 해당 객체에 접근하려는 프로퍼티가 없다면 상위에 있는(체이닝되어있는) 프로토타입의 프로퍼티를 순차적으로 검색한다.<br/> 식별자에서 스코프 체이닝이 있었다면, 객체의 프로퍼티에선 프로토타입 체이닝이 있다고 생각하면 편하다.<br/> 실제로 이 두 체이닝은 서로 협력하며 식별자와 프로퍼티를 검색하는 데 사용된다.
프로토타입 체이닝을 이용하여 원하는 생성자를 상속시켜줄 수 있다.
정적 메서드, 프로토타입 메서드, 인스턴스 메서드
// 정적 메서드 : 생성자 자체의 메서드 Object.freeze(); // 프로토타입 메서드 : 생성자의 프로토타입의 메서드 Object.prototype.hasOwnProperty(); // 인스턴스 메서드 : 인스턴스가 직접 갖고 있는 메서드 var example = { a: 1, b: 2 }; example.c = 3;
JavaScript
this
어떤 객체의 메서드가 자신이 속한 객체의 프로퍼티를 참조하기 위해서 자신이 속한 객체를 가리키는 식별자가 있어야한다.<br/>
그래서 생긴 게 this
이다.(객체 본인을 내부에서 참조하기 위함)
즉, this
는 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리키는 자기 참조 변수
이다.<br/>
this 기억할 키워드
- this는 함수의
호출
에 따라 바인딩되며 함수 호출 방법에 따라 바인딩이 다르게 된다.- 일반 함수와 메서드로 호출되었을 때의 this 차이
- 기본적으로 this는 전역 객체를 참조하고 있다는 점
- Function.prototype의 메서드인 apply, call, bind의 공통점 및 차이점
undefined