ABAP 코드 스타일 가이드라인

잘 정의된 코딩 스타일은 가독성, 유지보수성 및 협업을 향상시키는 데 필수적입니다. ABAP 프로그래밍에서도 예외는 아니며, 명확하고 일관된 스타일을 따르면 전반적인 코드 품질이 향상됩니다. 이 글에서는 ABAP 코드 작성 시 고려해야 할 몇 가지 핵심적인 스타일 가이드라인을 소개합니다.

1. 대소문자 사용

ABAP은 대소문자를 구분하지 않는 언어입니다. 따라서 코드에서 대소문자를 어떻게 사용할지 결정하는 것이 중요합니다. 일반적으로 사용되는 옵션은 다음과 같습니다:

  • 전체 대문자
  • 전체 소문자
  • 키워드 대문자, 나머지 소문자
  • 키워드 소문자, 나머지 대문자

키워드는 대문자로, 나머지 코드는 소문자로 작성하는 것이 가독성 측면에서 유리합니다. 키워드는 개발자에게 익숙하지만, 작성자가 만든 변수명이나 로직은 그렇지 않을 수 있기 때문입니다. 소문자는 텍스트를 읽기 쉽게 만드는 경향이 있어, 키워드가 아닌 부분을 소문자로 유지하면 코드의 가독성을 높일 수 있습니다. 키워드를 대문자로 표시하면 코드의 다른 부분과 쉽게 구별할 수 있습니다.

2. 들여쓰기

일관된 들여쓰기는 코드 구조를 명확하게 보여주는 데 중요합니다. ABAP 개발 환경(SE38)은 자동 들여쓰기 기능을 제공하므로, '형식 최적화' 기능을 사용하여 코드를 깔끔하게 정렬할 수 있습니다. Eclipse 기반의 ABAP Development Tools(ADT)에서도 이러한 기능을 지원합니다.

3. 표현식 vs. 키워드

ABAP은 많은 키워드를 가지고 있지만, SAP는 점차 간결하고 가독성 높은 표현식 기반의 구문을 도입하고 있습니다. 가능하면 키워드보다 표현식을 사용하는 것이 좋습니다.

객체 인스턴스화 예시:

" 권장 방식
DATA(receiver) = NEW event_receiver( ).

" 비권장 방식
DATA receiver TYPE REF TO event_receiver.
CREATE OBJECT receiver.

메서드 호출 예시:

" 권장 방식
value = object->method( parameter = a ).

" 비권장 방식
CALL METHOD object->method
    EXPORTING
       parameter = a
    RECEIVING
       return    = value.

내부 테이블 접근 예시:

" 권장 방식 (VALUE 연산자 사용 시 예외 자동 처리)
SELECT * INTO TABLE @DATA(itab) FROM sflight
  UP TO 10 ROWS ORDER BY carrid.

TRY.
    DATA(ls_sflight) = itab[ 2 ].
  CATCH cx_sy_itab_line_not_found.
ENDTRY.

" 더 권장되는 방식 (VALUE 연산자로 예외 자동 처리)
DATA(ls_sflight_val) = VALUE #( itab[ 2 ] optional ).

" 비권장 방식
DATA ls_sflight TYPE sflight.
READ TABLE itab INTO ls_sflight INDEX 2.
IF sy-subrc <> 0.
ENDIF.

이러한 표현식에 대한 자세한 내용은 SAP 공식 문서나 관련 블로그 게시물을 참조하십시오.

4. Open SQL

Open SQL 쿼리를 작성할 때, 필드명 충돌을 피하는 것이 중요합니다. 데이터베이스 테이블 필드를 참조할 때는 테이블명 뒤에 '~'를 사용해야 합니다.

" 올바른 구문
SELECT carrid connid fldate seatsocc seatsmax
       FROM sflight
       INTO TABLE sflight_tab
       WHERE seatsmax < sflight~seatsocc.

ABAP 변수 값을 SQL 조건으로 사용할 때는 '@' 기호로 변수를 표시하여 명확성을 높일 수 있습니다.

" 데이터베이스 필드 비교
SELECT carrid, connid, fldate, seatsocc, seatsmax
       FROM sflight
       WHERE seatsmax < sflight~seatsocc
       INTO TABLE @sflight_tab.

" ABAP 변수 값으로 조건 설정
SELECT carrid, connid, fldate, seatsocc, seatsmax
       FROM sflight
       WHERE seatsmax < @sflight-seatsocc
       INTO TABLE @sflight_tab.

S/4HANA에서는 CASE 표현식, 문자열 표현식, CAST, CTE 등 Open SQL의 새로운 기능을 활용하여 데이터베이스에서 더 많은 계산을 수행하는 것이 권장됩니다.

5. 명명 규칙

변수명에 접두사를 사용하는 것은 ABAP에서 일반적입니다 (예: LT_ - Local internal table, LS_ - Local structure). 이는 코드 가독성을 높이고 잠재적인 이름 충돌을 방지하는 데 도움이 될 수 있습니다. 그러나 접두사 사용을 남용하면 오히려 코드를 복잡하게 만들 수 있습니다.

권장:

  • l_carrid

비권장:

  • lv_carrid

로컬(l_) 또는 글로벌(g_) 변수를 나타내는 `lv_` 또는 `gv_` 와 같은 접두사는 종종 불필요합니다. 변수의 범위는 코드의 문맥에서 명확해야 하는 경우가 많습니다. `lt_`(로컬 내부 테이블) 또는 `ls_`(로컬 구조)와 같이 의미 있는 접두사를 사용하는 것이 더 유익할 수 있습니다. 함수(Form) 이름에는 `frm_`과 같은 접두사를 사용하지 마십시오. `PERFORM get_price.`와 같이 명확한 이름만으로 충분합니다.

SAP의 최신 권장 사항은 접두사를 사용하지 않는 것입니다. 이는 변수명 자체의 중요성을 강조합니다.

6. 줄 길이

한 줄의 코드 길이를 80자 내외로 유지하는 것이 좋습니다. 이렇게 하면 여러 창을 나란히 열거나 SAP의 코드 비교 도구를 사용할 때 코드가 잘리지 않고 표시되어 가독성이 향상됩니다.

7. 헤더 라인이 있는 내부 테이블

OCCURS 키워드나 WITH HEADER LINE을 사용하여 헤더 라인이 있는 내부 테이블을 선언하는 것은 이제 구식으로 간주됩니다. 이러한 방식은 내부 테이블 자체와 헤더 라인(작업 영역)에 동일한 이름을 사용하게 하여 혼란을 야기하고 버그를 발생시킬 수 있습니다. 대신, 명시적인 작업 영역(Work Area)을 선언하고 `READ TABLE` 또는 `LOOP AT` 문에서 해당 작업 영역을 사용하는 것이 좋습니다.

" 비권장 방식 (헤더 라인 포함)
DATA: lt_sflight TYPE STANDARD TABLE OF sflight WITH HEADER LINE.

" 권장 방식 (별도 작업 영역 사용)
DATA: lt_sflight TYPE STANDARD TABLE OF sflight.
DATA: ls_sflight TYPE sflight.

" ... 데이터 읽기 ...
LOOP AT lt_sflight INTO ls_sflight.
  " ls_sflight 사용
ENDLOOP.

TABLES 키워드 사용도 피하는 것이 좋습니다.

태그: ABAP Coding Style Best Practices Open SQL ABAP Development Tools

7월 28일 04:52에 게시됨