기본적인 Basic 코딩 스타일에서 OO 스타일의 코딩 습관은
필요하다고 생각되어집니다.
아래 비교 소스를 보고 가볍게 코딩 스타일을 이해하시면 될 것 같습니다.
Traditional way of writing the code:
REPORT ysdnblog_classic.
PARAMETERS : p_rows TYPE count DEFAULT '100'.
START-OF-SELECTION.
DATA : it_mara TYPE STANDARD TABLE OF mara.
PERFORM get_data CHANGING it_mara.
PERFORM display USING it_mara.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
FORM get_data CHANGING ch_mara TYPE mara_tt.
SELECT * FROM mara INTO TABLE ch_mara UP TO p_rows ROWS .
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form DISPLAY
*&---------------------------------------------------------------------*
FORM display USING i_mara TYPE mara_tt.
DATA : lr_table TYPE REF TO cl_salv_table.
cl_salv_table=>factory( IMPORTING r_salv_table = lr_table
CHANGING t_table = i_mara ) .
lr_table->display( ).
ENDFORM. " DISPLAY
OO way (only using Static methods)
REPORT ysdnblog_class_static.
PARAMETERS : p_rows TYPE count DEFAULT '100'.
*----------------------------------------------------------------------*
* CLASS lcl_main DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_main DEFINITION.
PUBLIC SECTION.
CLASS-METHODS : get_data ,
display.
PRIVATE SECTION.
CLASS-DATA it_mara TYPE mara_tt.
ENDCLASS. "lcl_main DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_main IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_main IMPLEMENTATION.
METHOD get_data.
SELECT * FROM mara INTO TABLE lcl_main=>it_mara UP TO p_rows ROWS .
ENDMETHOD. "GET_DATA
METHOD display.
DATA : lr_table TYPE REF TO cl_salv_table.
cl_salv_table=>factory( IMPORTING r_salv_table = lr_table
CHANGING t_table = lcl_main=>it_mara ) .
lr_table->display( ).
ENDMETHOD. "display
ENDCLASS. "lcl_main IMPLEMENTATION
START-OF-SELECTION.
lcl_main=>get_data( ).
lcl_main=>display( ).
OO way (Only Instance methods)
REPORT ysdnblog_class_instance.
PARAMETERS : p_rows TYPE count DEFAULT '100'.
*----------------------------------------------------------------------*
* CLASS lcl_main DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_main DEFINITION.
PUBLIC SECTION.
METHODS : get_data ,
display.
PRIVATE SECTION.
DATA it_mara TYPE mara_tt.
ENDCLASS. "lcl_main DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_main IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_main IMPLEMENTATION.
METHOD get_data.
SELECT * FROM mara INTO TABLE me->it_mara UP TO P_rows ROWS .
ENDMETHOD. "GET_DATA
METHOD display.
DATA : lr_table TYPE REF TO cl_salv_table.
cl_salv_table=>factory( IMPORTING r_salv_table = lr_table
CHANGING t_table = me->it_mara ) .
lr_table->display( ).
ENDMETHOD. "display
ENDCLASS. "lcl_main IMPLEMENTATION
START-OF-SELECTION.
data : lr_main TYPE REF TO lcl_main.
create OBJECT lr_main.
lr_main->get_data( ).
lr_main->display( ).
I
My IDEAL way in OO
REPORT ysdnblog_class_ideal.
parameters : p_rows type count default '100'.
*----------------------------------------------------------------------*
* CLASS lcl_main DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_main DEFINITION.
PUBLIC SECTION.
CLASS-METHODS : start.
PRIVATE SECTION.
METHODS : get_data ,
display.
CLASS-DATA : lr_main TYPE REF TO lcl_main.
DATA it_mara TYPE mara_tt.
ENDCLASS. "lcl_main DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_main IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_main IMPLEMENTATION.
METHOD start.
CREATE OBJECT lr_main.
lr_main->get_data( ).
lr_main->display( ).
ENDMETHOD. "start
METHOD get_data.
SELECT * FROM mara INTO TABLE me->it_mara UP TO P_rows ROWS .
ENDMETHOD. "GET_DATA
METHOD display.
DATA : lr_table TYPE REF TO cl_salv_table.
cl_salv_table=>factory( IMPORTING r_salv_table = lr_table
CHANGING t_table = me->it_mara ) .
lr_table->display( ).
ENDMETHOD. "display
ENDCLASS. "lcl_main IMPLEMENTATION
START-OF-SELECTION.
lcl_main=>start( ).
New Trend of and completely moving your report to OO:
REPORT ysdnblog_class_new.
SELECTION-SCREEN : BEGIN OF SCREEN 200.
PARAMETERS p_rows TYPE count DEFAULT '100'.
SELECTION-SCREEN : END OF SCREEN 200.
*----------------------------------------------------------------------*
* CLASS lcl_main DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_main DEFINITION.
PUBLIC SECTION.
CLASS-METHODS : start.
PRIVATE SECTION.
METHODS : get_data ,
display.
CLASS-DATA : lr_main TYPE REF TO lcl_main.
DATA it_mara TYPE mara_tt.
ENDCLASS. "lcl_main DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_main IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_main IMPLEMENTATION.
METHOD start.
BREAK-POINT.
CALL SELECTION-SCREEN 200.
IF sy-subrc IS INITIAL.
CREATE OBJECT lr_main.
lr_main->get_data( ).
lr_main->display( ).
ENDIF.
ENDMETHOD. "start
METHOD get_data.
SELECT * FROM mara INTO TABLE me->it_mara UP TO p_rows ROWS .
ENDMETHOD. "GET_DATA
METHOD display.
DATA : lr_table TYPE REF TO cl_salv_table.
cl_salv_table=>factory( IMPORTING r_salv_table = lr_table
CHANGING t_table = me->it_mara ) .
lr_table->display( ).
ENDMETHOD. "display
ENDCLASS. "lcl_main IMPLEMENTATION
START-OF-SELECTION.
lcl_main=>start( ).
댓글 15
-
계동너구리
2014.04.01 17:27
-
양키(이경환)
2014.04.01 19:32
도움이 되셨으면 합니다. ㅎㅎ
-
oracleuser
2014.04.01 18:32
OO라는게 Object-oriented programming에 약자 맞지요?
너무 약어들이 많아 이젠 헷갈려요 ㅠㅠ
-
양키(이경환)
2014.04.01 19:32
네 맞습니다. Prog. 월드의 만국공통 약어니깐요 ㅎㅎ
-
봉e
2014.04.02 03:01
OOP 공부하고있는데 ㅎㅎ 좋은자료 감사합니다.
-
육포먹는 스님
2014.04.02 18:29
깔끔하게 정리해주셔서 감사합니다...소중한 자료 잘 봤습니다..
-
끓는피
2014.04.02 20:54
참 정리 잘된 팁입니다. 자료 감사합니다.
-
모르니
2014.04.08 20:33
보기 쉽게 정리된 자료 감사합니다.
-
홍냥
2014.04.08 20:59
알찬 자료 감사합니다. :D
-
준서기
2014.04.08 22:25
본문 내용중 mara_tt 라는 type 가 나오는데
mara_tt 와 같은 타입을 뭐라고 하나요?
mara_tt를 더블클릭하면
Dictionary : 테이블유형 조회 라는 화면으로 넘어가는데 해당 화면을
호출할 수 있는 T-Code 가 따로 존재 하나요?
-
nanta
2014.04.09 00:49
Table Type 이고 그냥 se11에서 Data type 으로 만들때 선택하시면 됩니다.
-
엠바사
2014.04.28 17:43
oop로 했을때 큰 장점이 있나요?
-
양키(이경환)
2014.04.28 19:52
OOP를 이용하면 구체적인 문제 하나에만 집중 할 수 있는 구조를 보다 쉽게 만들 수 있습니다.
우리가 책을 글을 읽을 때, 챕터와 문단 등으로 묶어서 이해하듯이 코드나 문제도 전체를 한꺼번에 이해하고 해결하기보다 작은 단위의 조각으로 접근하는 것이 효율적입니다. MP3 파일 수천 개를 하나의 폴더에 저장하지않고, '가요, 팝송, 락, 발라드'처럼 트리 구조로 묶어서 사용하는 것이 편리한 이치와 같습니다.
-
Merong7
2014.06.27 02:52
알기쉽게 비교 잘해주셨습니다^^
-
SEOK
2014.08.14 19:54
자료 감사합니다.
쉽게 잘 설명된 글이네요. 좋은 정보 감사합니다.