앞서 말했듯이, 상속을 사용하면, 클래스를 "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을 사용해야됩니다. 이것이 디자인결정을 하는 것에 도움이 됩니다.
'ABAP 프로그래밍 개념 > Object-Oriented ABAP' 카테고리의 다른 글
ABAP OOP : Polymorphism(다형성) PART1 (0) | 2023.01.15 |
---|---|
ABAP OOP : Inheritance(상속) PART6 : Refactoring Assistant (0) | 2023.01.15 |
ABAP OOP : Inheritance(상속) PART4 : Final Classes and Methods (0) | 2023.01.13 |
ABAP OOP : Inheritance(상속) PART3 : Abstract Classes and Methods(추상 클래스 & 메소드) (0) | 2023.01.11 |
ABAP OOP : Inheritance(상속) PART2 : 상속의 정의(Define) (0) | 2023.01.10 |