바로투입이력카드
SAP 게시판

정보·팁

Clean ABAP ② 최신 문법, 상수, 변수 선언 규칙 한눈에

에이든ABAP 개발자운영자모듈 MMSD기타조회 5

3줄 요약

  • 오래된 구문(MOVE, CREATE OBJECT, TRANSLATE)보다 함수형 구문(NEW, to_upper, VALUE)을 먼저 쓰라는 게 이 장의 큰 줄기예요.

  • 상수는 값이 아니라 의미로 이름을 짓고, 가능하면 ENUM 을, 안 되면 구조로 묶어요.

  • 변수는 처음 쓰는 곳에서 인라인으로 선언하고, 블록 안에서 선언한 변수를 블록 밖에서 쓰지 않아요.

어떤 상황에서 쓰나요

이 연재의 두 번째 회예요. 이름 규칙은 어느 릴리스에서든 통하지만, 이번 회의 규칙 중에는 비교적 새 구문에 기대는 것이 많아요. 가이드도 첫머리에서 "오래된 릴리스를 다룬다면 조심해서 적용하고, 지원해야 하는 가장 낮은 릴리스에서 먼저 확인하라"고 말해요. 그렇다고 Clean Code 전체를 버리지는 말고, 이름 짓기나 주석 같은 대부분의 규칙은 어떤 ABAP 버전에서도 통하니 그것부터 쓰라는 거예요.

핵심 내용

1. 구문 선택

  • 객체지향이 절차지향보다 낫다고 봐요. RFC 용 함수나 트랜잭션용 프로그램처럼 절차형 객체가 꼭 필요한 자리에서도, 그 안에서는 실제 기능을 가진 클래스를 부르는 정도만 하라고 해요.

  • 함수형 구문이 더 짧고 요즘 개발자에게 자연스러워요. 가이드가 든 짝은 아래와 같아요.

DATA(variable) = 'A'.                         " MOVE 'A' TO variable.
DATA(uppercase) = to_upper( lowercase ).      " TRANSLATE ... TO UPPER CASE.
DATA(object) = NEW /clean/my_class( ).        " CREATE OBJECT ...
DATA(line) = value_pairs[ name = 'A' ].       " 행이 반드시 있을 때
DATA(maybe) = VALUE #( value_pairs[ name = 'A' ] OPTIONAL ).  " 없을 수도 있을 때
IF line_exists( value_pairs[ name = 'A' ] ).  " READ TABLE ... TRANSPORTING NO FIELDS
  • 폐기 예정 구문은 피해요. 예를 들어 SELECT 의 호스트 변수에는 @ 를 붙이면 프로그램 변수와 DB 칼럼이 구분돼요. 릴리스별 폐기 목록은 SAP 문서에 있고, 가이드가 링크를 걸어 두었어요.

  • 성능은 겁먹고 미리 최적화하지 말고, 느리다고 측정된 곳만 규칙을 어기라고 해요. 가이드는 "코드의 10%가 실행 시간의 90%를 쓰는 일이 흔하고, ABAP 에서는 DB 시간이 큰 비중을 차지한다"는 마틴 파울러의 논지를 인용해요.

2. 상수

  • 마법 숫자 대신 이름 붙은 상수를 써요. abap_type = 'D' 보다 cl_abap_typedescr=>typekind_date 가 의도를 말해요.

  • 그렇다고 모든 리터럴을 상수로 감싸지는 말아요. c_01, c_mmsta 처럼 값이나 타입을 되풀이한 이름은 정보가 없고, 값이 바뀌면 이름도 고쳐야 해요. status_inactive 처럼 의미를 담아요. 값 자체가 이미 설명적이면('CANCELLED') 반복해도 괜찮아요.

  • 7.51 이상이면 상수 인터페이스 대신 ENUM 을 써요.

CLASS /clean/message_severity DEFINITION PUBLIC ABSTRACT FINAL.
  PUBLIC SECTION.
    TYPES: BEGIN OF ENUM type,
             warning,
             error,
           END OF ENUM type.
