자바스크립트에서 믹스인(Mixin) 패턴은 단일 상속의 한계를 극복하고 여러 클래스의 기능을 결합할 수 있는 패턴입니다. 믹스인은 독립적인 메서드와 속성의 집합을 가진 객체로 구현되며, 이를 원하는 클래스의 프로토타입에 합성하여 새로운 동작을 부여합니다.// LoggerMixin: 로깅 기능을 제공하는 믹스인const LoggerMixin = { logInfo(message) { console.log(`[INFO] ${message}`); }, logError(message) { console.error(`[ERROR] ${message}`); }};// Document 클래스에 LoggerMixin 기능 추가class Document { constructor(title, conten..
기본 사용법class Person { }class Student extends Person { }const student = new Student();console.log(student instanceof Student); // true: student의 프로토타입 체인에 Student.prototype이 있음console.log(student instanceof Person); // true: Student.prototype의 [[Prototype]]이 Person.prototype을 가리킴위 예제에서 student 객체는 Student와 Person의 인스턴스로 모두 인식됩니다. 이는 instanceof 연산자가 객체의 프로토타입 체인을 따라 부모 클래스까지 확인하기 때문입니다.Symbol.hasI..
자바스크립트에서는 내장 클래스(예: Array, Map, Set 등)도 사용자 정의 클래스처럼 확장할 수 있습니다. 이를 통해 기존 기능을 기반으로 새로운 메서드나 프로퍼티를 추가하여 맞춤형 컬렉션 클래스를 만들 수 있습니다.class CountMap extends Map { // 요소의 개수를 반환하는 메서드 count() { return this.size; }}// CountMap의 인스턴스 생성const myMap = new CountMap();myMap.set('apple', 1);myMap.set('banana', 2);myMap.set('orange', 3);console.log(myMap.count()); // 출력: 3// 내장 메서드 사용myMap.delete('banana')..
캡슐화란객체 지향 프로그래밍(OOP)의 핵심 개념 중 하나로, 객체의 내부 구현 세부 사항을 숨기고, 외부에는 필요한 인터페이스만을 제공하여 안전하고 일관된 동작을 보장합니다. 자바스크립트에서는 public, protected(관례적으로 _ 접두사 사용), 그리고 private(최신 문법에서는 # 사용) 필드와 메서드를 활용하여 캡슐화를 구현할 수 있습니다.class Student { // #grade는 완전히 숨겨진 private 필드입니다. #grade; // _studentId는 protected 역할을 하는 필드로, 자식 클래스에서 접근 가능합니다. _studentId; constructor(name, studentId, initialGrade = 0) { this.name = na..
정적 메서드 (Static Methods)정적 메서드는 static 키워드를 사용하여 클래스 내부에서 정의되며, 인스턴스화된 객체가 아닌 클래스 자체에서 호출됩니다. 일반적으로 객체 간의 비교, 유틸리티 함수, 팩토리 메서드 등을 구현할 때 사용됩니다.class MathHelper { // 정적 메서드: 두 수의 합을 계산 static add(a, b) { return a + b; } // 정적 메서드: 두 수의 차이를 계산 static subtract(a, b) { return a - b; } // 정적 메서드: 두 수의 곱을 계산 static multiply(a, b) { return a * b; } // 정적 메서드: 두 수의 나눗셈 결과를 계산 static di..
기본 상속 구조 extends 키워드를 사용하여 한 클래스가 다른 클래스를 상속할 수 있습니다. 이를 통해 자식 클래스는 부모 클래스의 프로퍼티와 메서드를 자동으로 상속받게 되며, 프로토타입 체인을 통해 접근할 수 있습니다.class Animal { constructor(name) { this.name = name; } speak() { console.log(`${this.name}이(가) 소리를 냅니다.`); }}class Dog extends Animal { // 추가적으로 Dog만의 메서드 정의 fetch() { console.log(`${this.name}이(가) 공을 가져옵니다.`); }}const myDog = new Dog('바둑이');myDog.speak(); ..