목차
1. BASE Operator 란?
BASE 연산자는 주로 구조체 또는 내부 테이블을 확장하거나 수정할 때 사용됩니다.
이 연산자를 사용하면 기존의 데이터 구조체나 테이블에 새로운 필드를 추가하거나, 기존 필드의 값을 변경하면서 새로운 인스턴스를 생성할 수 있습니다.
이 방법은 기존 데이터를 유지하면서 확장된 새로운 구조체나 테이블을 생성할 때 코드를 더 간결하고 가독성 있게 만들어 줍니다.
2. BASE Operator 예제
예제1) 구조체 확장
TYPES: BEGIN OF TY_PERSON,
NAME TYPE STRING,
AGE TYPE I,
WEIGHT TYPE I,
END OF TY_PERSON.
DATA: LS_PERSON TYPE TY_PERSON.
LS_PERSON = VALUE #( NAME = 'John Doe' AGE = 30 ).
LS_PERSON = VALUE #( BASE LS_PERSON WEIGHT = 50 ).
[RESULT]
John Doe 30 50
VALUE 연산자를 사용하게 되면 TARGET(LS_PERSON)변수의 값이 CLEAR되면서 값을 대입히게 됩니다.
TARGET(LS_PERSON)변수의 값을 유지하면서 특정 필드의 값만 바꾸고자 할때 BASE 연산자를 사용합니다.
BASE로 지정된 구조체(LS_PERSON)에 WEIGHT의 값만 50으로 대입하여 TARGET(LS_PERSON)변수에 반영합니다.
TYPES: BEGIN OF TY_PERSON,
NAME TYPE STRING,
AGE TYPE I,
WEIGHT TYPE I,
END OF TY_PERSON.
TYPES: BEGIN OF TY_PERSON2,
AGE TYPE I,
WEIGHT TYPE I,
END OF TY_PERSON2.
DATA: LS_PERSON TYPE TY_PERSON,
LS_SOURCE TYPE TY_PERSON2.
LS_PERSON = VALUE #( NAME = 'John Doe' AGE = 30 WEIGHT = 50 ).
LS_SOURCE = VALUE #( AGE = 25 WEIGHT = 60 ).
LS_PERSON = CORRESPONDING #( BASE ( LS_PERSON ) LS_SOURCE ).
[RESULT]
John Doe 25 60
CORRESPONDING 연산자도 마찬가지로 BASE로 지정된 구조체(LS_PERSON)의 값에 SOURCE(LS_SOURCE)구조체를 CORRESPONDING하여 TARGET(LS_PERSON) 구조체에 반영합니다.
위 예제에서 BASE 연산자를 사용안하면 NAME필드의 값이 사라지게 됩니다.
예제2) 테이블 값추가
TYPES: BEGIN OF TY_PERSON,
NAME TYPE STRING,
AGE TYPE I,
WEIGHT TYPE I,
END OF TY_PERSON.
DATA: LT_PERSON TYPE TABLE OF TY_PERSON.
LT_PERSON = VALUE #( ( NAME = 'John Doe' AGE = 30 WEIGHT = 50 ) ).
LT_PERSON = VALUE #( BASE LT_PERSON ( NAME = 'Jane Doe' AGE = 25 WEIGHT = 45 ) ).
[RESULT]
John Doe 30 50
Jane Doe 25 45
테이블도 마찬가지로 VALUE 연산자를 사용하게 되면 TARGET(LT_PERSON)변수의 값이 CLEAR되면서 값을 대입히게 됩니다.
위 예제에서 BASE 연산자를 사용하지 않으면 LT_PERSON의 값은 'Jane Doe 25 45' 만 남게 됩니다.
TARGET(LT_PERSON)변수의 값을 유지하면서 DATA를 추가하고자 할때 BASE 연산자를 사용하면 됩니다.
TYPES: BEGIN OF TY_PERSON,
NAME TYPE STRING,
AGE TYPE I,
WEIGHT TYPE I,
END OF TY_PERSON.
TYPES: BEGIN OF TY_PERSON2,
AGE TYPE I,
WEIGHT TYPE I,
END OF TY_PERSON2.
DATA: LT_PERSON TYPE TABLE OF TY_PERSON,
LT_SOURCE TYPE TABLE OF TY_PERSON2.
LT_PERSON = VALUE #( ( NAME = 'John Doe' AGE = 30 WEIGHT = 50 ) ).
LT_SOURCE = VALUE #( ( AGE = 25 WEIGHT = 60 ) ).
LT_PERSON = CORRESPONDING #( BASE ( LT_PERSON ) LT_SOURCE ).
[RESULT]
John Doe 30 50
25 60
CORRESPONDING 연산자도 BASE로 지정된 테이블(LT_PERSON)에 SOURCE(LT_SOURCE)테이블의 값을 추가한 후 TARGET(LT_PERSON)테이블에 반영합니다.
3. BASE Operator의 장점
유연성: 기존 데이터 구조체나 내부 테이블을 기반으로 새로운 인스턴스를 쉽게 확장하거나 수정할 수 있습니다.
가독성: 기존 인스턴스를 복사하고 변경 사항을 명확하게 지정함으로써, 코드의 의도를 쉽게 파악할 수 있습니다.
효율성: 기존 데이터의 재사용을 통해 코드 중복을 줄이고, 개발 프로세스를 간소화할 수 있습니다.