SAP/ABAP

ABAP Field Symbol 의 사용

그녀는애교쟁이 2014. 9. 3. 00:00
반응형

학교 다닐 때 C 언어를 배운적이 있다. IT 를 배웠다 하는 사람들에게 기본이라고 가르치는 C 언어는 고비가 2번 오는데 포인터가 나오면 포기하는 사람이 1/3 이고 C++ 에서 클래스 개념이 나오면 1/3 이 포기한다고 우스갯소리를 한다. 그래서 자바가 좋니 어쩌니 한다. 하지만 어떤 프로그래밍 언어든 고비는 있는 듯 하다. 


ABAP 에도 포인터와 비슷한 개념을 가지 Field Symbol 이 있다. Field Symbol 을 잘 이용하면 반복되는 필드들을 짧은 코드로 처리 할 수 도 있고, 루프의 속도도 개선 할 수 있으며, Internal Table 을 Dynamic 하게 만들 수도 있다. ( 이전에 Dynamic Internal Table 을 만드는 방법을 포스팅 한 적이 있다. 동적 인터널 테이블을 만들때 deep structure 로 생성하기 ) Field Symbol 은 사용자에 따라서 다양하게 사용될 수 있다. 하지만 무분별한 사용은 유지보수를 하는 사람에게 고통을 줄 수 있으니 개발 할 때 꼭 필요하거나 성능개선이 꼭 필요한 부분에 대해서만 쓰도록 해야겠다.




필드 심볼을 나름의 정의를 내리자면 "어딘가를 가르치고 있다." 라고 할 수 있다. 이 부분은 포인터와도 비슷한다. 필드 심볼은 테이블을 한 row 를 가르치거나 변수를 가르친다. 그래서 그 곳에 데이터를 넣으면 그 가르치는 곳으로 바로 데이터가 들어간다. 그래서 Internal Table 의 경우 루프를 돌면서 데이터를 변경한 경우 Modify 를 할 필요가 없어진다.


참고 : SAP 공식 홈페이지


DATA: BEGIN OF LINE,
        COL1 TYPE I,
        COL2 TYPE I,
      END OF LINE.

DATA ITAB LIKE SORTED TABLE OF LINE WITH UNIQUE KEY COL1.

FIELD-SYMBOLS <FS> LIKE LINE OF ITAB.

DO 4 TIMES.
  LINE-COL1 = SY-INDEX.
  LINE-COL2 = SY-INDEX ** 2.
  APPEND LINE TO ITAB.
ENDDO.

READ TABLE ITAB WITH TABLE KEY COL1 = 2 ASSIGNING <FS>.
<FS>-COL2 = 100.

READ TABLE ITAB WITH TABLE KEY COL1 = 3 ASSIGNING <FS>.
DELETE ITAB INDEX 3.

IF <FS> IS ASSIGNED.
  WRITE '<FS> is assigned!'.
ENDIF.

LOOP AT ITAB ASSIGNING <FS>.
  WRITE: / <FS>-COL1, <FS>-COL2.
ENDLOOP.

* Output
*  1  1
*  2  100
*  4 16