본문 바로가기

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

ABAP OOP : Inheritance(상속) PART3 : Abstract Classes and Methods(추상 클래스 & 메소드)

때떄로, 개발자들은 Templete으로서의(틀만 가지고 있는) 역할을 하고 subclass에서 구현될 수 있는 generic class를 정의하고 싶을 것입니다. Dummy Superclass를 만들고 Dummy Method를 정의하는 것은 Templete(오로지 겉 틀)을 정의하는 것에 좋은 방법이 아닐 수 있습니다.

예를 들어, 만약 많은 학생들과 교육 카테고리가 있을 때, 각 교육 카테고리는 교육비를 결정하는 것에 각기 다른 프로세스를 가지고 있을 때, 개발자는 student라고 이름 불리우는 클래스를 정의하고 tuition_fee라는 메소드를 만들어서 templete 처럼 쓸 수 있을 것입니다. 이렇게 만들어진 클래스는 이 student라는 클래스를 상속받은 구체화된 subclass들에서 더 구체적으로 유지보수 될 것입니다. 예를 들어 commerce_student라고 불리는 클래스가 student 클래스를 상속하고 있을 때, tuition_fee라는 메소드를 commerce student들에게 구체적으로 실행할 수 있습니다.

만약 student 클래스를 regular 클래스로 정의한다면, 그것의 구현에 대해서 유지보수를 해야합니다. 그러나 위의 student는 generic class 이기 때문에, 구현을 정의하고 이를 유지보수 하는 것은 말이 되지 않습니다.(generic class에서는 오직 필요한 type같은 틀만 선언 해 놓을 뿐, 실제 구현은 하지 않습니다). 위와 같은 예시를 보면, studentabstract class로 정의하고, tuition_methodabstract method로 정의할 수 있습니다.

abstract 클래스는 오직 definition만 정의합니다. abstract 클래스는 모든 abstract componets들이 상속된 서브클래스에서 구체적인 실행이 구현되기 때문에 Implementation 부분을 필요로 하지는 않습니다.

아래 코드는 예시입니다.

CLASS cl_student DEFINITION ABSTRACT.
 PUBLIC SECTION.
  METHODS tuition_fee ABSTRACT.
ENDCLASS.

CLASS cl_commerce_student DEFINITION INHERITING FROM cl_student.
 PUBLIC SECTION.
  METHODS tuition_fee REDEFINITION.
ENDCLASS.

CLASS cl_commerce_student IMPLEMENTATION.
 METHOD tuition_fee.
  "Logic to calculate tuition fee for commerce students goes here
 ENDMETHOD.
ENDCLASS.

CLASS cl_science_student DEFINITION INHERITING FROM cl_student.
 PUBLIC SECTION.
  METHODS tuition_fee REDEFINITION.
ENDCLASS.

CLASS cl_science_student IMPLEMENTATION.
 METHOD tuition_fee.
  "Logic to calculate tuition fee for science students goes here
 ENDMETHOD.
ENDCLASS.

cl_studentCLASS DEFINITION이라는 구문에 ABSTRACT라는 addition을 사용하여 추상 클래스로 정의되었습니다. 추상 메소드(abstract method)는 cl_student안에서 METHODS 구문과 함께 ABSTACT란 addition을 추가하여 정의됩니다. 

이 클래스는 추상 메소드를 포함하고 있기 때문에, 추상메소드는 subclass에서 REDIFITION이라는 addition을 통해서 재정의 해야지만 구현할 수 있습니다. 만약 클래스가 abstract method가 아닌 regular method를 포함하고 있다면, cl_student의 IMPLEMENTATION 부분에서 method에 대한 구현을 해야합니다. 이렇게 구현된 regular method는 templete(틀)의 한 부분으로서 subclass에 상속될 것입니다.

위 코드에는 regular methods가 없기 때문에 cl_student의 구현은 완료된 것으로 판단됩니다.

위 코드에서는 두 개의 subclass인 cl_commerce_studentcl_science라는 cl_student라는 추상 클래스를 상속받는 두 가지 서브클래스를 정의하였습니다. tuition_fee라는 메소드는 각각의 subclass에서 각자의 구체적인 기능에 맞게 재정의 되었습니다.

추상 클래스는 인스턴스를 만들지 못합니다. 왜냐면 오직 추상 클래스는 templete처럼 사용만 되기 때문에 상속을 시킬 순 있으나 그 자신이 인스턴스가 되지는 못합니다.

SE24(Class Builder)에서 보면, 추상 클래스의 Property는 Properties 탭에서 Inst.Generation 필드를 보면 됩니다.

SE24 Properties Tab
해당 속성 Source-Code로 확인

Class Builder(SE24)에서 메소드들은, Method Tab에서 아래 그림에 표시한 Detail View를 통해서 수정 설정 가능합니다. Abstract 메소드를 만들기 위해서는 Abstract 체크박스에 체크해야합니다.

Method Detail Tab
Detail Tab에서 추상 체크박스
해당 내용 소스코드에서 확인

 

반응형