반응형
상속(Inheritance)
개념
코드의 재활용성을 높이는 프로그래밍 기법 - 자바스크립트의 정의
코드의 재활용성을 높이고 공통적인 규약을 제공하기 위한 객체지향의 특성. - 설계 측면의 정의
부모 클래스를 확장시켜 자식 클래스를 만드는 프로그래밍 기법. - 개발 측면의 정의
장점
- 유지보수성이 향상된다.
- 개발시간이 단축된다.
- 기능이 추가되어도 품질이 지속적으로 유지된다.
- 가독성이 향상된다.
단점
- 관리자의 오해가 발생할 수 있다.
문법 형식
class extented calss name extends base class name {}
상속의 생성자
super()
상속 시 상위 클래스의 object가 먼저 초기화되어야 하며 이를 지원하기 위한 문법이다.항상 하위 클래스 생성자에서 가장 앞에 코딩되어야 한다.
예시
<body>
<script>
class rectangle
{
constructor(_with, _height)
{
this.with = _with
this.height = _height
}
}
class square extends rectangle
{
constructor(length)
{
super(length, length)
}
}
</script>
</body>
문제
Rectangle 클래스와 Squre 클래스를 상속하시오.
둘레와 넓이는 구하는 함수를 제작하고 인스턴스의 width와 height값이 음수나 문자열이 생성되지 못하게 구현하시오.
<body>
<script>
class rectangle
{
#width
#height
constructor(_width, _height)
{
if (_width < 0 || _height < 0 || typeof(_width) !== 'number' || typeof(_height) !== 'number') {
throw 'parameter is not a number'
}
else {
this.#width = _width
this.#height = _height
}
}
getPerimeter(){
return 2 * (this.#width + this.#height);
}
getArea(){
return this.#width * this.#height;
}
get width() {
return this.#width
}
set width(_width) {
this.#height = _width
}
get height() {
return this.#height
}
set width(_height) {
this.#height = _height
}
}
class square extends rectangle
{
constructor(_length)
{
if (typeof(_length) === 'number' && _length > 0)
{
super(_length, _length)
}
else
{
throw 'parameter is not a number'
}
}
getLength() {
return this.width
}
}
const s1 = new square(5);
const r1 = new rectangle(5, 9)
console.log(s1.getArea())
console.log(r1.getPerimeter())
//25
//28
</script>
</body>
참고
throw
https://cruella-de-vil.tistory.com/59
class, private
https://cruella-de-vil.tistory.com/58
반응형
'JavaScript' 카테고리의 다른 글
[JavaScript] DOM (문서 객체) (0) | 2022.04.25 |
---|---|
[JavaScript] Static (0) | 2022.04.21 |
[JavaScript] throw(예외 발생) (0) | 2022.04.21 |
[JavaScript] Class(클래스), private(접근제어) (0) | 2022.04.20 |
[JavaScript] Constructor 예제 (2) | 2022.04.19 |