types : begin of t_date,
year(4) type n,
month(2) type n,
day(2) type n,
end of t_date.
field-symbols <fs> type t_date.
assign sy-datum to <fs> casting. => 타입의 속성을 할당할때 casting이 어떤작용을 하나요?
write / sy-datum.
skip.
write: / <fs>-year , / <fs>-month , / <fs>-day.
정리한 내용이 있어서 공유합니다.
-------------------------------------
2-5. 필드심볼과 Casting
데이터 오브젝트를 필드심볼에 Assign 할 경우에, CAST를 이용해 모든 데이터 타입을 필드심볼에 Assign 할 수 있다.
CAST 라는 영어 단어를 사전에서 찾아보면 “버리다”, “주조하다”, “<상을> 뜨다” 라는 의미가 포함되어 있다. 이러한 의미를 조합해보면 “나 자신을 버리고 새로운 틀에 맞게 변형을 한다”라고 해석 할 수 있다. 프로그램 용어로 CAST는 암묵적 형변환과 명시적 형변환 2가지로 분류되어 사용된다.
필드심볼에서 Casting이 어떠한 역할을 하게 되는지 살펴보자.
2-5-1. 암묵적 형변환(Implicit Casting)
필드 심볼의 데이터 타입이 Fully Type 으로 선언되어 있거나 기본 데이터 타입 -c, n, p, x- 을 사용한 경우에 암묵적 형변환을 사용한다. 즉, 타입이 정해진 필드 심볼과 데이터 오브젝트 타입이 상이한 경우에는 CASTING 구문을 이용하여 Assign 해야 한다.
<BOX>
ASSIGN <var> TO <fs> CASTING.
</BOX>
다음 예제는 구조체 타입의 필드 심볼과 CHAR 타입의 변수가 CASTING을 이용해 Assign을 수행하는 경우이다.
<예제13-2-4 >
REPORT Z13_015 .
TYPES: BEGIN OF line,
col1 TYPE char5 ,
col2 TYPE char10 ,
col3 TYPE char15 ,
END OF line.
DATA : ADDR(30) TYPE C VALUE 'SEOUL SEOCHOGU GANGNAM 713-11'.
FIELD-SYMBOLS: <f1> TYPE line.
ASSIGN ADDR TO <F1> CASTING.
WRITE : <F1>-col1, <f1>-col2, <f1>-col3.
</예제>
<결과13-2-4 >
</결과>
ASSIGN sy-datum TO <fs> CASTING. 구문에서 CASTING을 제거하면 데이터 타입이 일치 하지 않는다는 에러가 발생한다. 이것은 필드 심볼 <fs>는 구조체 타입이지만, 시스템 변수 SY-DATUM은 CHAR 8자리 속성으로 정의되어 있기 때문에 형 변환(type conversion)이 불가능하기 때문이다.
2-5-2. 명시적 형변환(Explicit Casting)
만약 [예제13-2-4 ]에서 필드 심볼을 다음과 같이 Generic Type으로 선언한다면, 프로그램이 정상적으로 활성화 될까?
FIELD-SYMBOLS: <f1> TYPE ANY.
이 경우에는 다음과 같이 명시적으로 TYPE을 지정하여 Assign 구문을 사용해야 한다.
ASSIGN ADDR TO <F1> CASTING TYPE line.
이와 같이 CASTING TYPE 구문을 이용해 정해진 타입으로 형변환을 수행하는 것을 명시적 형변환이라고 한다.