목차:
interface & class

abstract class(추상 클래스)

inheritance(상속)

redifine method(메소드 재정의) = Method overriding

Polymorphism(다형성)

아래 nugg 를 설치 합니다.

NUGG_$OOP_TUTORIAL.nugg
0.02MB


ZOOP_TUTORIAL

*&---------------------------------------------------------------------*
*& Report ZOOP_TUTORIAL
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zoop_tutorial.

* OOP tutorial
* 관계도:
* ZIF_OOP_VEHICLE interface 탈것
* - ZCL_OOP_HORSE class 말
* - ZCL_OOP_BUS abstract class 버스
*   - ZCL_OOP_CITY_BUS class 시내버스
*   - ZCL_OOP_EXPRESS_BUS class 고속버스
*     - ZCL_OOP_EXPRESS_BUS_X2 class 2배 고속버스
* - ZCL_OOP_CAR abstract class 승용차
*   - ZCL_OOP_CAR_K5 class 승용차 K5
*   - ZCL_OOP_CAR_K7 class 승용차 K7


* interface & class
DATA: lo_vehicle TYPE REF TO zif_oop_vehicle,
      lv_name    TYPE string,
      lv_speed   TYPE i.

* interface는 타입으로 사용할 수 있지만 class로 구현을 해야 객체를 생성할 수 있음.
*     "LO_VEHICLE" is not an object reference.
* CREATE OBJECT lo_vehicle.

* zcl_oop_horse 는 zif_oop_vehicle 인터페이스를 구현한 클래스 입니다.
* horse 객체를 생성할 수 있음.
CREATE OBJECT lo_vehicle TYPE zcl_oop_horse.
lo_vehicle->set_name( 'my horse' ).

lv_name = lo_vehicle->get_name( ).
lo_vehicle->drive(
  EXPORTING
    iv_direction = 'F'
  IMPORTING
    ev_speed     = lv_speed
).

WRITE:/ lv_name, lv_speed.



* abstract class(추상 클래스)
* zcl_oop_bus 는 zif_oop_vehicle 인터페이스를 구현한 추상 클래스 입니다.
* 추상 클래스는 구현을 가지고 있지만 생성 할 수 없음.
*   Instances of the abstract class "ZCL_OOP_BUS" cannot be generated.
*CREATE OBJECT lo_vehicle TYPE zcl_oop_bus.



* inheritance(상속)
* zcl_oop_city_bus 는 zcl_oop_bus 를 상속한 일반 (추상 아님) 클래스 입니다.
* city bus 객체를 생성할 수 있음.
CREATE OBJECT lo_vehicle TYPE zcl_oop_city_bus.
lo_vehicle->set_name( 'my city bus' ).

lv_name = lo_vehicle->get_name( ).
lo_vehicle->drive(
  EXPORTING
    iv_direction = 'F'
  IMPORTING
    ev_speed     = lv_speed
).

WRITE:/ lv_name, lv_speed.



* redifine method(메소드 재정의) = Method overriding
* zcl_oop_express_bus_x2 는 zcl_oop_express_bus 를 상속한 클래스 입니다.
* 상속 받은 다음 메소드에 로직을 추가 할 수 있습니다.
* zcl_oop_express_bus_x2 의 drive 메소드를 확인하세요.
CREATE OBJECT lo_vehicle TYPE zcl_oop_express_bus.
lo_vehicle->set_name( 'ex-bus' ).

lv_name = lo_vehicle->get_name( ).
lo_vehicle->drive(
  EXPORTING
    iv_direction = 'F'
  IMPORTING
    ev_speed     = lv_speed
).

WRITE:/ lv_name, lv_speed.


CREATE OBJECT lo_vehicle TYPE zcl_oop_express_bus_x2.
lo_vehicle->set_name( 'ex2-bus' ).

lv_name = lo_vehicle->get_name( ).
lo_vehicle->drive(
  EXPORTING
    iv_direction = 'F'
  IMPORTING
    ev_speed     = lv_speed
).

WRITE:/ lv_name, lv_speed.




* Polymorphism(다형성)
* TYPE 으로 선언한 변수의 하위의 상속받은 모든 클래스를 생성 할 수 있음.
CREATE OBJECT lo_vehicle TYPE zcl_oop_horse.
*CREATE OBJECT lo_vehicle TYPE zcl_oop_bus. " 추상 클래스는 생성 불가
CREATE OBJECT lo_vehicle TYPE zcl_oop_city_bus.
CREATE OBJECT lo_vehicle TYPE zcl_oop_express_bus.
CREATE OBJECT lo_vehicle TYPE zcl_oop_express_bus_x2.
*CREATE OBJECT lo_vehicle TYPE zcl_oop_car. " 추상 클래스는 생성 불가
CREATE OBJECT lo_vehicle TYPE zcl_oop_car_k5.
CREATE OBJECT lo_vehicle TYPE zcl_oop_car_k7.

DATA: lo_bus TYPE REF TO zcl_oop_bus.
*CREATE OBJECT lo_bus TYPE zcl_oop_horse. " 타입 일치 하지 않음.
*CREATE OBJECT lo_bus TYPE zcl_oop_bus.  " 추상 클래스는 생성 불가
CREATE OBJECT lo_bus TYPE zcl_oop_city_bus.
CREATE OBJECT lo_bus TYPE zcl_oop_express_bus.
CREATE OBJECT lo_bus TYPE zcl_oop_express_bus_x2.
*CREATE OBJECT lo_bus TYPE zcl_oop_car.  " 타입 일치 하지 않음.
*CREATE OBJECT lo_bus TYPE zcl_oop_car_k5.  " 타입 일치 하지 않음.
*CREATE OBJECT lo_bus TYPE zcl_oop_car_k7.  " 타입 일치 하지 않음.

DATA: lo_car TYPE REF TO zcl_oop_car.
*CREATE OBJECT lo_car TYPE zcl_oop_horse. " 타입 일치 하지 않음.
*CREATE OBJECT lo_car TYPE zcl_oop_bus.  " 타입 일치 하지 않음.
*CREATE OBJECT lo_car TYPE zcl_oop_city_bus.  " 타입 일치 하지 않음.
*CREATE OBJECT lo_car TYPE zcl_oop_express_bus.  " 타입 일치 하지 않음.
*CREATE OBJECT lo_car TYPE zcl_oop_express_bus_x2.  " 타입 일치 하지 않음.
*CREATE OBJECT lo_car TYPE zcl_oop_car. " 추상 클래스는 생성 불가
CREATE OBJECT lo_car TYPE zcl_oop_car_k5.
CREATE OBJECT lo_car TYPE zcl_oop_car_k7.

 

+ Recent posts