클래스 레벨 vs 인스턴스 레벨
Coddy JavaScript 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 56개 중 31번째.
JavaScript 클래스에는 두 가지 고유한 수준의 속성과 메서드가 있습니다:
- 인스턴스 수준: 클래스에서 생성된 각 개별 객체에 속하는 속성과 메서드입니다.
- 클래스 수준: 인스턴스가 아닌 클래스 자체에 속하는 속성과 메서드입니다.
차이점을 알아봅시다:
먼저, 인스턴스 레벨 멤버들을 살펴보겠습니다. 인스턴스 메서드를 가진 일반 클래스를 생성합니다:
class Car {
constructor(make) {
this.make = make;
}
drive() {
return `The ${this.make} is driving`;
}
}Car 클래스의 인스턴스를 생성합니다:
const myCar = new Car("Toyota");인스턴스 메서드를 호출합니다:
console.log(myCar.drive()); // 출력: "The Toyota is driving"각 인스턴스는 drive 메서드의 자체 복사본을 가지며, this를 사용하여 자신의 속성에 접근할 수 있다는 점에 유의하세요.
이제 클래스 레벨 멤버에 대해 살펴보겠습니다. 클래스에 정적 메서드(static method)를 추가합니다. 메서드 이름 앞에 static 키워드를 사용하여 인스턴스가 아닌 클래스 자체에 속하는 메서드를 생성합니다.
class Car {
constructor(make) {
this.make = make;
}
drive() {
return `The ${this.make} is driving`;
}
static compareModels(car1, car2) {
return `Comparing ${car1.make} with ${car2.make}`;
}
}정적 메서드는 특정 인스턴스 데이터에 의존하지 않는 유틸리티 함수에 유용합니다. 정적 메서드는 인스턴스가 아닌 클래스 자체에서 호출됩니다:
const car1 = new Car("Toyota");
const car2 = new Car("Honda");
console.log(Car.compareModels(car1, car2)); // 출력: "Comparing Toyota with Honda"인스턴스에서 정적 메서드를 호출하려고 하면 오류가 발생합니다:
car1.compareModels(car1, car2); // 오류: car1.compareModels는 함수가 아닙니다챌린지
생성자만 있는 Calculator 클래스가 주어집니다. 여러분의 작업은 다음 두 가지 메서드를 추가하는 것입니다:
1. 인스턴스 메서드 <strong>add(number)</strong>
- 주어진 숫자를 계산기의 현재 값에 더합니다.
this.value를 업데이트하고 새로운 값을 반환합니다.*이 메서드는 계산기 인스턴스에서 호출됩니다:
calc.add(3)
2. 정적 메서드 <strong>multiply(num1, num2)</strong>
- 두 개의 숫자를 받아 그 곱을 반환합니다.
this를 사용하지 않습니다 (정적 메서드는 인스턴스 데이터를 가지지 않습니다).*이 메서드는 Calculator 클래스 자체에서 호출됩니다:
Calculator.multiply(4, 6)
치트 시트
JavaScript 클래스에는 두 가지 수준의 속성과 메서드가 있습니다:
- 인스턴스 수준: 클래스에서 생성된 각 개별 객체에 속함
- 클래스 수준: 인스턴스가 아닌 클래스 자체에 속함
인스턴스 메서드:
this를 사용하여 인스턴스 속성에 접근할 수 있는 일반 메서드입니다:
class Car {
constructor(make) {
this.make = make;
}
drive() {
return `The ${this.make} is driving`;
}
}
const myCar = new Car("Toyota");
console.log(myCar.drive()); // "The Toyota is driving"정적 메서드:
static 키워드를 사용하여 클래스 자체에 속하는 메서드를 생성합니다. 이 메서드들은 인스턴스가 아닌 클래스에서 호출됩니다:
class Car {
static compareModels(car1, car2) {
return `Comparing ${car1.make} with ${car2.make}`;
}
}
const car1 = new Car("Toyota");
const car2 = new Car("Honda");
// 클래스 자체에서 호출
console.log(Car.compareModels(car1, car2)); // "Comparing Toyota with Honda"
// 인스턴스에서 호출하면 오류가 발생함
car1.compareModels(car1, car2); // Error: car1.compareModels is not a function정적 메서드는 특정 인스턴스 데이터에 의존하지 않는 유틸리티 함수에 유용합니다.
직접 해보기
import { Calculator } from './calculator.js';
// 아래 코드를 수정하지 마세요
const calc = new Calculator(5); // 값이 5인 계산기를 생성합니다
const result1 = calc.add(3); // 3을 더해야 함 → 5 + 3 = 8
const result2 = Calculator.multiply(4, 6); // 4 × 6 = 24를 곱해야 함
console.log(result1); // 예상 결과: 8
console.log(result2); // 예상 결과: 24이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.