
주요 개념
1. 클래스
- 객체를 생성하기 위한 템플릿
- 데이터와 함수를 하나의 큰 블록으로 정의
- 데이터가 아니라 객체를 생성하는데 사용되는 청사진 역할
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
describe() {
return `${this.name} is ${this.age} years old.`;
}
}
const person1 = new Person("John", 30);
console.log(person1.describe()); // "John is 30 years old."
class Person {
constructor(name) {
this._name = name; // _name은 private 속성으로 사용됩니다.
}
get name() {
return this._name;
}
set name(value) {
this._name = value;
}
}
let person = new Person("Alice");
console.log(person.name); // Alice
person.name = "Bob";
console.log(person.name); // Bob
class Employee extends Person {
constructor(name, age, jobTitle) {
super(name, age); // 부모 클래스의 constructor 호출
this.jobTitle = jobTitle;
}
describe() {
return `${super.describe()} and works as a ${this.jobTitle}.`;
}
}
const employee1 = new Employee("Jane", 28, "Engineer");
console.log(employee1.describe()); // "Jane is 28 years old and works as an Engineer."
class MathUtils {
static square(number) {
return number * number;
}
}
console.log(MathUtils.square(3)); // 9
얕은 복사
let original = { a: 1, b: { c: 2 } };
let copy = { ...original };
copy.a = 3; // 원본에 영향을 주지 않음
copy.b.c = 3; // 원본의 'b.c'도 변경됨
console.log(original); // { a: 1, b: { c: 3 } }
console.log(copy); // { a: 3, b: { c: 3 } }
깊은 복사
JSON.stringify()와 JSON.parse()를 사용하여 간단하게 구현let original = { a: 1, b: { c: 2 } };
let deepCopy = JSON.parse(JSON.stringify(original));
deepCopy.a = 3; // 원본에 영향을 주지 않음
deepCopy.b.c = 3; // 원본의 'b.c'도 영향을 받지 않음
console.log(original); // { a: 1, b: { c: 2 } }
console.log(deepCopy); // { a: 3, b: { c: 3 } }
function deepCopy(obj) {
if (obj === null || typeof obj !== 'object') {
return obj;
}
if (Array.isArray(obj)) {
let arrCopy = obj.map(deepCopy); // 배열의 각 요소에 대해 재귀적으로 복사
return arrCopy;
}
let copiedObj = {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) { // 객체의 속성 확인
copiedObj[key] = deepCopy(obj[key]); // 속성 값에 대해 재귀적으로 복사
}
}
return copiedObj;
}
const original = {
level1: {
level2: {
level3: "data"
}
}
};
const copied = deepCopy(original);
console.log(copied); // { level1: { level2: { level3: "data" } } }