3주차_김현중_회고록_part 2 - hyeone999/Docs-JS_deepDive_Study GitHub Wiki

✅ 학습한 내용

이번 주는 자바스크립트의 중요한 개념 중 하나인 **프로토타입(Prototype)**과 숫자 타입 및 객체를 다루는 Number 객체에 대해 학습했습니다.


📌 1. 프로토타입 (Prototype)

  • 자바스크립트는 프로토타입 기반 언어로, 객체 간 상속을 프로토타입을 통해 구현함.
  • 모든 객체는 숨겨진 prototype 링크를 가지고 있으며, 이는 다른 객체를 참조함 __proto__
  • 생성자 함수의 prototype 프로퍼티는 해당 생성자로 생성된 객체들의 __proto__와 연결됨.
  • 프로토타입 체인을 통해 상위 객체의 프로퍼티/메서드를 탐색함.
function Animal(name) {
  this.name = name;
}

Animal.prototype.eat = function () {
  console.log(`${this.name} is eating`);
};

const dog = new Animal('Rex');
dog.eat(); // Rex is eating
// dog는 eat 메서드를 직접 가지고 있지 않지만, 프로토타입 체인을 따라 Animal.prototype.eat을 찾아 실행함.

📌 2. Number 객체

  • 자바스크립트는 하나의 **숫자 타입(number)**만 존재하며, 정수와 실수를 모두 포함함.
  • Number는 숫자 값을 감싸는 래퍼 객체(wrapper object)
  • 수학적으로 정의되지 않은 값은 NaN, 무한대는 Infinity로 표현함.
console.log(typeof 10);        // 'number'
console.log(typeof new Number(10)); // 'object'
console.log(Number('abc'));    // NaN
console.log(1 / 0);            // Infinity
  • 주요 메서드:
  • toFixed(): 소수점 자리 고정
  • toString(): 문자열로 변환
  • parseInt(), parseFloat(): 문자열 → 숫자 변환
  • isNaN(), isFinite(): 유효성 검사

📌 3. 부동소수점 비교 문제

  • 0.1 + 0.2 !== 0.3 같은 문제는 부동소수점의 이진 표현 한계로 인해 발생함.
  • 자바스크립트는 이를 해결하기 위해 Number.EPSILON을 활용할 수 있음.
function isEqual(a, b) {
  return Math.abs(a - b) < Number.EPSILON;
}

isEqual(0.1 + 0.2, 0.3); // true

📝 4. 포인트

  • 프로토타입은 자바스크립트의 상속 메커니즘 핵심
  • 모든 객체는 __proto__를 통해 프로토타입 체인을 형성함
  • Number는 하나의 숫자 타입과 래퍼 객체 개념으로 동작
  • 부동소수점 비교에는 Number.EPSILON 활용하기