[JavaScript] 정적 메서드(static) & 인스턴스 메서드

예진·2023년 6월 6일

JavaScript

목록 보기
12/13

인스턴스 메서드

클래스에서 정의한 메서드들이 인스턴스에 중복적으로 만들어 질 때 인스턴스 레벨의 메서드 즉, 인스턴스 메서드 라고 한다.

class Fruit {
  constructor(name, emoji) {
    this.name = name;
    this.emoji = emoji;
  }

  display = () => {
    console.log(`${this.name}: ${this.emoji}`);
  };
}

const apple = new Fruit('apple', '🍎');
// Fruit { display: [Function: display], name: 'apple', emoji: '🍎' }

const orange = new Fruit('orange', '🍊');
// Fruit { display: [Function: display], name: 'orange', emoji: '🍊' }

apple.display(); // apple 인스턴스를 통해 호출
orange.display();

인스턴스 메서드는 클래스안에서 접근, 호출이 불가능하며, 꼭 생성된 인스턴스 객체를 통해 접근하고 호출해야한다.

Static Method(정적 메서드)

클래스별로 동일하게 사용할 수 있고 만들어진 인스턴스의 데이터를 참조할 필요가 없는 경우에는 클래스 레벨의 메서드 즉, static 메서드를 사용할 수 있다.
인스턴스 메서드와의 차이는 객체 생성없이 호출이 가능하다는 것.

// static 정적 프로퍼티, 메서드
class Fruit {
  constructor(name, emoji) {
    this.name = name;
    this.emoji = emoji;
  }

  // 클래스 레벨의 메서드
  static makeRandomFruit() {
    // 클래스 레벨의 메서드에서는 this를 참조할 수 없음
    return new Fruit('banana', '🍌');
    //
  }
  display = () => {
  console.log(`${this.name}: ${this.emoji}`);
    
const banana = Fruit.makeRandomFruit();
console.log(banana);

이처럼 static 메서드를 이용하면 클래스에 한번만 정의하고 재사용할 수 있으며, Fruit.makeRandomFruit() 클래스 레벨에 있는 메서드를 호출할 수 있다.

static 메서드는 언제 사용할까?

인스턴스 마다 변경되야 할 데이터가 아니라 클래스 레벨에서 공통적으로 사용할 수 있는 속성과 메서드에는 static을 붙여주는게 좋다.

좋은 예로는 표준 빌트인 객체가 있다.

Math.pow();

Number.isFinite(1);

빌트인 객체는 다양한 정적 메서드를 가지고 있는데, 이를 유틸리티 함수라고 한다. 유틸리티 함수들을 묶어서 관리할 수 있고, 반복적으로 사용하므로 작업이 간편하다.

profile
Front-End Developer

0개의 댓글