[javascript] 상속 대신 합성 사용

이번 포스트에서는 객체 지향 프로그래밍에서 상속 대신 합성(composition)을 사용하는 이유와 이점에 대해 알아보겠습니다.

합성 vs 상속

상속은 객체 지향 프로그래밍에서 일반적으로 사용되는 기술입니다. 하위 클래스가 상위 클래스의 특성과 동작을 상속받아 확장하고 변경할 수 있습니다. 그러나 상속은 클래스들 간에 강력한 결합을 만들어내고, 클래스 계층 구조(class hierarchy)가 복잡해지는 문제를 야기할 수 있습니다.

합성은 이러한 문제를 해결하기 위한 대안으로, 클래스들 간의 결합을 느슨하게 유지하는 방법입니다. 합성은 객체가 다른 객체를 포함하여 기능을 확장하는 방식으로 동작합니다. 이는 객체 간의 결합도를 낮추고, 재사용성과 유연성을 향상시킵니다.

합성의 이점

  1. 느슨한 결합(Loose coupling): 객체들 간의 관계가 느슨해져, 한 객체의 변경이 다른 객체에 미치는 영향을 최소화합니다.
  2. 유연성과 재사용성(Flexibility and reusability): 작은 객체들을 조합하여 시스템을 구성하므로, 재사용이 용이하고 유연한 디자인을 가능하게 합니다.
  3. 가독성(Readability): 클래스 계층 구조를 낮추고, 합성 관계를 명확하게 표현함으로써 코드의 가독성을 향상시킵니다.

합성의 예시

다음은 JavaScript에서 합성을 사용한 간단한 예시입니다.

class Engine {
  start() {
    console.log('Engine starting');
  }
}

class Car {
  constructor() {
    this.engine = new Engine();
  }

  start() {
    this.engine.start();
    console.log('Car starting');
  }
}

const myCar = new Car();
myCar.start();

위 예시에서 Car 클래스는 Engine 클래스를 포함하여 합성 관계를 형성합니다. 이렇게 함으로써 Car 객체는 Engine 객체의 기능을 활용할 수 있으면서도, 각 객체 간의 결합이 느슨해지는 장점을 가집니다.

요약

객체 지향 프로그래밍에서는 합성을 통해 상속의 문제를 해결하고, 느슨한 결합과 유연성을 확보할 수 있습니다. 이를 통해 코드의 유지보수성과 확장성을 향상시킬 수 있으며, 객체지향적 설계의 새로운 관점을 제시합니다.

참고 자료

위의 참고 자료를 통해 더 많은 정보를 얻을 수 있습니다.