Menu
Coddy logo textTech

"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" (합성): 자동차는 엔진을 가지고 있습니다
challenge icon

챌린지

구성 요소 클래스(Processor, Memory)와 Computer 클래스의 대부분이 제공됩니다. 여러분의 작업은 computer.js 파일의 생성자를 완성하는 것입니다:

  1. Processor 클래스를 사용하여 processor 속성을 생성하세요
  2. Memory 클래스를 사용하여 memory 속성을 생성하세요
  3. processorSpeedProcessor 생성자에 전달하고 memorySizeMemory 생성자에 전달하세요

치트 시트

객체 지향 프로그래밍에는 객체 간의 두 가지 주요 관계 유형이 있습니다.

  • "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();
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