본문 바로가기
ERP-SAP/ABAP

<ABAP기초> Text elemt를 dynamic 하게 가져다 쓰기 + 코딩 관점 고민

by 행복한워니의 기록 2025. 4. 10.
728x90
반응형

오늘은 쉬운 이야기 + 잡담처럼 쓰는 코딩 고민이다.

1. 문제점.
text들을 constant로 상수처럼 선언해두었었다

예)  
constant : gc_text01(10) value '기초금액',
                    gc_text02(10) value '기말금액'.

이런식으로....

이걸 텍스트심볼을 만들어서 코딩을 하려한다.

TEXT-T01 => 기초금액
TEXT-T02 => 기말금액
.
.
.

자 그렇다면 어찌해야할까?

안되는 코딩은 이거다.
LOOP GT_DATA INTO GS_DATA.
Data(l_text) = 'TEXT-T' && SY-TABIX.

GS_DARA-TEXT = L_TEXT.

ENDLOOP.

당연히 텍스트심볼의 텍스트가 들어가지 않고
그냥 'TEXT-T01' ..이런글자로 들어가있다.

이유는?


TEXT-xxx는 컴파일 타임에 결정되기 때문에 CONCATENATE로 동적으로 접근하는 건 불가능.

대신 TEXT-01~TEXT-11을 internal table에 담고 index로 꺼내 쓰면 유사하게 동작함.


그럼 되는  다른 방법은???
아래처럼 2가지 방법 다 가능하다.

아참 선언부..

DATA : GT_TEXT TYPE STANDARD TABLE OF STRING.

DATA : L_INDEX(2) TYPE N,
             L_NAME       TYPE STRING.

FIELD-SYMBOLS : <L_TEXT> TYPE ANY.

1번은 dynamic 하게 읽어 ITAB에 저장
2번은 단순하게 원시적으로 Itab에 저장

자 그럼 저렇게 테이블에 담은 건 어찌 읽을까?
아래와 같이 읽음 된다.



이제부터

그러면 뭐가 더 좋은 코딩인지 잡담을 해보자.

위 사진에 1번코딩은 있어보이고 경력자가 짠거같다.
NEW ABAP도 섞여있고.. ㅎㅎㅎ

2번코딩은 단순무식과격해보인다.

그러나 이 두코딩은 장단점이 있다.

먼저 1번은 동적이라 개발자의 휴먼오류를 줄일 수 있다.
만약 2번처럼 짜다가 TEXT-T07 다음 08을 써야하는데 또 T07을 넣었다면..
다른 텍스트가 나오겠다.

고로 1번코딩은 휴먼오류를 줄일 수 있다.
그러나 ASSIGN 같은 구문은 초급개발자에게는 약간의 거리감이 느껴진다.

2번코딩은 엄청나게 직관적이고 업무에서 저 텍스트 심볼이 1개 추가될 일은... 거의없다.

만약 텍스트심볼이
5개가 추가된다 하더라도 CTRL+D 로 순식간에 복사 가능하다.


1번이든 2번이든 어쨌든 코딩은 수정되야 한다.
1번은 DO 16 TIMES로 으로 바꿔야하기에...


두번째 사진을 보자
NEW ABAP으로 READ TABLE 하는 모습이다.

DUMP 방지를 하기위해 ,TRY CATCH로 감싸주었고 CATCH 코딩은 또 따로해주었다.

그렇다면 OLD ABAP이 더 편한 거 아닌가?

.......

그렇다...
가독성이 높아진 NEW ABAP들도 생각보다 손이 많이간다.

결국 이 부분은 개발자 판단하에 순간순간 편한걸 활용해야한다.


그냥 OLD ABAP만 쓰더라도 문제없이 잘 돌아가면
그건 잘 짠 코딩이다...

NEW ABAP 을 활용해도 느리고 유지보수 측면에서 이해가 어렵다면 그건 고수가 아니다....


개발자는 항상 그 부분을 고민하면서 코딩해야 한다.





728x90
반응형