목차
1. LET~IN Operator 란?
LET ~ IN 구문은 ABAP 7.40 이후 도입된 테이블 표현식(Table Expressions) 및 다른 표현식 내에서 로컬 변수를 선언하고 초기화하는 데 사용됩니다.
이 구문은 데이터를 처리하고 결과를 반환하기 전에 임시 변수에 값을 할당하고자 할 때 유용합니다.
LET ~ IN 구문을 사용하면 코드의 가독성을 높이고, 복잡한 표현식을 더 명확하게 구성할 수 있습니다.
2. LET~IN Operator 예제
예제1) 기본사용예제
TYPES: BEGIN OF TY_EMPLOYEE,
ID TYPE I,
NAME TYPE STRING,
DEPT TYPE STRING,
END OF TY_EMPLOYEE.
DATA : LT_EMPLOYEE TYPE TABLE OF TY_EMPLOYEE.
LT_EMPLOYEE = VALUE #( LET EMP1 = VALUE TY_EMPLOYEE( ID = 1 NAME = 'Alice' DEPT = 'HR' )
EMP2 = VALUE TY_EMPLOYEE( ID = 2 NAME = 'Bob' DEPT = 'IT' )
IN ( EMP1 ) ( EMP2 ) ).
이 코드는 두 개의 TY_EMPLOYEE 타입의 구조체 EMP1과 EMP2를 LET 구문을 통해 선언하고 초기화합니다.
EMP1은 ID가 1, 이름이 'Alice', 부서가 'HR'인 직원을 나타내며, EMP2는 ID가 2, 이름이 'Bob', 부서가 'IT'인 직원을 나타냅니다.
그런 다음 IN 부분에서 이 두 구조체를 사용하여 내부 테이블 TY_EMPLOYEE 의 두 행을 초기화합니다.
이 방법은 데이터를 초기화하고 구성하는 과정에서 코드의 명확성과 관리 용이성을 향상시킵니다.
예제2) REDUCE 구문내에서 사용하기
SELECT *
FROM SFLIGHT
INTO TABLE @DATA(LT_SFLIGHT).
DATA(LV_PRICE_AVG) = REDUCE S_PRICE( LET LINES = CONV S_PRICE( LINES( LT_SFLIGHT ) )
IN INIT SUM = 0 FOR WA IN LT_SFLIGHT
WHERE ( CARRID = 'LH' )
NEXT SUM = SUM + WA-PRICE ) / LINES.
이 예제에서는 REDUCE와 함께 LET ~ IN 구문을 사용하여 LT_SFLIGHT 테이블의 CARRID가 'LH'인 PRICE의 합(SUM)을 계산하고, 그 합을 LT_SFLIGHT의 ROW수로 나누어 평균 가격(LV_PRICE_AVG)을 계산합니다.
여기서 LET 구문은 평균을 계산하기 전에 LT_SFLIGHT의 ROW수를 임시 변수 LINES에 할당하는 데 사용됩니다.
예제3) FOR문에서 사용하기
TYPES: BEGIN OF TY_EMPLOYEE,
ID TYPE I,
NAME TYPE STRING,
SALARY TYPE NETWR,
BONUS TYPE NETWR,
END OF TY_EMPLOYEE.
DATA : LT_EMPLOYEES TYPE TABLE OF TY_EMPLOYEE,
LT_ADJ_EMPLOYEES TYPE TABLE OF TY_EMPLOYEE.
LT_EMPLOYEES = VALUE #( ( ID = 1 NAME = 'Alice' SALARY = 50000 BONUS = 5000 )
( ID = 2 NAME = 'Bob' SALARY = 60000 BONUS = 6000 )
( ID = 3 NAME = 'Charlie' SALARY = 55000 BONUS = 5500 ) ).
LT_ADJ_EMPLOYEES = VALUE #( FOR WA IN LT_EMPLOYEES
LET BONUS_INCREASE = COND NETWR( WHEN WA-SALARY > 55000 THEN WA-BONUS * '1.2'
WHEN WA-SALARY <= 55000 AND WA-SALARY >= 50000 THEN WA-BONUS * '1.15'
ELSE WA-BONUS )
NEW_BONUS = WA-BONUS + BONUS_INCREASE
IN ( ID = WA-ID NAME = WA-NAME SALARY = WA-SALARY BONUS = NEW_BONUS ) ).
이 예제는 각 직원의 연봉에 따라 보너스 증가율을 결정하고, 이를 기존 보너스에 적용하여 새로운 보너스 금액을 계산합니다.
연봉이 55,000을 초과하는 직원에게는 보너스의 20%를 증가시키고, 연봉이 50,000과 55,000 사이인 직원에게는 15%를 증가시키며, 그 외에는 기존 보너스를 유지합니다.
그리고 이 계산된 새로운 보너스를 사용하여 LT_ADJ_EMPLOYEES 내부 테이블에 값을 추가합니다.
이 예제는 FOR 루프와 LET 구문을 사용하여 복잡한 비즈니스 로직을 구현하는 방법을 보여줍니다.
여기서 LET 구문은 각 직원별로 보너스 조정 로직을 적용하는 데 필요한 중간 계산 값을 저장하는 데 사용됩니다.
이 방식을 통해, 보다 복잡한 데이터 변환과 계산을 효율적으로 처리할 수 있습니다.
3. LET~IN Oprerator 장점
가독성: 복잡한 표현식을 분해하여 각 단계를 명확히 할 수 있어, 코드의 가독성이 향상됩니다.
유지보수성: LET ~ IN 구문을 사용하면, 중간 계산 결과를 임시 변수에 저장하여 디버깅 및 유지보수를 용이하게 합니다.
효율성: 중간 결과를 임시 변수에 한 번만 계산하고 여러 번 재사용할 수 있어, 실행 효율성을 높일 수 있습니다.