콘텐츠
Internal Table 에 Headerline 혹은 헤더라인
Headerline 이란 Internal Table 을 ABAP에서 처음 다루게 될 때 겪게 되는 생소한 개념이다. 쉽게 설명하자면 Internal Table 은 변수로 선언 된 DB Table 이고 이곳에 데이터를 담아 반복문 등을 통해 데이터를 다루고 ALV, 각종 Function 에 자주 이용하게 된다.
만약 Javascript 를 해봤다면 Json Array 를 다룰 때 Array 배열 영역에 값을 추가 할 때 Json Object 를 이용 하게 되는데 이 때 Headerline 이 Json Object 라 생각하면 편하려나?
나도 ABAP 으로 개발/유지보수를 하고 있지만 전문 교육자는 아니므로… 설명이 생각보다 어렵다.
어쨌든, 테이블 맨 위에 헤더 라인을 생성하고 정의한 필드에 맞춰 데이터를 채운 후 내부 테이블로 넣어주는 과정으로 코딩을 하게 되는데 사실 Internal Table 에 데이터를 넣는 방법은 또 있다.
인터널 테이블(Internal Table)과 같은 필드를 가진 또 다른 변수 Structure 를 별도로 만들어 이 곳에 데이터를 채우고 인터널 테이블 안에 넣을 수 있다.
Headerline vs Structure
그래서 이 두 방식의 차이를 한번 궁금해서 찾아보고 정리하게 되었다. 결론부터 말하자면 사용 방법에 차이지 동작하는 기능은 차이가 없다란 결론이 나왔다.
속도 혹은 퍼포먼스
가장 먼저 궁금했던 것은 속도다. 알아본 결과 두 방식에 퍼포먼스 적인 차이는 없지만, 내부 영역이 엄청나게 큰 경우 수치 적인 차이가 발생 할 수 있어 Structure 가 좀 더 효율적일 순 있지만 체감이 거의 되지 않는 수준이라 한다. 즉, 코딩 스타일의 차이일 뿐 어떤 것을 사용한다고 해서 프로그램의 성능이 떨어지진 않는다는 것이다.
그럼 둘 중엔 무엇을 사용하는 것이 좋을까?
이에 대해서는 조사해본 결과 기본적으로 헤더라인 방식이 좀 더 과거에 사용 되던 방식으로 ABAP 4.6C 이전에서 자주 사용 되다 최신 버전에선 권장하지 않고 있다.
그 이유로는 다음과 같은 사항이 고려 되는데
(1) 가독성과 유지보수성
(2) 코드의 표준화
헤더라인을 사용하게 되면 인터널 테이블과 같은 변수 명을 이용해서 프로그램을 짜게 되므로 명확하게 분리가 되어 있지 않게 된다. 근데 사실 실제로 ABAP 코딩을 해보면 오히려 코드가 간결해지고 인터널 테이블 용 구문과 헤더라인 용 구문이 겹치는 것이 없다.
단, Function 같은 곳에 변수로 써 적용 시킬 때 대괄호([])를 통해 구분한다. 그렇지 않으면 에러가 발생. 또 한 헤더라인은 스트럭쳐 변수로도 사용이 가능하다.
그래서 프로그래머의 스타일에 따라 달라 질 수 있지만 최대한 표준과 권장하는 방향에 맞춰 개발을 진행해 보도록 노력하는 것도 좋아 보인다.