Menu
Coddy logo textTech

다형성이란 무엇인가요?

Coddy JavaScript 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 56개 중 35번째.

다형성은 서로 다른 클래스의 객체가 동일한 메서드에 서로 다른 방식으로 응답할 수 있도록 하는 객체 지향 프로그래밍의 핵심 원칙입니다.

JavaScript에서 다형성은 자식 클래스가 부모 클래스의 메서드를 오버라이드할 때 가장 흔히 나타납니다.

speak() 메서드가 있는 간단한 부모 클래스를 만들어 보겠습니다:

class Animal {
  constructor(name) {
    this.name = name;
  }
  
  speak() {
    return `${this.name} makes a sound`;
  }
}

이제 Animal을 확장하는 자식 클래스를 만들어 보겠습니다:

class Dog extends Animal {
  speak() {
    return `${this.name} barks`;
  }
}

또 다른 자식 클래스입니다:

class Cat extends Animal {
  speak() {
    return `${this.name} meows`;
  }
}

각 자식 클래스는 speak() 메서드를 서로 다르게 구현합니다. 이것이 바로 다형성이 작동하는 모습입니다!

이제 서로 다른 객체를 만들고 각각에 동일한 메서드를 호출할 수 있습니다:

const animal = new Animal("Some animal");
const dog = new Dog("Rex");
const cat = new Cat("Whiskers");

console.log(animal.speak()); // Some animal이 소리를 낸다
console.log(dog.speak());    // Rex가 짖는다
console.log(cat.speak());    // Whiskers가 야옹한다

세 객체 모두 speak() 메서드에 응답하지만, 각각 고유한 방식으로 그렇게 합니다.

challenge icon

챌린지

부모 클래스 Notification와 두 개의 자식 클래스가 있는 알림 시스템이 있습니다. 여러분의 과제는 각 자식 클래스에 서로 다른 구현을 가진 send(message) 메서드를 추가하는 것입니다.

  1. EmailNotification 클래스에서 메서드는 다음 문자열을 반환해야 합니다: "Sending '(message)' via Email"
  2. SMSNotification 클래스에서 메서드는 다음 문자열을 반환해야 합니다: "Sending '(message)' via SMS"

직접 해보기

import { EmailNotification } from './email-notification.js';
import { SMSNotification } from './sms-notification.js';

// 테스트 코드 - 수정하지 마세요
const email = new EmailNotification();
const sms = new SMSNotification();

console.log(email.send("Hello!"));  // EmailNotification의 send()를 사용해야 합니다
console.log(sms.send("Hello!"));    // SMSNotification의 send()를 사용해야 합니다
quiz icon실력 점검

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

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

직접 연습해 보세요: 온라인 JavaScript 컴파일러