"is-a" 관계
Coddy JavaScript 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 56개 중 25번째.
"is-a" 관계는 상속이 언제 적절한지 결정하는 간단한 테스트입니다. 만약 "X는 Y이다"라고 말할 수 있고 그것이 자연스럽게 들린다면, X는 아마도 Y로부터 상속받아야 합니다.
올바름 (상속 사용):
- "개는 동물이다" →
class Dog extends Animal
- "자동차는 탈것입니다" →
class Car extends Vehicle
- "교과서는 책이다" →
class Textbook extends Book
잘못된 예 (상속을 사용하지 마세요):
- "운전자는 자동차이다 (is a)" → 아니요, 운전자는 자동차를 사용합니다
- "바퀴는 자동차이다" → 아니요, 바퀴는 자동차의 일부입니다
- "학생은 교실이다" → 아니요, 학생은 교실 안에 있습니다
예를 들어, 두 개의 객체를 살펴보겠습니다:
// 베이스 클래스 - 이들이 공통적으로 무엇인지 정의합니다
class Book {
constructor(title, author, pages) {
this.title = title;
this.author = author;
this.pages = pages;
}
read() {
console.log(`Reading ${this.title} by ${this.author}`);
}
}
// Novel은 Book입니다 (올바른 상속)
class Novel extends Book {
constructor(title, author, pages, genre) {
super(title, author, pages);
this.genre = genre;
}
}
// 클래스 사용하기
const fiction = new Novel("1984", "George Orwell", 328, "Dystopian");
fiction.read(); // "Reading 1984 by George Orwell" - Book에서 상속됨
챌린지
ElectronicDevice 클래스와 Smartphone 클래스가 주어집니다. Smartphone은 추가 기능을 가진 ElectronicDevice의 한 종류입니다. 여러분의 과제는 브랜드가 "Samsung"이고 모델이 “Galaxy S23”인 `myPhone` 객체를 생성하는 것입니다.
치트 시트
"is-a" 관계는 상속이 언제 적절한지 결정하기 위한 테스트입니다. 만약 "X는 Y이다(is a)"라고 말했을 때 말이 된다면, X는 Y를 상속받아야 합니다.
올바른 예시 (상속 사용):
- "개는 동물이다" →
class Dog extends Animal - "자동차는 탈것이다" →
class Car extends Vehicle - "교과서는 책이다" →
class Textbook extends Book
잘못된 예시 (상속 미사용):
- "운전자는 자동차이다" → 아니요, 운전자는 자동차를 사용합니다.
- "바퀴는 자동차이다" → 아니요, 바퀴는 자동차의 부품입니다.
- "학생은 교실이다" → 아니요, 학생은 교실 안에 있습니다.
예시:
// 기본 클래스
class Book {
constructor(title, author, pages) {
this.title = title;
this.author = author;
this.pages = pages;
}
read() {
console.log(`Reading ${this.title} by ${this.author}`);
}
}
// 소설은 책의 일종입니다 (올바른 상속)
class Novel extends Book {
constructor(title, author, pages, genre) {
super(title, author, pages);
this.genre = genre;
}
}
const fiction = new Novel("1984", "George Orwell", 328, "Dystopian");
fiction.read(); // "Reading 1984 by George Orwell" - Book에서 상속됨
직접 해보기
import { ElectronicDevice } from './electronicDevice.js';
import { Smartphone } from './smartphone.js';
// TODO: 브랜드가 "Samsung"이고 모델이 “Galaxy S23”인 `myPhone` 객체를 생성하세요.
// 테스트 코드 - 수정하지 마세요
console.log(myPhone.turnOn()); // "Samsung Galaxy S23 is now ON"이 출력되어야 합니다이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.