본문 바로가기

ABAP 프로그래밍 개념/ABAP 프로그래밍 Concept

ABAP Programming Concept : Internal and External Format of Data & Output Length of Data Types

 Internal and External Format of Data


확인할 수 있듯이, data는 다양한 포맷(형식)으로 표현될 수 있습니다. 만약 당신에게 사용자가 문서를 만들고 각 문에서에 due date를 기입할 수 있게 해달라는 요구사항이 있다고 해봅시다. 사용자가 나중에 보고서를 실행하여 특정 날짜에 제출해야 하는 모든 문서를 가져올 수 있도록 데이터베이스에 이 데이터를 업데이트해야 할 것입니다. 

문서를 만드는 동안, 사용자는 자신의 개인 포맷에 맞는 날짜를 기입하기를 선호할 것입니다. 예를 들어, 두 유저가 있다고 해봅시다. User1, User2는 이 프로그램을 통해 문서를 만들 사용자입니다. User1은 날짜를 MM/DD/YYYY 형식으로 기입할 것이고, User 2는 DD-MM-YYYY로 입력할 것입니다. 두 사용자 모두 총 4개의 문서를 작성했으며 데이터베이스에서 데이터가 업데이트되었다고 가정해봅시다.

문서번호 Due_Date 생성자
100001 01/01/2023 USER1
100002 01/03/2023 USER2
100003 01-01-2023 USER3
100004 03-01-2023 USER4

이제, 당신이 개발하고 싶은 레포트는 due_date를 인풋값으로 받아 특정 날의 맞는 문서를 가져올 수 있고자 합니다. 레포트는 아래 예시와 같은 DB Table에서 데이터를 가져오는 쿼리와 같은 SELECT Statement를 사용할 것입니다.

SELECT Document_Number FROM db_table WHERE Due_Date EQ input_due_date.

여기서는 테이블의 Due_Date 열에 있는 데이터를 사용자가 제공한 날짜와 비교하여 일치하는 모든 문서 번호를 가져옵니다. 보시다시피 사용자가 2023년 01월 01일을 MM/DD/YYYY 형식(2023/01/01)으로 입력하면 SELECT 문은 문서 번호 1001만 가져오고 문서 1003은 무시합니다. 왜냐하면 문서 번호 1001은 주어진 입력과 Character 대 Character가 일치하지 않기 때문입니다. 또한, 만약 입력한 날짜가 DD-MM-YYYY 형식으로(01-01-2023) 입력됬다면, 1003번 문서와 일치하고, 1001번 문서는 무시될 것입니다. 만약 다른 형식으로 날짜를 입력한다면, 어떠한 레코드도 가져오지 못할 것입니다.

내부 & 외부 데이터 포맷(Internal & external data format)은 이러한 문제를 해결해줍니다. 만약 당신이 날짜를 YYYYMMDD의 내부 포맷으로 관리한다면, 당신은 유저가 제공한(사용하는/입력한) 날짜를 내부형식(20230101)로 변환하고 이를 DB 에 저장할 것 입니다. 이러한 방식으로 데이터는 항상성 있게 같은 포맷으로 저장될 것입니다. 유사하게, 당신이 날짜를 유저에게 보여주기 위하여 내부 날짜를 외부 포맷으로 변환함으로서, 유저는 그가 선호하는 포맷으로 데이터를 항상 볼 수 있습니다.

문서번호 Due_Date 생성자
100001 20230101 USER1
100002 20230103 USER2
100003 20230101 USER3
100004 20230103 USER4

 

이제 유저가 레포트에 날짜를 입력할 때, 일치하는 기록을 찾기 위해 DB에 쿼리문을 실행하기 전에 먼저 입력한 날짜를 내부 포맷으로 켠환 할 것입니다. 이것은 항상 유저가 시스템에서  유효한 외부 포맷의 날짜를 입력된 것이라고 한다면 사용자 마다의 개인적 포맷을 입력할 수 있도록 허락해줍니다.


Output Length of Data Types


이전 섹션에서, 날짜의 외부 형식은 두 가지의 구분자(Seperator)로 / 또는 - 을 사용하였습니다. 날짜의 내부 길이는 8 Character이지만, 외부 형식으로는 구분자를 포함하기 위하여 2개의 추가의 Characters를 필요로 합니다. 그러므로 외부 길이는 최소 10자리로는 관리되어야 합니다. 이것은 Data Type의 외부 길이를 결정합니다.

만약 당신이 TYPE i의 data object를  debugger에서 확인한다면, 당신은 그 data object에 할당된 다른 Length와 Output Length를 확인 할 수 있습니다.

보이다 싶이, data object인 f2는 Length 4 bytes의 Type i 입니다. 그러나 Output Length는 11이고 값의 수천개의 구분자를 허용할 수 있게 되어있습니다.

TYPE D의 data object를 같은 방식으로 체크해본다면, 당식은 Length와 Output Legnth가 8 byte로 같은 것을 확인할 수 있습니다.

데이터 개체에 구분 기호를 저장할 공간이 없기 때문에 시스템에서 구분 기호 없이 날짜를 출력한 것을 볼 수 있습니다. 그러므로, 구분자를 무시하면서 외부 형식으로 날짜를 간단히 변환할 수 있습니다. 

각 data type의 output length는 사전에 정의되고, 수동으로 이러한 길이를 바꿀 수 없습니다.

만약, 이러한 내용에 더 통제를 하고 싶다면, 개인의 User-Defined Elementary data type를 만들어서 사용하면 됩니다.

반응형