▶ JavaScript Classes |
JavaScript Class Intro |
JavaScript Class Inheritance |
JavaScript Class Static |
JavaScript Class Static
JavaScript Class Static Methods: 정적 메서드 개념과 사용법
- *JavaScript의 정적 메서드(Static Methods)**는 클래스 인스턴스와 무관하게, 클래스 자체에 속하는 메서드입니다. 즉, 정적 메서드는 클래스의 인스턴스 없이도 호출할 수 있으며, 주로 유틸리티 함수나 클래스와 관련된 동작을 정의할 때 사용됩니다.
이 가이드는 JavaScript의 정적 메서드의 개념과 사용법을 설명합니다.
1. 정적 메서드의 기본 개념
- *정적 메서드(static methods)**는 클래스 자체에 속하는 메서드로, 인스턴스가 아닌 클래스 이름을 통해 직접 호출됩니다. 정적 메서드는 인스턴스의 상태와 무관한 클래스 전반에 걸친 동작을 정의할 때 유용합니다.
1.1. 정적 메서드 구문
class MyClass {
// 정적 메서드 정의
static myStaticMethod() {
console.log('This is a static method.');
}
}
// 클래스 이름으로 직접 호출
MyClass.myStaticMethod(); // This is a static method.
1.2. 주요 특징
static
키워드를 사용하여 정적 메서드를 정의합니다.- 정적 메서드는 클래스의 인스턴스가 아닌, 클래스 자체에서 호출됩니다.
- 정적 메서드는 클래스의 인스턴스 속성이나 인스턴스 메서드에 접근할 수 없습니다.
2. 정적 메서드의 사용 예시
정적 메서드는 주로 유틸리티 함수나 클래스와 관련된 동작을 정의하는 데 사용됩니다. 이때 인스턴스 상태를 참조하지 않고, 클래스 전체와 관련된 동작을 수행합니다.
2.1. 정적 메서드 예시
class MathUtils {
// 정적 메서드
static add(a, b) {
return a + b;
}
static multiply(a, b) {
return a * b;
}
}
// 클래스 이름을 통해 정적 메서드 호출
console.log(MathUtils.add(5, 10)); // 15
console.log(MathUtils.multiply(3, 4)); // 12
MathUtils
클래스는 정적 메서드인 **add()
*와 **multiply()
*를 가지고 있으며, 클래스 이름으로 호출할 수 있습니다.- 정적 메서드는 인스턴스 없이 호출되며, 인스턴스 속성이나 인스턴스 메서드에 접근하지 않습니다.
3. 정적 메서드와 인스턴스 메서드의 차이점
정적 메서드는 클래스의 인스턴스와 독립적으로 동작하며, 인스턴스 메서드는 각 인스턴스의 상태에 따라 동작합니다. 이 두 가지 메서드는 각각 다른 역할을 합니다.
3.1. 인스턴스 메서드와 정적 메서드 비교
class Person {
constructor(name) {
this.name = name;
}
// 인스턴스 메서드
greet() {
console.log(`Hello, my name is ${this.name}.`);
}
// 정적 메서드
static species() {
console.log('Humans');
}
}
// 인스턴스 메서드 호출
const person = new Person('Alice');
person.greet(); // Hello, my name is Alice.
// 정적 메서드 호출
Person.species(); // Humans
- 인스턴스 메서드는 인스턴스를 통해 호출되며, 인스턴스의 속성에 접근할 수 있습니다.
- 정적 메서드는 클래스 이름으로 직접 호출되며, 인스턴스 속성에 접근할 수 없습니다.
4. 정적 메서드에서 this
키워드
정적 메서드 내의 **this
**는 클래스 자체를 가리킵니다. 즉, 정적 메서드에서 **this
**는
클래스를 참조하며, 인스턴스를 참조하지 않습니다.
4.1. 정적 메서드에서 this
사용 예시
class Car {
constructor(brand) {
this.brand = brand;
}
// 정적 메서드
static describe() {
console.log('This is a car class.');
console.log(this); // this는 Car 클래스를 가리킴
}
}
Car.describe();
// This is a car class.
// [class Car]
- *
this
*는 정적 메서드 내부에서 클래스 자체를 가리킵니다. - 인스턴스는 정적 메서드에서 **
this
*로 참조할 수 없습니다.
5. 정적 메서드 상속
정적 메서드도 상속이 가능합니다. 자식 클래스는 부모 클래스의 정적 메서드를 상속받아 사용할 수 있으며, 필요에 따라 오버라이딩할 수 있습니다.
5.1. 정적 메서드 상속 예시
class Animal {
static identify() {
console.log('This is an animal.');
}
}
class Dog extends Animal {
static identify() {
super.identify(); // 부모 클래스의 정적 메서드 호출
console.log('This is a dog.');
}
}
Dog.identify();
// This is an animal.
// This is a dog.
- *
super.identify()
*는 부모 클래스의 정적 메서드를 호출합니다. - 자식 클래스는 부모 클래스의 정적 메서드를 상속받아 사용할 수 있으며, 이를 오버라이딩할 수 있습니다.
6. 정적 메서드의 실용적인 사용 예시
6.1. 유틸리티 함수로서의 정적 메서드
정적 메서드는 주로 유틸리티 함수로 사용됩니다. 예를 들어, 데이터를 처리하거나 변환하는 함수, 클래스 전체와 관련된 동작을 정의하는 경우 정적 메서드로 구현하는 것이 적합합니다.
class Converter {
// 정적 메서드: 섭씨를 화씨로 변환
static toFahrenheit(celsius) {
return celsius * 9/5 + 32;
}
// 정적 메서드: 화씨를 섭씨로 변환
static toCelsius(fahrenheit) {
return (fahrenheit - 32) * 5/9;
}
}
console.log(Converter.toFahrenheit(30)); // 86
console.log(Converter.toCelsius(86)); // 30
Converter
클래스는 섭씨와 화씨 간의 변환을 위한 정적 메서드를 제공합니다.- 이 메서드는 인스턴스와 무관하며, 클래스 자체와 관련된 유틸리티 함수로서 사용됩니다.
6.2. 싱글톤 패턴에서의 정적 메서드
- *싱글톤 패턴(Singleton Pattern)**은 하나의 인스턴스만 생성되는 디자인 패턴입니다. 이 패턴에서 정적 메서드는 클래스의 유일한 인스턴스를 반환하는 데 자주 사용됩니다.
class Singleton {
static instance;
constructor() {
if (Singleton.instance) {
return Singleton.instance;
}
Singleton.instance = this;
}
static getInstance() {
if (!Singleton.instance) {
Singleton.instance = new Singleton();
}
return Singleton.instance;
}
}
const instance1 = Singleton.getInstance();
const instance2 = Singleton.getInstance();
console.log(instance1 === instance2); // true (동일한 인스턴스)
Singleton.getInstance()
메서드는 클래스의 유일한 인스턴스를 반환하며, 이미 인스턴스가 존재할 경우 새 인스턴스를 생성하지 않습니다.- 정적 메서드를 사용하여 싱글톤 패턴을 쉽게 구현할 수 있습니다.
요약
- *JavaScript의 정적 메서드(Static Methods)**는 클래스의 인스턴스와 무관하게 동작하는 메서드로, 클래스 이름을 통해 직접 호출됩니다.
static
키워드를 사용하여 정적 메서드를 정의합니다.- 정적 메서드는 인스턴스 없이 호출되며, **클래
스 자체**와 관련된 동작을 정의하는 데 유용합니다.
- 정적 메서드는 주로 유틸리티 함수나 싱글톤 패턴 등에서 사용되며, 상속될 수 있습니다.
- 정적 메서드 내의 **
this
*는 클래스 자체를 가리키며, 인스턴스 속성이나 인스턴스 메서드에 접근할 수 없습니다.
정적 메서드는 클래스 레벨에서 공통된 동작을 처리하거나 유틸리티 기능을 제공할 때 매우 유용한 기능으로, 코드의 재사용성과 구조적 설계를 도울 수 있습니다.