"has-a" vs "is-a" 관계
Coddy JavaScript 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 56개 중 47번째.
객체 지향 프로그래밍에서 객체 간에는 두 가지 주요 관계 유형인 "has-a"(합성)와 "is-a"(상속)가 있습니다. 상속이 부모-자식 계층 구조를 만드는 반면, 합성은 더 작고 집중된 컴포넌트들을 결합하여 객체를 구성합니다.
먼저 상속을 통한 "is-a" 관계를 이해해 봅시다:
class Animal {
constructor(name) {
this.name = name;
}
eat() {
console.log(`${this.name} is eating.`);
}
}
// Dog은 Animal의 일종입니다("is-a") - 상속 관계
class Dog extends Animal {
bark() {
console.log(`${this.name} says woof!`);
}
}이제 구성을 통한 "has-a" 관계를 살펴보겠습니다:
class Engine {
start() {
console.log("Engine started");
}
}
// Car "has-a" Engine - 구성 관계
class Car {
constructor() {
this.engine = new Engine(); // 구성
}
startCar() {
this.engine.start();
console.log("Car is running");
}
}주요 차이점:
- "is-a" (상속): 개는 동물입니다
- "has-a" (합성): 자동차는 엔진을 가지고 있습니다
챌린지
구성 요소 클래스(Processor, Memory)와 Computer 클래스의 대부분이 제공됩니다. 여러분의 작업은 computer.js 파일의 생성자를 완성하는 것입니다:
Processor클래스를 사용하여processor속성을 생성하세요Memory클래스를 사용하여memory속성을 생성하세요processorSpeed를Processor생성자에 전달하고memorySize를Memory생성자에 전달하세요
치트 시트
객체 지향 프로그래밍에는 객체 간의 두 가지 주요 관계 유형이 있습니다.
- "is-a" 관계 (상속): 하위 클래스가 부모 클래스를 확장하는 부모-자식 계층 구조를 생성합니다.
- "has-a" 관계 (합성): 더 작고 집중된 컴포넌트들을 결합하여 객체를 구성합니다.
상속 예시 ("is-a"):
class Animal {
constructor(name) {
this.name = name;
}
eat() {
console.log(`${this.name} is eating.`);
}
}
// Dog "is-a" Animal
class Dog extends Animal {
bark() {
console.log(`${this.name} says woof!`);
}
}합성 예시 ("has-a"):
class Engine {
start() {
console.log("Engine started");
}
}
// Car "has-a" Engine
class Car {
constructor() {
this.engine = new Engine(); // Composition
}
startCar() {
this.engine.start();
console.log("Car is running");
}
}직접 해보기
import { Computer } from './computer.js';
const myComputer = new Computer(3.5, 16);
myComputer.start();이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.