본문 바로가기

ABAP 프로그래밍 개념/Object-Oriented ABAP

ABAP OOP : Inheritance(상속) PART5 : Compositions

앞서 말했듯이,  상속을 사용하면, 클래스를 "is a relationship"에 적합하게 디자인할 수 있습니다. 예를 들어, car는 vehicle의 한 유형이기 때문에, cl_car를 cl_vehicle의 subclass로 만들 수 있는 것입니다. 때때로, 기존 소스를 재사용하기 위해서, 개발자들은 is-a relationship데 적합하지 않은 상속관계를 만들기도 합니다. 에를들어, orders라고 불리우는 존재하는 클래스가 있다고 할 때, sales_order라는 orders를 상속받는 클래스를 만들 수 있습니다. 왜냐하면 ,sales order도 order이기 때문입니다.

그러나, delivery라는 클래스를 정의할 때, delivery는 order가 아니기 때문에 orders를 상속받는 것은 말이 안됩니다. 그러나, 각 order는 하나 이상의 관련된 delivery를 가집니다. 만약 객체간에 "has a relationship"를 가지고 있다면, 그것은 "composition relationship"이라고 부릅니다.

Composition은 존재하는 객체를 클래스의 attribute로서 유지하면서 존재하는 기능을 재사용하는 것을 가능하게 해줍니다. 그러므로, orders라는 클래스는 delivery라는 클래스를 attrubute로 가질 수 있습니다. 이러한 연결은 시스템에서 존재하는 기능을 사용할 수 있는 이점이 있습니다.

CLASS cl_delivery DEFINITION.

 PUBLIC SECTION.
  METHODS get_delivery.
  
ENDCLASS.

CLASS cl_delivery IMPLEMENTATION.

 METHOD get_delivery.
 ENDMETHOD.
 
ENDCLASS.

CLASS cl_orders DEFINITION.

 PUBLIC SECTION.
  METHODS track_order.
  
 PRIVATE SECTION.
  DATA delivery TYPE REF TO cl_delivery.
  
ENDCLASS.

CLASS cl_orders IMPLEMENTATION.

 METHOD track_order.
  CREATE OBJECT delivery.
  delivery->get_delivery( ).
 ENDMETHOD.
 
ENDCLASS.

cl_delivery라는 클래스는 위에 소스코드르 보면, cl_orders안에서 attribute로 사용되고 있습니다. delivery 객체는 오더에 대한 정보에 접근하기 위해서 track이라는 메소드에서 인스턴스화됩니다.

"is-a relationship"에 적합하다면 객체간의 상속관계를 사용하는 것이 좋고, "has a relationship"에 적합하다면 Composition을 사용해야됩니다. 이것이 디자인결정을 하는 것에 도움이 됩니다.

반응형