[JS] 클래스 (Class) (1)

김지윤·2023년 10월 30일

javascript

목록 보기
2/2
post-thumbnail

클래스(Class)

클래스의 정의

  • class 키워드를 사용해서 정의한다.
    클래스명은 생성자함수와 마찬가지로 파스칼 케이스를 사용

    class Person {}
  • 또한 클래스는 표현식으로 정의할 수있다.
    이는 클래스가 값으로 사용될 수 있다는 것이고, 일급 객체라는 것을 뜻한다.

    클래스가 일급 객체로서 가지는 특징

    • 무명의 리터럴로 생성할 수 있다.
    • 변수나 자료구조에 저장할 수 있다.
    • 함수의 매개변수에게 전달할 수 있다.
    • 함수의 반환값으로 사용할 수 있다.
  • 클래스의 정의 방식.
    class Person {
      // 생성자
      constructor(name) {
        this.name = name;
      }
      
      // 프로토타입 메서드
      sayHi() {
        console.log(`Hi My name is ${this.name}`);
      }
      
      // 정적 메서드
      static sayHello() {
        console.log('Hello!');
      }
    }

메서드

  • 클래스내에서 정의할 수 있는 메서드는 constructor(생성자), 프로토타입 메서드, 정적 메서드 세 가지이다.

constructor

  • 인스턴스를 생성하고 초기화하기 위한 특수한 메서드.

  • constructor 내부의 this는 생성자 함수의 것과 마찬가지로 클래스가 생성한 인스턴스를 가리킨다.

    // 클래스
    class Person {
      constructor(name) {
        	// 인트턴스 생성 및 초기화.
      	this.name = name;
      }
    }
    
    // 생성자 함수
    function Person(name) {
      this.name = name;
    }
  • constructor은 메서드로 해석되지 않는다.
    또한 생략될 수 있고, 자동으로 빈 constructor에 의해 빈 객체를 생성한다.

    		class Person {
    	  constructor() {}  
    }
    
    		const me = new Person();
    		console.log(me); // Person {}

프로토타입 메서드

  • 프로토타입 체인은 기존의 모든 객체 생성방식(객체 리터럴, 생성자 함수, Object.create 메서드 등등)뿐만 아니라 클래스에 의해 생성된 인스턴스에도 동일하게 적용된다.
  • 클래스는 인스턴스를 생성하는 생성자 함수이다.
    클래스는 프로토타입 기반의 객체 생성 매커니즘이다.

정적 메서드

  • 인스턴스를 생성하지 않아도 호출할 수 있는 메서드
  • 생성자 함수에서는 정적 메서드를 호출하기 위해서는 명시적으로 생성자 함수에 메서드를 추가해야 한다.

    function Person(name) {
      this.name = name;
    }
    
    // 정적 메서드
    Person.sayHi = function () {
      console.log('Hi!');
    };
    
    // 정적 메서드 호출
    Person.sayHi(); // Hi!
  • 클래스에서는 메서드에 static 키워드를 붙이면 정적 메서드가 된다.
    class Person {
      // 생성자
      constructor(name) {
        this.name = name;
      }
      
      // 정적 메서드 
      static sayHi() {
        console.log('Hi!');
      }
    }
  • 정적 메서드는 프로토타입 메서드처럼 인스턴스로 호출하지 않고 클래스로 호출한다.
    Person.sayHi(); // Hi!



정적 메서드와 프로토타입 메서드의 차이

  • 정적 메서드와 프로토타입 메서드는 자신이 속해 있는 프로토타입 체인이 다르다.
    정적메서드는 클래스에 바인딩된 메서드, 프로토타입 메서드는 인스턴스에 프토로타입에 존재하는 메서드.
  • 정적 메서드는 클래스로 호출하고, 프로토타입 메서드는 인스턴스로 호출한다.
  • 정적 메서드는 인스턴스 프로퍼티를 참조할 수 없지만, 프로토타입 메서드는 인스턴스 프로퍼티를 참조할 수 있다.

결국 정적 메서드를 이용하는 이유는 클래스 또는 생성자 함수를 하나의 네임스페이스로 사용하며,
정적 메서드를 모아 놓아 이름 충돌가능성을 줄이고, 관련 함수를 구조화 할 수 있는 효과가 있다.

profile
프론트엔드 개발자를 준비중입니다.

0개의 댓글