본문 바로가기
ABAP/Syntax

[Syntax] NEW - Instance Operator

by name_text 2023. 10. 19.

NEW - Instance Operator

 

ABAP New syntax인 NEW는 Object(Data 또는 Class) 생성하는 생성 연산자입니다.

CRETE 구문대신 NEW 를 사용하여 inline으로 코딩이 가능하여, 좀더 간결하고 간편하게 개발이 가능합니다.

 

# 사용예시

REPORT YSANB_BOX.

CLASS LCL_TEST DEFINITION.
  PUBLIC SECTION.
    DATA INIT_VALUE TYPE C.
    METHODS: CONSTRUCTOR IMPORTING I_INIT_VALUE TYPE CHAR1 OPTIONAL.
    METHODS: TEXT_OUTPUT.
ENDCLASS.

CLASS LCL_TEST IMPLEMENTATION.
  METHOD CONSTRUCTOR.
    INIT_VALUE = I_INIT_VALUE.
  ENDMETHOD.

  METHOD TEXT_OUTPUT.
    WRITE:/ INIT_VALUE.
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
* Create object - Class
* 기존
  DATA LO_CLASS TYPE REF TO LCL_TEST.
  CREATE OBJECT LO_CLASS
    EXPORTING I_INIT_VALUE = '0'.

  LO_CLASS->TEXT_OUTPUT( ).


* NEW - #1
  DATA LO_CLASS1 TYPE REF TO LCL_TEST.
  LO_CLASS1 = NEW #( I_INIT_VALUE = '1' ).

  LO_CLASS1->TEXT_OUTPUT( ).


* NEW - #2
  DATA(LO_CLASS2) = NEW LCL_TEST( I_INIT_VALUE = '1' ).

  LO_CLASS2->TEXT_OUTPUT( ).


* NEW - #3 ( Class-Method 처럼 )
  NEW LCL_TEST( I_INIT_VALUE = '3' )->TEXT_OUTPUT( ).



* Create object - Data
* 기존
 DATA LD_DATA TYPE REF TO DATA.
 CREATE DATA LD_DATA TYPE I.
 ASSIGN LD_DATA->* TO FIELD-SYMBOL(<LFV>).
 <LFV> = 1234.

 WRITE :/ <LFV>.

* NEW - #1
 DATA(LD_DATA1) = NEW I( 1234 ).
 ASSIGN LD_DATA1->* TO FIELD-SYMBOL(<LFV1>).

 WRITE :/ <LFV1>.
ABAP

 

# 사용예시 - Instance parent

"오브젝트 생성시 PARENT 동적 생성
CREATE OBJECT GO_GUI_SIMPLE_TREE
  EXPORTING
*    PARENT                      = NEW CL_GUI_SPLITTER_CONTAINER( PARENT   = CL_GUI_CONTAINER=>SCREEN0
*                                                                 ROWS     = 1
*                                                                 COLUMNS  = 1 )->GET_CONTAINER( ROW = 1 COLUMN = 1 )
    PARENT                      = NEW CL_GUI_DOCKING_CONTAINER( SIDE = CL_GUI_DOCKING_CONTAINER=>DOCK_AT_TOP  EXTENSION = 2048 ).


"간단하게 오브젝트를 생성해서 바로 표시할때
"#Case1. Tree Object 생성
DATA(LO_SIMPLE_TREE) = NEW CL_GUI_SIMPLE_TREE( PARENT = NEW CL_GUI_DOCKING_CONTAINER( SIDE = CL_GUI_DOCKING_CONTAINER=>DOCK_AT_LEFT  EXTENSION = 300 )
                                               NODE_SELECTION_MODE = CL_GUI_SIMPLE_TREE=>NODE_SEL_MODE_SINGLE ). 
"Tree에 노드 추가
LO_SIMPLE_TREE->ADD_NODES( TABLE_STRUCTURE_NAME = 'MTREESNODE'
                           NODE_TABLE           = GT_NODES ).

"#Case2. Tree Object 생성 및 노드 추가
NEW CL_GUI_SIMPLE_TREE( PARENT              = NEW CL_GUI_DOCKING_CONTAINER( SIDE = CL_GUI_DOCKING_CONTAINER=>DOCK_AT_LEFT  EXTENSION = 300 )
                        NODE_SELECTION_MODE = CL_GUI_SIMPLE_TREE=>NODE_SEL_MODE_SINGLE
                      )->ADD_NODES( TABLE_STRUCTURE_NAME = 'MTREESNODE'
                                    NODE_TABLE           = GT_NODES ).
ABAP

댓글