자바스크립트

자바스크립트 복습2

민ズl 2025. 12. 9. 17:08
  • 객체의 속상이나 데이터에 접근 : 대괄호 표기법
const user = { name: "홍길동", age: 20 };
user["name"];  // "홍길동"

  • 생성자 함수에서는 return this가 생략가능
function User(name) {
  this.name = name;
  // return this;  // 생략 가능!
}

const me = new User("홍길동");

  • static으로 생성된 함수는 외부에서 접근가능
class User {
  constructor(name) {
    this.name = name;
  }
  static sayHello() {
    console.log("안녕하세요! 저는 User 클래스입니다!");
  }
}

User.sayHello(); // 안녕하세요! 저는 User 클래스입니다!

  • 접근제어자
종류 의미
public 기본값, 어디서든 접근 가능
private 클래스 내부에서만 #사용하여 가능
protected js엔 없음 / 타입스크립트엔 있음
class Car {
  public brand = "Kia";   // 기본값

  #price = 3000;          // private: 클래스 내부에서만

  showPrice() {
    console.log(this.#price);
  }
}

const c = new Car();
console.log(c.brand); // 가능
console.log(c.#price); // ❌ 에러

  • 접근자 프로퍼티(get/set) : 객체/클래스의 값을 함수처럼 보이게 하는 기능(겉보기엔 변수처럼 보임)
class User {
  #age = 0;

  get age() {
    return this.#age;
  }

  set age(value) {
    if (value < 0) throw new Error("나이는 음수일 수 없음!");
    this.#age = value;
  }
}

const u = new User();
u.age = 20;  // set 실행
console.log(u.age); // get 실행 → 20

  • super: 자식 클래스가 부모의 생성자/함수를 그대로 쓰고 싶을 때 사용
class Parent {
  constructor(name) {
    this.name = name;
  }

  say() {
    console.log("부모의 말");
  }
}

class Child extends Parent {
  constructor(name, age) {
    super(name); // Parent의 constructor(name)를 실행
    this.age = age;
  }
}

  • 오버라이딩: 부모 함수를 자식이 덮어쓰기
class Parent {
  say() {
    console.log("부모!");
  }
}

class Child extends Parent {
  say() {
    super.say();  // 부모의 say() 실행
    console.log("자식!");
  }
}

  • 리터럴 : 프로그래밍 언어가 그대로 해석하는 고정된 값
// 숫자 리터럴
10
3.14

// 문자 리터럴
"hello"
'world'

// 함수 리터럴
function() {}

let a = 10;   // 10은 숫자 리터럴
let b = a;    // b는 리터럴이 아님 (변수 a의 값이 복사된 것)

  • 래퍼 객체는 생성자 함수를 사용해 만들어지지만, 생성자 함수 자체는 아님
const str = "hello";

console.log(str.toUpperCase());  // "HELLO"

  • 브라우저의 this : window 객체
  • Node.js의 this : 빈 객체{}

  • 자료구조 : 데이터를 효율적으로  저장·관리하기 위한 구조 (데이터를 어떻게 담고 관리할지에 대한 '통' 또는 '상자'의 형태)
  • 기본 자료구조
    • 배열
    • 객체
    • Map
    • Set

  • slice로 만든 배열은 새 배열 객체를 Heap에 새로 만들어서 그 주소를 반환 하지만, 내부 객체는 같은 주소를 공유
  • pop, shift등은 힙(Heap)에 저장된 배열 객체 그 자체를 직접 변경

  • 객체/배열은 항상 주소로 비교
const a = { x: 1 };
const b = { x: 1 };

console.log(a == b);  // false
console.log(a === b); // false

  • 객체를 변수에 할당하면, 변수에는 객체 자체가 아니라 객체가 저장된 Heap 메모리의 주소(참조값)이 저장됨
const obj1 = { a: 1 };
const obj2 = obj1; // 주소값 복사 (얕은 복사)

obj2.a = 999;

console.log(obj1.a); // 999

  • 고차함수 : 함수를 인자로 받거나, 함수를 반환하는 함수
  • 고차함수의 장점
    • 코드의 가독성 good!
    • 함수를 데이터처럼 다룰 수 있어서 재사용성 및 확장성 good!
  • 새로운 배열을 만드는 고차함수
    • map
    • filter
    • slice
    • concat
  • 새로운 배열을 만들지 않는 고차함수
    • forEach (반환x)
    • sort (원본 변경)
    • splice (원본 변경)