- 객체의 속상이나 데이터에 접근 : 대괄호 표기법
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 : 빈 객체{}
- 자료구조 : 데이터를 효율적으로 저장·관리하기 위한 구조 (데이터를 어떻게 담고 관리할지에 대한 '통' 또는 '상자'의 형태)
- 기본 자료구조
- 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!
- 새로운 배열을 만드는 고차함수
- 새로운 배열을 만들지 않는 고차함수
- forEach (반환x)
- sort (원본 변경)
- splice (원본 변경)