JS - class, class 상속, 정적메서드

이경민·2025년 12월 24일

한화시스템 Beyond SW

목록 보기
45/52

class

  • 클래스 몸체에 정의한 메서드는 기본적으로 프로토타입 메서드가 됨
  • 생성자를 통해 인스턴스 생성 및 초기화
  • 생성자는 1개 이상 정의될 수 없으며 생략할 경우 암묵적으로 정의됨 (암묵적으로 this 반환)
    ex. Student 클래스를 선언하고 new Student()를 호출하면 새로운 객체 생성됨. 넘겨받은 인수 name과 함께 constructor가 자동으로 실행되어 "홍길동"이 this.name에 할당됨.

생성자 함수와 클래스의 차이점

  1. 클래스 생성자는 new 필수
  2. 클래스에 정의된 메서드는 열거 불가 (for ..in으로 객체 순회 시 메서드 순회대상에서 제외됨)
  3. 클래스는 *호이스팅이 발생하지 않는 것처럼 동작함. 함수 선언문 생성자 함수는 함수 호이스팅, 함수 표현식 생성자 함수는 변수 호이스팅이 발생함.
  4. 클래스는 항상 use strict 적용됨. 클래스 생성자 안 코드는 자동으로 엄격 모드가 적용됨.

*호이스팅 :함수 선언문으로 만든 함수는 코드상 아래에 있어도 위에서 실행된다.

class inheritance

extends 키워드 사용

  • Animal을 상속 받는 Human 클래스 선언
    class Human extends Animal { }

method overriding

  • 부모 메서드를 토대로 일부 기능만 변경하고 싶을 때, 부모 메서드의 기능을 확장하고 싶을 때 메서드 오버라이딩을 사용한다.

constructor overriding

  • 생성자는 기본적으로 부모 constructor를 호출한다.
class Deer extends Animal {
	constructor(name, weight, legLength) {
    	super(name, weight);
        this.legLength = legLength;
    }
  • 상속 클래스의 생성자 함수(derived constructor)와 그렇지 않은 생성 함수를 구분한다.
  • 일반 클래스는 new와 함께 실행되면 빈 객체가 만들어지고 this에 이 객체를 할당하지만 상속 클래스의 생성자 함수가 실행되면 빈 객체를 만들고 this에 이 객체를 할당하는 일을 부모 클래스의 생성자가 처리해주길 기대한다.
  • 때문에 상속 클래스의 생성자에선 super를 호출해 부모 생성자를 실행해 주어야함.
  • 위 코드에서 Animal(부모클래스)의 constructor인 name과 weight를 super로 호출하지 않고 this.name=name, this.weight=weight 를 사용하면 ReferenceError가 발생함.

static method and property

static method

  • 정적 메서드는 특정 클래스 인스턴스가 아닌 클래스 '전체'에 필요한 기능을 만들 때 사용한다.
		...
        // 클래스 선언부 안에 위치하고 앞에 static이라는 키워드를 붙인다.
        static compare(studentA, studentB) {
        	return studentA.height - studentB.height; //인스턴스끼리 비교해주는 메서드
            }
        student.sort(Student.compare); //신장 오름차순으로 배열 정렬
        // Student.compare는 학생들의 신장을 비교해주는 수단으로 하나의 학생마다 필요한 메서드가 아니라 클래스의 메서드여야 함 => 정적 메서드!
  • 클래스에 정적 메서드를 만들어 팩토리 메서드를 구현할 수 있다.
class User { 
    constructor(id, registDate) { 
        this.id = id; 
        this.registDate = registDate; 
    } 
	    static registUser(id) { 
			return new this(id, new Date()); 
		} 
	} 
  • 상속 가능

static property

  • 데이터를 클래스 수준에 저장하고 싶을때 사용
  • 상속 가능
  • class B extends A는 클래스 Bdml 프로토타입이 클래스 A를 가리키게 하므로 B에서 원하는 프로퍼티나 메서드를 찾지 못하면 A로 검색이 이어진다.

0개의 댓글