
조건부 분기는 논리 조건에 따라 코드를 실행할 수 있는 제어 구조입니다.
가장 일반적인 조건부 분기는 한 쌍의 키워드 IF와 ENDIF 로 구성됩니다. IF와 ENDIF 사이의 코드 블록은 IF 후의 조건이 충족되는 경우에만 실행됩니다.
IF … ENDIF 구조를 최대 하나의 키워드 ELSE 및 임의의 수의 키워드 ELSEIF로 확장하여 코드 블록을 더 추가할 수 있습니다. 키워드 ELSE를 추가하면 항상 코드 블록 중 하나만 실행되게 할 수 있습니다. ELSE가 누락된 경우 어떤 코드 블록도 실행되지 않을 수 있습니다.
실행할 코드 블록은 다음과 같이 결정됩니다.
- 먼저 IF 조건이 평가됩니다. 이 조건이 충족되면 관련 코드 블록이 실행되고 프로그램이 ENDIF 후에 계속됩니다.
- IF 조건이 충족되지 않은 경우에만 첫 번째 ELSEIF 뒤의 조건이 평가됩니다. 이 조건이 충족되면 관련 코드 블록이 실행되고 프로그램이 ENDIF 후에 계속됩니다.
- 이는 모든 ELSEIF 조건에 대해 연속적으로 수행됩니다. 조건이 충족되지 않고 구조에 ELSE가 포함되어 있으면 ELSE 뒤의 코드 블록이 실행됩니다. 그렇지 않으면 코드 블록이 실행되지 않습니다.
힌트

논리 조건은 런타임 시스템에서 평가하여 조건이 참 또는 거짓인지 여부를 결정하는 비교, 논리 작업, 표현식 및 함수의 조합입니다.
논리 조건의 가장 일반적인 사용 케이스는 IF ... ENDIF. 구조
첫 번째 예는 단순 비교입니다. 두 개의 데이터 오브젝트 x와 y가 동일한 값을 갖는 경우 조건이 참입니다.
두 번째 예는 좀 더 정교하다: x의 값이 y보다 크거나 같고 y의 두 배 미만이거나 y보다 작거나 같고 y보다 두 배 더 큽니다.
세 번째 예에서는 산술 함수 abs( )와 논리식 BETWEEN <식 1> AND <식 2>을 사용합니다. x의 절대값이 y의 절대값과 두 배 y의 절대값 사이에 있으면 조건이 참입니다.
단순 값 비교에는 =, <>, >, <, >=, <= 연산자를 사용할 수 있습니다. 데이터 오브젝트의 값을 비교할 수 있을 뿐만 아니라, 예시의 산술식 2 * y와 같은 다른 여러 표현식의 값을 비교할 수 있습니다.
노트
연산자 AND와 OR을 사용하여 논리식과 NOT 연산자를 결합하여 표현식을 무효화할 수 있습니다. 괄호가 없으면 NOT 바인딩이 OR보다 AND와 AND보다 강합니다.
ABAP에는 다음과 같은 특수 논리식이 있습니다.
- <data object> 에 해당 유형별 초기 값이 포함된 경우 IS INITIAL 이 true
- <data object> 에 유형별 초기 값과 다른 값이 포함된 경우, IS NOT INITIAL이 참입니다.
- <data object> BETWEEN <식 1> AND <식 2>
일부 특수 ABAP 함수는 술어 함수입니다. 즉, 논리 조건 자체입니다. Contains( )는 문자형 값을 비교하는 함수이며 line_exists( )는 내부 테이블의 행에 대한 존재 여부 확인을 수행합니다.

조건부 분기를 위한 두 번째 기법은 CASE … WHEN .. ENDCASE 제어 구조
CASE를 사용한 조건부 분기.. ENDCASE 는 IF … ENDIF 를 사용하여 보다 일반적인 분기를 수행하는 특별한 경우입니다. 분기마다 등가 비교를 사용하여 연속적으로 가능한 값 세트와 비교하는 단일 데이터 오브젝트의 값에 따라 분기가 결정되는 상황에서는 CASE 를 사용할 수 있습니다.
이 예에서 데이터 오브젝트 번호 의 값은 값 1 과 2 와 비교됩니다. 값이 1 이면 <code_block_1> 이 실행되고 euqals 2 값이 대신 <code_blocl_2> 가 실행됩니다. 다른 값에서는 WHEN OTHERS 뒤의 코드 블록이 실행됩니다.
CASE … ENDCASE를 사용하는 조건부 분기는 IF … ENDIF 구조로도 구현할 수 있습니다. 오른쪽에는 예제가 나와 있습니다.
힌트


