2차_3주차_이서연_회고록 - hyeone999/Docs-JS_deepDive_Study GitHub Wiki

19장 프로토타입

1. 객체지향 프로그래밍

  • 객체: 상태(state)와 동작(behavior)을 하나로 묶은 독립적 실체
  • 속성: 객체의 상태 (프로퍼티)
  • 메서드: 객체의 동작 (함수)

2. 상속

  • 객체는 다른 객체의 프로퍼티와 메서드를 상속받을 수 있음
  • 코드 재사용을 가능하게 함

3. 프로토타입의 개념

  • 자바스크립트는 프로토타입 기반 객체지향 언어
  • 모든 객체는 숨겨진 Prototype(또는 __proto__)을 가짐
  • 이 프로토타입은 또 다른 객체를 참조함 → 프로토타입 체인

4. 생성자 함수와 프로토타입

  • 생성자 함수는 객체를 생성
  • 이 함수에는 자동으로 prototype 프로퍼티가 생성됨
  • 생성된 인스턴스의 내부 [Prototype](/hyeone999/Docs-JS_deepDive_Study/wiki/Prototype)은 생성자 함수의 prototype을 참조

5. __proto__prototype

  • __proto__: 인스턴스가 참조하는 부모 객체 (즉, 프로토타입)
  • prototype: 생성자 함수가 생성할 인스턴스가 참조할 객체

6. 함수 객체만 prototype을 가짐

  • 일반 객체는 prototype 프로퍼티를 갖지 않음
  • 함수 정의 시 prototype 자동 생성

7. 프로토타입 체인

  • 프로퍼티나 메서드를 찾을 때 자신의 객체 → 프로토타입 객체 → 상위 프로토타입으로 순차 탐색

8. 오버라이딩과 섀도잉

  • 오버라이딩: 부모의 메서드를 자식이 재정의
  • 섀도잉: 동일한 이름의 프로퍼티가 자식 객체에 있으면 부모의 것을 가림

9. 프로토타입 변경

  • 생성자 함수의 prototype을 다른 객체로 변경 가능
  • 이 경우, constructor가 초기화되지 않으므로 수동으로 설정 필요

10. constructor 프로퍼티

  • 생성자 함수와 연결
  • 프로토타입 변경 시 올바르게 연결해주어야 함

11. instanceof 연산자

  • 객체가 어떤 생성자의 인스턴스인지 확인
  • 프로토타입 체인을 따라 검사

12. Object.create()

  • 새로운 객체를 만들 때 특정 객체를 프로토타입으로 설정
  • 생성자 없이도 상속 구현 가능

13. 정적 프로퍼티/메서드 vs 프로토타입 메서드

  • 정적(static): 생성자 함수에 직접 정의, 인스턴스에서는 접근 불가
  • 프로토타입 메서드: 모든 인스턴스에서 공유됨

14. 프로퍼티 존재 확인

  • in 연산자: 상속 포함 모든 프로퍼티 확인
  • hasOwnProperty(): 객체 자신의 프로퍼티만 확인

15. 프로퍼티 열거

  • for...in: 상속 포함 열거
  • Object.keys(): 자신의 열거 가능한 키만 반환
  • Object.getOwnPropertyNames(): 비열거 프로퍼티 포함

28장 Number

1. Number 생성자 함수

  • Number() 함수 또는 new Number() 생성자 사용 가능
  • Number()숫자 값을 반환
  • new Number()는 **Number 객체(래퍼 객체)**를 반환하며, typeof 결과는 "object"
  • 숫자 연산에는 Number() 함수 사용 권장
Number(10);            // 10
typeof Number(10);     // "number"

new Number(10);        // Number { 10 }
typeof new Number(10); // "object"

2. Number 프로퍼티

1) Number.EPSILON

부동소수점 연산에서 발생하는 작은 오차를 표현

0.1 + 0.2 === 0.3이 false인 문제를 해결할 때 사용

2) Number.MAX_VALUE

표현 가능한 가장 큰 수

3) Number.MIN_VALUE

표현 가능한 가장 작은 양수

4) Number.MAX_SAFE_INTEGER

안전하게 표현 가능한 가장 큰 정수

값: 2^53 - 1 (9007199254740991)

5) Number.MIN_SAFE_INTEGER

안전하게 표현 가능한 가장 작은 정수

값: -(2^53 - 1) (-9007199254740991)

6) Number.POSITIVE_INFINITY

양의 무한대 (Infinity)

7) Number.NEGATIVE_INFINITY

음의 무한대 (-Infinity)

8) Number.NaN

숫자가 아님 (Not-a-Number)

3. Number 메서드

1) Number.isFinite : 인수로 전달된 숫자값이 정상적인 유한수인지 판단하여 불리언 값으로 반환

2) Number.isInteger : 인수로 전달된 숫자값이 정수인지 판단하여 불리언 값으로 반환

3) Number.isNaN : 인수로 전달된 숫자값이 NaN인지 판단하여 불리언 값으로 반환

4) Number.is.SafeInteger : 인수로 전달된 숫자값이 안전한 정수인지 판단하여 불리언 값으로 반환

5) Number. prototype.toExponential : 숫자를 지수 표기법으로 문자열 반환

6) Number. prototype.toFixed : 숫자를 반올림하여 문자열로 반환

7) Number. prototype. toPrecision : 인수를 전달받은 전체 자릿수 기준으로 유효 숫자를 반환 → 정밀도 지정 가능]

8) Number. prototype. toString : 숫자를 문자열로 반환, 진수도 지정 가능 (2~36진법)


회고

저번 주 스터디와 마찬가지로 프로토타입 부분 또한 한번에 이해하긴 좀 무리가 있었다. 그래도 다같이 스터디를 하면서 복습하고 모르는 것에 대해 한번 더 집고 넘어가니 이제는 좀 알 것 같다. 저번에 배웠던 실행컨텍스트, 클로저에 이어서 프로토타입부분도 더 알아보면 좋을 거 같다.