목차
1. Corresponding Operator 이란?
CORRESPONDING 연산자는 한 구조체나 내부 테이블의 필드 값을 다른 구조체나 내부 테이블로 복사할 때 사용됩니다. 이 연산자는 필드 이름이 같은 경우에만 데이터를 복사합니다.
이를 통해 개발자는 데이터 매핑 작업을 보다 효율적으로 수행할 수 있으며, 코드의 가독성과 유지 보수성을 향상시킬 수 있습니다.
2. Corresponding Operator 예제
예제1) 기본 사용법
TYPES: BEGIN OF TY_PERSON,
NAME TYPE STRING,
AGE TYPE I,
END OF TY_PERSON.
DATA: LS_SOURCE TYPE TY_PERSON,
LS_TARGET TYPE TY_PERSON.
LS_SOURCE = VALUE #( NAME = 'John Doe' AGE = 30 ).
LS_TARGET = CORRESPONDING #( LS_SOURCE ).
[RESULT]
John Doe 30
두 구조체 LS_SOURCE와 LS_TARGET이 있고, 두 구조체 모두 이름과 나이 필드를 가지고 있을 때, LS_SOURCE에서 LS_TARGET으로 이름과 나이를 복사하는 예제입니다.
CORRESPONDING 연산자는 동일한 필드인 경우 값을 복사하기 때문에 VALUE 연산자처럼 필드를 지정하지 않습니다.
CORRESPONDING 연산자 다음에는 TARGET변수의 타입을 지정하는데 TARGET변수의 타입이 이미 지정되어 있으면
#으로 생략할 수 있습니다.
TYPES: BEGIN OF TY_PERSON,
NAME TYPE STRING,
AGE TYPE I,
WEIGHT TYPE I,
END OF TY_PERSON.
TYPES: BEGIN OF TY_PERSON2,
NAME TYPE STRING,
AGE TYPE I,
END OF TY_PERSON2.
DATA: LS_SOURCE TYPE TY_PERSON2,
LS_TARGET TYPE TY_PERSON.
LS_TARGET = VALUE #( NAME = 'Jane Doe' AGE = 25 WEIGHT = 50 ).
LS_SOURCE = VALUE #( NAME = 'John Doe' AGE = 30 ).
LS_TARGET = CORRESPONDING #( LS_SOURCE ).
[RESULT]
John Doe 30 0
위 예제는 SOURCE와 TARGET변수가 서로 틀리고 TARGET변수에 다른값이 존재할때 CORRESPONDING 연산자로 값을 적용하면 어떻게 되는지에 대한 예제입니다.
SOURCE변수에는 NAME, AGE필드만 있기때문에 TARGET변수에 있는 WEIGHT필드의 값에는 영향을 안줄것 같지만 결과는 WEIGHT의 값을 CLEAR시킵니다.
VALUE연산자 및 CORRESPONDING연산자는 TARGET변수를 CLEAR시킨후 값을 대입하기때문이 이 부분을 조심해서 사용해야 합니다.
그럼 기존의 값을 유지한체로 사용할수는 없을까요?
있습니다.
BASE 연산자를 사용하면 되는데 BASE연산자는 다음번 게시물에서 소개해 드리겠습니다.
예제2) Internal Table간 Corresponding 이동
TYPES: BEGIN OF TY_PERSON,
NAME TYPE STRING,
AGE TYPE I,
WEIGHT TYPE I,
END OF TY_PERSON.
TYPES: BEGIN OF TY_PERSON2,
NAME TYPE STRING,
AGE TYPE I,
END OF TY_PERSON2.
DATA: LT_SOURCE TYPE TABLE OF TY_PERSON2,
LT_TARGET TYPE TABLE OF TY_PERSON.
LT_TARGET = VALUE #( ( NAME = 'Jane Doe' AGE = 25 WEIGHT = 50 ) ).
LT_SOURCE = VALUE #( ( NAME = 'John Doe' AGE = 30 ) ).
LT_TARGET = CORRESPONDING #( LT_SOURCE ).
[RESULT]
John Doe 30 0
Internal Table인 경우에도 구문은 구조일때와 동일합니다.
다면 구조인 경우에는 SOURCE, TARGET변수가 모두 구조여야 하고 Internal Table인 경우에는 SOURCE, TARGET변수 모두 Table이어야 합니다.
예제3) MAPPING옵션
TYPES: BEGIN OF TY_PERSON,
NAME TYPE STRING,
AGE TYPE I,
WEIGHT TYPE I,
END OF TY_PERSON.
TYPES: BEGIN OF TY_PERSON2,
NAME TYPE STRING,
AGE TYPE I,
END OF TY_PERSON2.
DATA: LS_SOURCE TYPE TY_PERSON2,
LS_TARGET TYPE TY_PERSON.
LS_TARGET = VALUE #( NAME = 'Jane Doe' AGE = 25 WEIGHT = 50 ).
LS_SOURCE = VALUE #( NAME = 'John Doe' AGE = 30 ).
LS_TARGET = CORRESPONDING #( LS_SOURCE MAPPING WEIGHT = AGE ).
[RESULT]
John Doe 30 30
MAPPING 옵션은 서로다른 필드를 연결할때 사용합니다.
MAPPING다음에 TARGET변수의 필드를 먼저 써주고 뒤에 SOURCE변수의 필드를 써주면 됩니다.
즉 LS_TARGET-WEIGNT = LS_SOURCE-AGE가 됩니다.
결과를 보면 SOURCE변수의 AGE값이 TARGET변수의 WEIGHT로 들어간걸 확인할 수 있습니다.
예제4) EXCEPT 옵션
TYPES: BEGIN OF TY_PERSON,
NAME TYPE STRING,
AGE TYPE I,
WEIGHT TYPE I,
END OF TY_PERSON.
TYPES: BEGIN OF TY_PERSON2,
NAME TYPE STRING,
AGE TYPE I,
END OF TY_PERSON2.
DATA: LS_SOURCE TYPE TY_PERSON2,
LS_TARGET TYPE TY_PERSON.
LS_TARGET = VALUE #( NAME = 'Jane Doe' AGE = 25 WEIGHT = 50 ).
LS_SOURCE = VALUE #( NAME = 'John Doe' AGE = 30 ).
LS_TARGET = CORRESPONDING #( LS_SOURCE EXCEPT AGE ).
[RESULT]
John Doe 0 0
EXCEPT옵션은 동일한 필드지만 값 대입이 필요없을때 사용합니다.
위 예제는 AGE필드가 SOURCE, TARGET변수 양쪽에 존재하지만 값을 대입시키지 않습니다.
3. Corresponding Operator의 장점
CORRESPONDING 연산자는 복잡한 데이터 구조 사이에서 필드를 효율적으로 매핑하고 복사할 수 있는 강력한 도구입니다.
이를 통해 개발자는 데이터 전송과 변환 작업을 간소화하고, 코드의 명확성을 유지할 수 있습니다.