ENDCLASS.
  • ENUM 을 못 쓰면 상수를 BEGIN OF ... END OF 구조로 묶어요. 관계가 보이고, 구조 단위로 접근해 입력값 검증도 할 수 있어요.

3. 변수

  • 메서드가 3~5문장으로 짧아지면 맨 위에 DATA 를 모아 두는 것보다 처음 쓰는 자리에 DATA(name) = ... 로 선언하는 쪽이 자연스러워요.

  • IF 안에서 인라인 선언한 변수를 ELSE 나 블록 밖에서 쓰지 않아요. 블록 밖에서도 보이긴 하지만 읽는 사람이 선언을 놓쳐요. 밖에서 필요하면 블록 앞에서 선언해요.

  • DATA: 로 선언을 체인으로 묶지 않아요. 서로 관련 있다는 착각을 주고, 콜론, 쉼표, 마침표를 고치는 리팩터링이 번거로워져요.

  • ABAP Platform 2021 부터는 필드 심볼 없이도 result = dref->*. 처럼 쓸 수 있는 곳이 많아서, 일반 데이터 접근용으로 필드 심볼을 쓸 이유가 줄었어요.

  • 루프 대상은 용도로 골라요. 읽고 고칠 때는 필드 심볼, 참조를 루프 밖으로 넘길 때는 참조 변수, 복사본이 필요할 때는 일반 변수예요. 객체와 참조 중심 코드라면 참조로 통일하고, 순수 데이터 조작이 많거나 루프 성능이 중요하면 필드 심볼로 통일하는 두 스타일이 일관적이라고 해요.

주의할 점

  • ENUM 은 7.51 이상, index += 1. 은 7.54 이상(그 아래는 index = index + 1.), 필드 심볼 대체 구문은 ABAP Platform 2021 이상이에요. ECC 6.0 계열에서는 안 되는 줄이 많아서, 쓰기 전에 대상 시스템의 릴리스를 꼭 확인하세요.

  • 루프 대상의 속도 차이(필드 심볼이 참조보다 약간 빠름)는 루프가 전체 실행 시간의 큰 몫일 때만 느껴지고, DB 입출력이 지배적이면 거의 의미가 없다고 원문이 말해요.

  • 원문은 제가 직접 코드를 실행해 검증한 것이 아니라 읽고 정리한 것이에요. 이 장의 다른 규칙들은 원문 링크에서 확인하세요.

  • 원문은 2019년에 처음 공개되어 2025년 3월에 마지막으로 고쳐진 문서예요(제가 읽은 판은 2026년 10월 기준). 이 글은 읽고 정리한 것이고 예제를 직접 실행해 보지는 않았어요.

원문 주소: https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#language

출처와 이용 안내
  • 원문: Clean ABAP - Language, Constants, Variables · 작성자 SAP SE and contributors SAP/styleguides · 작성일 2019-05-01 · 기준 릴리스에 따라 다름 ENUM 7.51 이상, 필드 심볼 대체 ABAP Platform 2021 이상 · 확인일 2026-10-25

  • 이 글은 위 원문을 읽고 한국어로 요약·재구성한 글이며 번역본이 아니에요. 원문의 저작권은 작성자와 SAP에 있어요.

  • 원문은 CC BY 3.0 라이선스(https://creativecommons.org/licenses/by/3.0/)로 공개된 자료예요. 이 글은 내용을 한국어로 줄이고 순서를 바꾼 변경본이며, 원저작자가 이 글을 보증하지 않아요.

  • 설정과 화면은 릴리스마다 달라요. 적용하기 전에 원문과 SAP Help Portal, 관련 SAP Note에서 최신 내용을 확인해 주세요.

  • SAP와 SAP 제품명은 SAP SE의 상표예요. 바로투입은 SAP와 관련이 없어요.

댓글 0

아직 댓글이 없어요.

정보·팁 목록전체 목록