ABAP Field Symbol 의 사용
학교 다닐 때 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