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

정보·팁

Clean ABAP ④ 문자열, 불리언, 조건문, IF/CASE 정리

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

3줄 요약

  • 문자열 리터럴은 백틱(` `), 조립은 |{ }| 문자열 템플릿, 불리언은 abap_bool 과 abap_true/false, 불리언 대입은 xsdbool` 이에요.

  • 조건은 긍정형으로, IS NOT 을 NOT IS 보다 먼저, 복잡하면 변수나 메서드로 쪼개요.

  • IF 가 깊어지면 CASE 와 하위 메서드로 풀고, 정규식은 더 단순한 방법이 없을 때만 써요.

어떤 상황에서 쓰나요

작은 문법 선택이 모여 코드의 인상을 만들어요. 'X' 와 space 가 섞인 불리언, 세 겹으로 중첩된 IF, 정규식 한 줄로 해결한 이름 검증 같은 코드를 리뷰할 때 근거로 삼을 수 있는 규칙들이에요. 연재 4회는 Clean ABAP 의 짧은 장 다섯 개를 한꺼번에 정리해요.

핵심 내용

문자열

  • 고정 문자열은 백틱으로 써요. DATA(some_string) = ABC. 는 곧바로 string 이 돼요. 작은따옴표는 불필요한 타입 변환을 하고 CHAR 인지 STRING 인지 헷갈리게 해요. |ABC| 는 CONSTANTS 에 쓸 수 없고 고정값에는 쓸데없는 부담이에요.

  • 조립은 문자열 템플릿으로 해요. 어느 부분이 리터럴이고 어느 부분이 변수인지 잘 보여서, && 로 이어 붙이는 것보다 읽기 쉬워요.

DATA(message) = |Received HTTP code { status_code } with message { text }|.

불리언

  • 불리언은 신중하게 써요. 처음엔 is_archived 가 자연스러워 보여도, 곧 "보관 중" 같은 상태가 생겨 열거형이 필요해지는 경우가 많아요. 종류를 구분하는 용도로는 불리언이 대개 나쁜 선택이에요.

  • 타입은 abap_bool, 비교는 abap_true/abap_false 로 해요. char1, 'X', space, IS INITIAL 비교는 불리언임이 안 보이거나, abap_bool 의 기본값이 abap_false 임을 독자가 떠올려야 해서 피해요. 다이내프로 필드처럼 DDIC 요소가 필요하면 abap_boolean 을 써요. 이 규칙은 ABAP 프로그래밍 지침에 근거해요.

  • 대입은 xsdbool 이에요. IF ... ELSE 4줄이 한 줄이 되고, boolc/boolx 보다 타입 변환이 한 번 덜해요. 이름이 어색하다는 것은 가이드도 인정해요. 대안으로 COND abap_bool( WHEN ... THEN abap_true ) 도 있지만 더 길어요.

DATA(has_entries) = xsdbool( line IS NOT INITIAL ).

조건

  • 긍정형으로 써요. has_entries = abap_true 가 has_no_entries = abap_false 보다 낫지만, 이를 위해 빈 IF 분기를 만들 정도로 밀어붙이지는 말아요.

  • IF variable IS NOT INITIAL., NP, <> 처럼 IS NOT 형태를 NOT IS 보다 먼저 써요. 논리적으로 같아도 머릿속에서 뒤집는 수고가 들어서예요.

  • 불리언 메서드는 IF is_empty( table ). 처럼 호출만으로 조건을 만들 수 있어요(서술형 메서드 호출). 이 줄임은 "비어 있지 않음 = 참, 비어 있음 = 거짓"인 반환 타입에만 쓸 수 있다는 점은 기억해요.

  • 복잡한 조건은 xsdbool 로 의미 있는 이름의 변수(example_provided, one_example_fits)에 나눠 담거나, 아예 메서드(is_provided)로 빼요. ADT 의 퀵 픽스로 조건을 변수로 추출할 수 있다고 해요.

IF / CASE

  • 빈 IF 분기를 두지 말고 조건을 뒤집어요.

  • 대안이 여러 개면 ELSEIF 사슬보다 CASE 가 좋아요. 서로 배타적인 대안이라는 점이 드러나고, 새 경우를 추가하기 쉬우며, 중첩 실수도 막아 줘요. 마지막 WHEN OTHERS. 에서 예외를 던지면 안전해요.

  • 중첩은 얕게 유지해요. 깊은 IF 는 테스트 케이스가 기하급수적으로 늘어요. 하위 메서드와 불리언 도우미 변수로 풀거나, IF <this> AND <that>. 처럼 합쳐요.

정규식

  • 단순한 방법이 있으면 정규식을 쓰지 않아요. matches( val = input regex = '.+' ) 대신 input IS NOT INITIAL, contains( ... regex = 'abc' ) 대신 sub = 'abc' 예요. 정규식은 파싱과 컴파일 때문에 메모리와 시간도 더 써요.

  • 이미 있는 기반 검사를 다시 만들지 않아요. 클래스 이름 검증이라면 정규식 대신 SEO_CLIF_CHECK_NAME 함수 모듈이에요.

  • 복잡한 정규식은 조각 상수로 조립하면 어떻게 만들어졌는지 보여 줄 수 있어요.

주의할 점

  • 이 장의 규칙은 7.40 이상 문법(xsdbool, 문자열 템플릿, 인라인 선언)을 전제로 해요. 더 낮은 릴리스에서는 쓸 수 있는 형태가 달라요. 쓰기 전에 대상 시스템에서 문법 검사를 해 보세요. (7.40 기준은 원문에 적힌 것이 아니라 일반적으로 알려진 정보예요.)

  • xsdbool 은 가이드의 선택일 뿐 유일한 답이 아니에요. 팀 표준이 COND 라면 그쪽이 나을 수도 있어요.

  • 정규식 장은 "쓰지 마라"가 아니라 "더 단순한 방법이 있으면 그걸 먼저"예요. 원문도 복잡한 경우를 위한 조립 요령을 따로 소개해요.

  • 이 글은 원문을 읽고 정리한 것이고, 예제를 직접 실행해 보지는 못했어요.

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

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

출처와 이용 안내
  • 원문: Clean ABAP - Strings, Booleans, Conditions, Ifs, Regular expressions · 작성자 SAP SE and contributors SAP/styleguides · 작성일 2019-05-01 · 기준 릴리스에 따라 다름 원문은 최신 ABAP 기준 · 확인일 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

아직 댓글이 없어요.

정보·팁 목록전체 목록