자바스크립트 - 정적 메서드

안녕하세요, 미래의 자바스크립트 마법사 여러분! 오늘 우리는 정적 메서드의 fascineting 세상으로 함께 뛰어보겠습니다. 프로그래밍에 처음 도전하는 분이라도 걱정하지 마세요 - 저는 여러분을 단계별로 안내해 드릴 테니까요. 그동안 수많은 학생들을 가르쳐온 경험을 바탕으로 말이죠. 그럼 커피 한 잔을 (또는 여러분의 최애 음료를) 마시면서, 이 흥미로운 여정을 함께 시작해보겠습니다!

JavaScript - Static Methods

정적 메서드란?

정의와 목적

정적 메서드는 자바스크립트에서 특별한 종류의 메서드로, 클래스 자체에 속하며 특정 클래스 인스턴스에 속하지 않습니다. 이를 클래스와 관련이 있지만 개별 오브젝트의 데이터에 접근할 필요가 없는 유틸리티 함수로 생각할 수 있습니다.

상자(클래스) 안에 다양한 도구가 들어 있는 걸 상상해 보세요. 일부 도구( 일반 메서드)는 특정 오브젝트에서 사용되지만, 다른 도구(정적 메서드)는 특정 오브젝트가 필요 없이 일반적인 목적으로 사용됩니다.

문법

정적 메서드를 생성하려면 메서드 이름 앞에 static 키워드를 사용합니다. 다음은 기본 문법입니다:

class 클래스이름 {
static 메서드이름() {
// 메서드 본문
}
}

주요 특성

  1. 정적 메서드는 클래스 자체에서 호출되며, 클래스 인스턴스에서 호출되지 않습니다.
  2. 인스턴스 특정 데이터에 접근할 수 없습니다 (즉, this를 사용하여 오브젝트 속성을 참조할 수 없습니다).
  3. 클래스와 관련된 유틸리티 함수로 자주 사용됩니다.

이제 기본 이해를 얻었으므로, 몇 가지 예제를 통해 개념을 더욱 확고히 하겠습니다.

예제

예제 1: 간단한 계산기

Calculator 클래스에 몇 가지 정적 메서드를 생성해 보겠습니다:

class Calculator {
static add(a, b) {
return a + b;
}

static subtract(a, b) {
return a - b;
}

static multiply(a, b) {
return a * b;
}

static divide(a, b) {
if (b === 0) {
return "Error: Division by zero";
}
return a / b;
}
}

// 정적 메서드 사용
console.log(Calculator.add(5, 3));      // 출력: 8
console.log(Calculator.subtract(10, 4)); // 출력: 6
console.log(Calculator.multiply(2, 6));  // 출력: 12
console.log(Calculator.divide(15, 3));   // 출력: 5
console.log(Calculator.divide(10, 0));   // 출력: Error: Division by zero

이 예제에서 우리는 Calculator 클래스에 네 가지 정적 메서드: add, subtract, multiply, divide를 생성했습니다. 이 메서드들은 Calculator 클래스를 인스턴스화하지 않고 직접 호출됩니다.

이 메서드들은 일반 계산을 수행하는 데 필요한 특정 오브젝트 데이터가 필요하지 않기 때문에 정적 메서드로 완벽한 후보입니다.

예제 2: 날짜 포맷터

DateFormatter 클래스에 날짜 포맷ting 정적 메서드를 생성해 보겠습니다:

class DateFormatter {
static formatDate(date) {
const day = String(date.getDate()).padStart(2, '0');
const month = String(date.getMonth() + 1).padStart(2, '0'); // 월은 0에서 시작합니다
const year = date.getFullYear();

return `${day}/${month}/${year}`;
}
}

const today = new Date();
console.log(DateFormatter.formatDate(today)); // 출력: 현재 날짜를 DD/MM/YYYY 형식으로

이 예제에서 formatDate 정적 메서드는 Date 오브젝트를 입력받아 포맷된 문자열을 반환합니다. 이 메서드는 DateFormatter 클래스를 인스턴스화하지 않고도 사용할 수 있어 매우 편리합니다.

