SAP/ABAP 기초

(ABAP) FIELD SYMBOL과 CASTING

haramang 2021. 6. 14. 16:01

출처: http://sapjoy.co.kr/abapqna/8579

 

ABAP QnA - [요청]필드심볼에서 casting구문 관련 질문입니다.

SPAN { font-family: "Courier New"; font-size: 10pt; color: #000000; background: #FFFFFF; } .L1S32 { color: #3399FF; } .L1S52 { color: #0000FF; } types : begin of t_date, year(4) type n, mont...

sapjoy.co.kr

 

 

2-5. 필드심볼과 Casting

데이터 오브젝트를 필드심볼에 Assign 할 경우에, CAST를 이용해 모든 데이터 타입을 필드심볼에 Assign 할 수 있다.

 

CAST 라는 영어 단어를 사전에서 찾아보면 “버리다”, “주조하다”, “<상을> 뜨다” 라는 의미가 포함되어 있다. 이러한 의미를 조합해보면 “나 자신을 버리고 새로운 틀에 맞게 변형을 한다”라고 해석 할 수 있다. 프로그램 용어로 CAST는 암묵적 형변환과 명시적 형변환 2가지로 분류되어 사용된다.

 

필드심볼에서 Casting이 어떠한 역할을 하게 되는지 살펴보자.

 

 

2-5-1. 암묵적 형변환(Implicit Casting)

 

필드 심볼의 데이터 타입이 Fully Type 으로 선언되어 있거나 기본 데이터 타입 -c, n, p, x- 을 사용한 경우에 암묵적 형변환을 사용한다. 즉, 타입이 정해진 필드 심볼과 데이터 오브젝트 타입이 상이한 경우에는 CASTING 구문을 이용하여 Assign 해야 한다.

 

ASSIGN  <var> TO <fs> CASTING.

 

다음 예제는 구조체 타입의 필드 심볼과 CHAR 타입의 변수가 CASTING을 이용해 Assign을 수행하는 경우이다.

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.

<결과>
SEOUL  SEOCHOGU  GANGNAM 713-11

 

2-5-2. 명시적 형변환(Explicit Casting)

 

만약 [예제13-2-4]에서 필드 심볼을 다음과 같이 Generic Type으로 선언한다면, 프로그램이 정상적으로 활성화 될까?

 

 

이 경우에는 다음과 같이 명시적으로 TYPE을 지정하여 Assign 구문을 사용해야 한다.

FIELD-SYMBOLS: <f1> TYPE ANY.
ASSIGN ADDR TO <F1> CASTING TYPE line.

 

이와 같이 CASTING TYPE 구문을 이용해 정해진 타입으로 형변환을 수행하는 것을 명시적 형변환이라고 한다.

 

 

김병철 멘토님께서 주신 코드

FIELD-SYMBOLS: <FS>  TYPE S_TYPE,
               <VAR> TYPE ANY.
DATA : GV_ADDR(30) TYPE C VALUE '000020필병철       01045450012'.

* Implicit Casting
ASSIGN GV_ADDR TO <FS> CASTING.

* Explicit Casting - TYPE 이 ANY로 정의 되었기 때문에 TYPE을 선언해야 함.
ASSIGN GV_ADDR TO <VAR> CASTING TYPE S_TYPE .