목차:
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.
'ABAP > ABAP-OO' 카테고리의 다른 글
실행중인 메소드의 파라미터 목록 읽기 (자바스크립트의 arguments 처럼) (0) | 2021.07.07 |
---|---|
[Link] ABAP OO 동영상 강좌 (0) | 2016.11.16 |
[번역] ABAP RTTI 동적 스트럭쳐, 인터널테이블 생성 (0) | 2014.03.24 |
ABAP 클래스 UML 표시 (0) | 2011.12.21 |
[Link] ABAP Freak Show (0) | 2010.11.11 |