class MyClass {
prop = value; // 프로퍼티
constructor(...) { // 생성자 메서드
// ...
}
method(...) {} // 메서드
get something(...) {} // getter 메서드
set something(...) {} // setter 메서드
[Symbol.iterator]() {} // 계산된 이름(computed name)을 사용해 만드는 메서드 (심볼)
// ...
}
다음과 같이 기본적으로 사용하고,
class Animal {
constructor(name) {
this.speed = 0;
this.name = name;
}
// ...
}
class Rabbit extends Animal {
constructor(name, earLength) {
super(name);
this.earLength = earLength;
}
// ...
}
다음과 같이 상속을 사용한다.
해당과 같이 super를 사용하는 이유는 다음과 같다.
자바스크립트는 '상속 클래스의 생성자 함수(derived constructor)'와 그렇지 않은 생성자 함수를 구분합니다. 상속 클래스의 생성자 함수엔 특수 내부 프로퍼티인 [[ConstructorKind]]:"derived"가 이름표처럼 붙습니다.
일반 클래스의 생성자 함수와 상속 클래스의 생성자 함수 간 차이는 new와 함께 드러납니다.
일반 클래스가 new와 함께 실행되면, 빈 객체가 만들어지고 this에 이 객체를 할당합니다.
반면, 상속 클래스의 생성자 함수가 실행되면, 일반 클래스에서 일어난 일이 일어나지 않습니다. 상속 클래스의 생성자 함수는 빈 객체를 만들고 this에 이 객체를 할당하는 일을 부모 클래스의 생성자가 처리해주길 기대합니다.이런 차이 때문에 상속 클래스의 생성자에선 super를 호출해 부모 생성자를 실행해 주어야 합니다. 그렇지 않으면 this가 될 객체가 만들어지지 않아 에러가 발생합니다.
만들때 super로 이름을 만들어 줘야 함...!
SRP - 단일 책임 원칙, 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다.
하나의 클래스 하나의 기능.
LSP - 리스코프 치환 원칙, 서브 타입은 언제나 자신의 기반 타입으로 교체할 수 있어야 한다.
하위 클래스 is a kind of 상위 클래스 - 하위 분류는 상위 분류의 한 종류다.
구현 클래스 is able to 인터페이스: 구현 분류는 인터페이스할 수 있어야 한다.
리스코프 치환 원칙 위배
아버지 - 딸(계층도/조직도) 딸은 아버지의 한 종류가 아니다.
리프코프 치환 원칙 만족
동물 - 펭귄 구조(분류도)
저도 개발자인데 같이 교류 많이 해봐요 ㅎㅎ! 서로 화이팅합시다!