
구조의 컴포넌트에 액세스하려면 구조 이름과 컴포넌트 이름 사이에 소문자 기호(-)를 배치해야 합니다.
노트
구조 구성요소에 액세스하는 경우 동일한 유형의 변수를 사용할 수 있는 피연산자 위치에서 사용할 수 있습니다. 위의 예에서 구조 연결의 airport_from_id 컴포넌트는 /DMO/AIRPORT_FROM_ID 유형입니다. 따라서 이 컴포넌트는 /DMO/AIRPORT_FROM_ID 유형의 단순 변수를 사용할 수 있는 피연산자 위치에서 사용할 수 있습니다. 예에서와 같이 값 지정의 왼쪽뿐만 아니라 오른쪽에서 메소드 호출의 매개변수 전달, SELECT 문의 INTO 절 또는 WHERE 절 등에서 사용할 수 있습니다.

구조의 컴포넌트 자체가 구조이면 주요 컴포넌트의 이름 뒤에 있는 컴포넌트 선택자를 다시 사용하여 하위 컴포넌트에 액세스합니다. 예제의 첫 번째 값 지정은 MESSAGE의 MSGTY 구성요소에 액세스합니다. MESSAGE는 그 자체가 중첩 구조 CONNECTION_NESTED의 구성요소입니다.
힌트

VALUE #( ) 표현식은 구조화 데이터 오브젝트에 값을 지정할 수 있는 우아한 방법입니다.
전체 구조를 채우려는 경우 이전 예시와 같이 각 컴포넌트를 개별적으로 처리할 수 있습니다.
그러나 VALUE #( ) 표현식을 사용하여 구조를 채울 수도 있습니다. 이 표현식은 구조를 구성하고, 값을 채우고, 채워진 구조를 변수에 지정합니다(이 경우 connection). 파운드 기호(#)는 ABAP 런타임 환경에 대상 변수 connection 와 같은 유형의 구조를 구성하도록 지시한다. 괄호에는 입력할 구조의 컴포넌트를 나열하고(모든 구성품목일 필요는 없음) 여기에 값을 지정합니다.
이러한 방식으로 구조를 채울 경우 런타임 시스템에서 구조의 기존 값을 모두 삭제한 후에 표현식의 값으로 구조를 다시 채웁니다.
노트

ABAP에서는 두 구조 유형이 호환되는 경우에만 <target structure> = <source structure> 표기법을 사용하여 한 구조의 내용을 다른 구조로 직접 복사할 수 있다. 이렇게 하려면 일반적으로 두 구조의 유형이 동일해야 합니다. 구조의 유형이 서로 다르면 두 가지 상황이 발생할 수 있습니다.
- 구조 중 하나가 다른 구조에 문자형 구성요소가 있는 위치에 문자형이 아닌 구성요소가 있는 경우 직접 지정으로 인해 구문 오류가 발생합니다.
- 두 구조가 모두 문자형(char-like), 즉 두 구조가 모두 문자형(char-like) 구성요소로 구성된 경우 기술적으로 직접 지정이 가능합니다. 그러나 일반적으로 결과는 잘못될 것입니다.
이 예에서 소스 구조와 대상 구조는 문자형입니다. 따라서 직접 지정은 기술적으로 가능합니다. 그러나 호환되지 않기 때문에 결과가 잘못되었습니다. 컴포넌트 carrier_name의 컨텐트가 대상 구조의 컴포넌트 message에 복사됩니다.
구문 오류가 없기 때문에 호환되지 않는 문자형 구조로 작업할 때는 각별한 주의가 필요합니다.
구조 간에 데이터를 복사할 때 일반적으로 하나의 필드에서 대상 구조의 해당 필드(airport_from_id - airport_from_id, airport_to_id - airport_to_id 등으로 정보를 복사하려고 합니다. ABAP에서 이 작업을 수행하려면 CORRESPONDING 식을 사용합니다. 이렇게 하면 <source_structure>의 값이 해당 컴포넌트(즉, <target_structure>의 동일한 이름 있는 컴포넌트)에 지정됩니다. 다음 사항을 유념하십시오.
- 필드 이름이 동일해야 합니다.
- 두 구조에서 컴포넌트의 위치 또는 순서가 반드시 같을 필요는 없습니다.
- 필드의 유형이 다르면 ABAP에서는 사전 정의된 규칙 세트에 따라 유형 변환을 시도합니다.
예제의 CORRESPONDING 식은 st_connection_nested 유형의 구조를 생성합니다. connection 구조에서 이름이 같은 컴포넌트의 값이 이 구조에 지정됩니다. 다른 모든 컴포넌트는 초기 상태로 유지됩니다. 이렇게 구성된 구조는 connection_nested 구조에 지정됩니다. 이렇게 하면 message 구성요소에 initial초기 값이 지정됩니다.