예제 3: 랜덤 수 생성기

랜덤 수를 생성하는 정적 메서드가 있는 RandomGenerator 클래스를 생성해 보겠습니다:

class RandomGenerator {
static getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}

static getRandomFloat(min, max) {
return Math.random() * (max - min) + min;
}

static getRandomBoolean() {
return Math.random() < 0.5;
}
}

console.log(RandomGenerator.getRandomInt(1, 10));    // 출력: 1과 10 사이의 랜덤 정수
console.log(RandomGenerator.getRandomFloat(0, 1));   // 출력: 0과 1 사이의 랜덤 실수
console.log(RandomGenerator.getRandomBoolean());     // 출력: 랜덤으로 true 또는 false

RandomGenerator 클래스는 다양한 유형의 랜덤 값을 생성하는 유틸리티 메서드를 제공합니다. 이 메서드들은 특정 오브젝트 데이터가 필요하지 않기 때문에 정적 메서드로 완벽한 후보입니다.

예제 4: 문자열 유틸리티

문자열 조작에 유용한 정적 메서드가 있는 StringUtils 클래스를 생성해 보겠습니다:

class StringUtils {
static capitalize(str) {
return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
}

static reverse(str) {
return str.split('').reverse().join('');
}

static countVowels(str) {
return (str.match(/[aeiou]/gi) || []).length;
}
}

console.log(StringUtils.capitalize("hELLO")); // 출력: "Hello"
console.log(StringUtils.reverse("JavaScript")); // 출력: "tpircSavaJ"
console.log(StringUtils.countVowels("Beautiful")); // 출력: 5

이 문자열 유틸리티 메서드들은 문자열에 대한 작업을 수행하는 데 필요한 특정 오브젝트 데이터가 필요하지 않기 때문에 정적 메서드로 완벽한 후보입니다.

정적 메서드 사용 시기

정적 메서드는 다음과 같은 경우에 특히 유용합니다:

  1. 오브젝트 상태가 필요하지 않은 유틸리티 함수.
  2. 클래스 인스턴스를 생성하는 팩토리 메서드.
  3. 클래스와 개념적으로 관련이 있지만 인스턴스 데이터에 의존하지 않는 연산.

정적 메서드 표

이 예제에서 다루었던 정적 메서드의 요약입니다:

클래스 메서드 설명
Calculator add(a, b) 두 수를 더합니다
Calculator subtract(a, b) 첫 번째 수에서 두 번째 수를 뺍니다
Calculator multiply(a, b) 두 수를 곱합니다
Calculator divide(a, b) 첫 번째 수를 두 번째 수로 나눕니다
DateFormatter formatDate(date) 날짜를 DD/MM/YYYY 형식으로 포맷합니다
RandomGenerator getRandomInt(min, max) 랜덤 정수를 생성합니다
RandomGenerator getRandomFloat(min, max) 랜덤 실수를 생성합니다
RandomGenerator getRandomBoolean() 랜덤으로 true 또는 false를 생성합니다
StringUtils capitalize(str) 문자열의 첫 글자를 대문자로 변경합니다
StringUtils reverse(str) 문자열을 뒤집습니다
StringUtils countVowels(str) 문자열에 포함된 모음을 세웁니다

이제 여러분은 자바스크립트의 정적 메서드에 대해 탐구했고, 기본 정의에서 실제 예제까지 이해했습니다. 정적 메서드는 여러분의 자바스크립트 도구箱에서瑞士军刀와 같은 존재로, 다양하고 유용하며 오브젝트가 필요하지 않아도 그 역할을 수행할 수 있습니다.

자바스크립트 여정을 계속하면서 정적 메서드의 다양한 용도를 발견하시길 바랍니다. 정적 메서드는 코드를 깨끗하고 잘 정리된 상태로 유지하는 강력한 기능입니다. 그러므로 코드를 작성하고, 버그를 최소화하며, 정적 메서드를 항상 유용하게 사용하시길 바랍니다!

Credits: Image by storyset