ABAP
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
ABAP은 SAP 시스템에서 사용되는 고급 프로그래밍 언어로, 객체 지향 프로그래밍을 지원하며, SAP 애플리케이션 개발에 사용된다. ABAP은 구조적 프로그래밍 언어로 시작하여 객체 지향 언어로 발전했으며, SAP의 애플리케이션 서버인 BASIS를 활용하여 플랫폼 독립적인 개발과 운영을 가능하게 한다. ABAP은 런타임 시스템의 제어 하에 실행되며, ABAP 워크벤치 또는 ABAP 개발 도구를 통해 개발할 수 있다. ABAP은 데이터베이스 테이블, 내부 테이블, 이벤트, 트랜잭션 코드 등 다양한 기능을 제공하며, ABAP CDS를 통해 데이터 모델을 정의하고 효율적인 데이터 접근을 지원한다.
ABAP는 1980년대에 처음 개발된 여러 응용 프로그램별 4세대 언어(4GL) 중 하나이다. 원래는 대기업이 자재 관리, 재무 및 관리 회계를 위한 메인프레임 비즈니스 애플리케이션을 구축할 수 있도록 지원하는 플랫폼인 SAP R/2의 보고서 언어였다.
2. 역사
ABAP는 원래 "일반 보고서 준비 프로세서"를 의미하는 독일어 '''''A'''llgemeiner '''B'''erichts-'''A'''ufbereitungs-'''P'''rozessor''의 약자였지만, 나중에 영어로 '''''A'''dvanced '''B'''usiness '''A'''pplication '''P'''rogramming''으로 이름이 변경되었다. ABAP는 모든 플랫폼, 언어 및 단위를 지원하는 기본 데이터베이스 수준에서 높은 수준의 추상화를 제공하는 ''논리적 데이터베이스''(LDB) 개념을 포함한 최초의 언어 중 하나였다.
ABAP 언어는 원래 개발자가 SAP R/3 플랫폼을 개발하는 데 사용되었다. 또한 SAP 고객이 SAP 애플리케이션을 향상시키는 데 사용될 예정이었으며, 고객은 ABAP 프로그래밍으로 사용자 정의 보고서와 인터페이스를 개발할 수 있었다. 이 언어는 프로그래밍 경험이 있는 더 기술적인 고객을 대상으로 했다.
ABAP는 1992년에 SAP가 처음 출시한 클라이언트-서버 R/3 시스템을 위한 프로그램을 만드는 언어로 남아 있다. 1990년대에 컴퓨터 하드웨어가 발전하면서 SAP의 애플리케이션과 시스템은 점점 더 많이 ABAP로 작성되었다. 2001년까지 가장 기본적인 기능을 제외한 모든 기능이 ABAP로 작성되었다. 1999년 SAP는 R/3 릴리스 4.6과 함께 ABAP의 객체 지향적 확장인 ABAP Objects를 출시했다.
SAP의 현재 개발 플랫폼인 NetWeaver는 ABAP와 Java를 모두 지원한다. ABAP는 비즈니스 애플리케이션, 운영 체제 및 데이터베이스 간의 추상화를 가지고 있어, 애플리케이션은 특정 서버 또는 데이터베이스 플랫폼에 직접 의존하지 않고 한 플랫폼에서 다른 플랫폼으로 쉽게 이식할 수 있다.
SAP Netweaver는 현재 UNIX(AIX, HP-UX, Solaris, Linux), Microsoft Windows, i5/OS on IBM System i (이전 iSeries, AS/400) 및 z/OS on IBM System z (이전 zSeries, S/390)에서 실행된다. 지원되는 데이터베이스는 HANA, SAP ASE (이전 Sybase), IBM Db2, Informix, MaxDB, Oracle 및 Microsoft SQL Server이다(Informix 지원은 SAP Basis 릴리스 7.00에서 중단되었다).[3]
2. 1. 주요 이정표
| 버전 | 릴리스 날짜 | 주요 변경 사항 |
|---|---|---|
| 4.6C | 2000년 5월 | |
| 6.40 | 2004년 | |
| 7.0 | 2006년 | |
| 7.02 | ||
| [http://scn.sap.com/community/abap/blog/2013/07/22/abap-news-for-release-740 7.40] | 2012년 11월 29일 | |
| [https://blogs.sap.com/2014/02/06/abap-news-for-release-740-sp05/ 7.40 SP05] | 2013년 12월 | |
| [https://blogs.sap.com/2014/02/06/abap-news-for-release-740-sp05/ 7.40 SP08] | 2014년 9월 | |
| [https://blogs.sap.com/2015/11/27/abap-language-news-for-release-750/ 7.50] | 2015년 11월 | |
| [https://blogs.sap.com/2016/11/04/abap-news-for-release-7.51/ 7.51] | 2016년 10월 | |
| [https://blogs.sap.com/2017/09/20/abap-news-for-release-7.52-virtual-sorting-of-internal-tables/ 7.52] | 2017년 9월 | |
| [https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abennews-754.htm 7.54] | 2019년 9월 | |
| [https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abennews-755.htm 7.55] | 2020년 9월 | |
| [https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abennews-756.htm 7.56] | 2021년 10월 | |
| [https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abennews-757.htm 7.57] | 2022년 10월 | |
| [https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abennews-758.htm 7.58] | 2023년 10월 |
ABAP은 4세대 언어로, C, C++, JAVA와 같은 3세대 언어보다 자연어에 더 가깝다. SAP사에서 제공하는 ERP 소프트웨어인 SAP R/3 시스템을 회사에 맞게 구축하는 데 사용되는, SAP R/3 기반 언어이다. ABAP 프로그래밍은 데이터베이스를 직접 짜거나 구성 요소를 만드는 것이 아니라, GUI 계층과 응용 프로그램 계층 사이에서 비즈니스 프로세스(Business process)에 따라 사용자가 원하는 기능을 가진 프로그램을 제공하도록 개발하는 것이다.
3. 언어 특징
ABAP는 1980년대에 처음 개발된 여러 응용 프로그램별 4세대 언어(4GL) 중 하나이다. 원래는 대기업이 자재 관리, 재무 및 관리 회계를 위한 메인프레임 비즈니스 애플리케이션을 구축할 수 있도록 지원하는 플랫폼인 SAP R/2의 보고서 언어였다. 처음에는 "일반 보고서 준비 프로세서"를 의미하는 독일어 '''''A'''llgemeiner '''B'''erichts-'''A'''ufbereitungs-'''P'''rozessor''의 약자였지만, 나중에 영어로 '''''A'''dvanced '''B'''usiness '''A'''pplication '''P'''rogramming''(Advanced Business Application Programming영어)으로 이름이 변경되었다.
ABAP 언어는 원래 개발자가 SAP R/3 플랫폼을 개발하는 데 사용되었으며, SAP 고객이 SAP 애플리케이션을 향상시키는 데에도 사용되었다. 고객은 ABAP 프로그래밍으로 사용자 정의 보고서와 인터페이스를 개발할 수 있었다. 1999년 SAP는 R/3 릴리스 4.6과 함께 ABAP의 객체 지향적 확장인 ABAP Objects를 출시했다.
SAP의 현재 개발 플랫폼인 NetWeaver는 ABAP와 Java를 모두 지원한다. ABAP는 비즈니스 애플리케이션, 운영 체제 및 데이터베이스 간의 추상화를 가지고 있어, 애플리케이션이 특정 서버 또는 데이터베이스 플랫폼에 직접 의존하지 않고 한 플랫폼에서 다른 플랫폼으로 쉽게 이식할 수 있다.
SAP Netweaver는 현재 UNIX(AIX, HP-UX, Solaris, Linux), Microsoft Windows, i5/OS on IBM System i (이전 iSeries, AS/400) 및 z/OS on IBM System z (이전 zSeries, S/390)에서 실행된다. 지원되는 데이터베이스는 HANA, SAP ASE (이전 Sybase), IBM Db2, Informix, MaxDB, Oracle 및 Microsoft SQL Server이다.[3]
SAP의 제품에서만 사용되는 SAP 고유의 프로그래밍 언어로, 원래는 구조적 프로그래밍 언어였지만, 후에 객체 지향 언어로 확장되었다.
3. 1. 문법
ABAP의 문법은 구조적인 측면에서 선언, 모듈, 이벤트, 서브루틴으로 나눌 수 있다. 선언부에서는 변수의 자료형이나 참조를 정의한다. Dialog 모듈은 입출력 처리를 담당하고, 이벤트 부분은 실제 프로그램 코딩 부분이며 이벤트의 시작점이다. 서브루틴은 개발자가 정의한 함수를 의미한다. ABAP 프로그램은 실행 가능한 단위이거나 다른 프로그램에 재사용 가능한 코드를 제공하며, 독립적으로 실행할 수 없는 라이브러리이다.
ABAP은 두 가지 유형의 실행 가능한 프로그램을 구분한다.
실행 불가능한 프로그램 유형은 다음과 같다.
ABAP 프로그램은 개별 문장(명령문)으로 구성되며, 첫 번째 단어를 ABAP 키워드라고 한다. 각 명령문은 마침표로 끝나고, 단어는 하나 이상의 공백으로 구분해야 한다. 명령문은 원하는 대로 들여 쓸 수 있으며, 키워드, 추가 기능 및 피연산자는 대소문자를 구분하지 않는다.
명령문은 한 줄 이상으로 확장될 수 있고, 한 줄에 여러 명령문을 넣을 수 있지만 권장하지 않는다. 첫 번째 열에 별표(*)로 시작하는 줄은 주석 줄로 인식되어 무시되며, 큰따옴표(")는 줄의 나머지 부분이 주석임을 나타낸다.
간단한 ABAP 구문 예시는 다음과 같다.
```abap
REPORT TEST.
WRITE 'Hello, World!'.
```
이 예제는 `REPORT`와 `WRITE` 두 개의 구문을 포함하며, 화면에 "Hello, World!"라는 한 줄을 표시한다. `REPORT` 구문은 이 프로그램이 리포트임을 나타낸다. `PROGRAM`으로 바꾸면 모듈 풀이 될 수도 있다.
동일한 첫 부분을 가진 연속된 구문은 체인 연산자 `(:)`를 사용하여 "체인" 구문으로 결합할 수 있다.
```abap
WRITE: FLIGHTINFO-CITYFROM, FLIGHTINFO-CITYTO, FLIGHTINFO-AIRPTO.
```
ABAP에는 텍스트를 주석으로 정의하는 두 가지 방법이 있다.
ABAP 코드는 공백에 민감하다.
```abap
x = a+b(c).
```
는 변수 x에 변수 a의 부분 문자열을 할당하며, 시작 위치는 b이고 길이는 변수 c로 정의된다.
```abap
x = a + b( c ).
```
는 변수 x에 변수 a와 매개변수 c를 사용하여 메서드 b를 호출한 결과의 합계를 할당한다.
C/C++ 또는 Java와 같은 언어와 달리, ABAP은 언어별로 제한된 수의 구문을 정의하고 라이브러리를 통해 대부분의 기능을 제공하는 반면, ABAP은 광범위한 내장 구문을 포함하고 있다.[7]
구문 기반 구문(구문은 COBOL에서 유래)과 표현식 기반 구문(C/Java와 같음)의 예:
```abap
ADD TAX TO PRICE.
PRICE = PRICE + TAX .
```
문의 종료 기호는 "."(마침표)이다. IF문의 등가 판단은 "="이다.
3. 2. 데이터 타입
ABAP은 일련의 내장 데이터 타입을 제공한다. ABAP 딕셔너리에 정의된 모든 구조, 테이블, 뷰 또는 데이터 요소를 변수 타입으로 사용할 수 있으며, 객체 클래스와 인터페이스도 타입으로 사용할 수 있다.
내장 데이터 타입은 다음과 같다.
| 유형 | 설명 |
|---|---|
| I | 정수 |
| P | 팩형 십진수 |
| F | 부동 소수점 |
| N | 문자 숫자 |
| C | 문자 |
| D | 날짜 |
| T | 시간 |
| X | 16진수(원시 바이트) |
| STRING | 가변 길이 문자열 |
| XSTRING | 가변 길이 원시 바이트 배열 |
날짜 변수 또는 상수(유형 D)는 서기 1년 1월 1일 이후의 날짜 수를 포함하며, 시간 변수 또는 상수(유형 T)는 자정 이후의 초 수를 포함한다. 두 유형은 정수와 문자열(날짜의 경우 "YYYYMMDD", 시간의 경우 "hhmmss" 내부 형식)로 모두 접근할 수 있어 날짜 및 시간 처리에 사용할 수 있다는 특징이 있다. 예를 들어, 다음 코드는 이전 달의 마지막 날을 계산한다. (참고: SY-DATUM은 현재 날짜를 포함하는 시스템 정의 변수이다.)
```ABAP
DATA LAST_EOM TYPE D. "마지막 월말 날짜
- 오늘 날짜부터 시작
LAST_EOM = SY-DATUM.
- YYYYMMDD 문자열의 문자 6 및 7(0부터 시작)을 "01"로 설정.
- 현재 달의 첫 번째 날을 제공.
LAST_EOM+6(2) = '01'.
- 하루를 뺌.
LAST_EOM = LAST_EOM - 1.
WRITE: '이전 달의 마지막 날은', LAST_EOM.
```
모든 ABAP 변수는 사용하기 위해 명시적으로 선언해야 한다. 개별 문과 명시적 유형 지정을 사용하여 선언하거나, ABAP 7.40부터 추론된 유형 지정을 사용하여 인라인으로 선언할 수 있다.[8]
일반적으로 모든 선언은 첫 번째 실행문 앞에 코드 모듈(프로그램, 서브루틴, 함수)의 맨 위에 위치한다. 이 배치는 규칙이며 강제적인 구문 규칙은 아니다. 선언은 이름, 유형, 길이(해당하는 경우), 추가 수정자(예: 팩형 십진수 필드의 암시적 소수점 자릿수) 및 선택적으로 초기값으로 구성된다.
```ABAP
- 기본 유형:
DATA: COUNTER TYPE I,
VALIDITY TYPE I VALUE 60,
TAXRATE(3) TYPE P DECIMALS 1,
LASTNAME(20) TYPE C,
DESCRIPTION TYPE STRING.
- 사전 유형:
DATA: ORIGIN TYPE COUNTRY.
- 내부 테이블:
DATA: T_FLIGHTS TYPE TABLE OF FLIGHTINFO,
T_LOOKUP TYPE HASHED TABLE OF FLT_LOOKUP.
- 객체:
DATA: BOOKING TYPE REF TO CL_FLT_BOOKING.
```
연속적인 DATA 문을 함께 연결하기 위해 콜론을 사용하는 것에 주목해야 한다.
ABAP 7.40부터[8] 다음과 같은 구문을 사용하여 변수를 인라인으로 선언할 수 있다.
```ABAP
DATA(variable_name) = 'VALUE'.
```
이러한 유형의 선언에서는 메서드 시그니처 또는 데이터베이스 테이블 구조를 통해 유형을 정적으로 추론할 수 있어야 한다.
변수는 다음과 같은 방법으로 선언할 수 있다.
```ABAP
DATA: 변수명 TYPE 타입명 [LENGTH 길이].
```
상수는 다음과 같은 방법으로 선언할 수 있다.
```ABAP
CONSTANTS : 상수_이름 TYPE 타입명 VALUE {값|IS INITIAL}.
3. 3. 내부 테이블 (Internal Table)
내부 테이블은 ABAP 언어의 중요한 기능으로, 작업 메모리에 고정된 구조의 가변 데이터 집합을 저장하는 방법이며 동적 배열의 기능을 제공한다. 데이터는 행 단위로 저장되며, 각 행은 동일한 구조를 갖는다. C++의 ''struct'' 벡터 또는 Java의 객체 벡터와 유사하게 정의되지만, ABAP은 내부 테이블의 내용을 쉽게 접근하고 조작할 수 있는 일련의 구문을 제공한다는 주요 차이점이 있다. ABAP은 배열을 지원하지 않으며, 여러 요소의 데이터 객체를 정의하는 유일한 방법은 내부 테이블을 사용하는 것이다.[1]내부 테이블은 주로 프로그램 내에서 데이터베이스 테이블의 내용을 저장하고 형식화하는 데 사용된다. 또한 구조체와 함께 내부 테이블은 ABAP 프로그램에서 복잡한 데이터 구조를 정의하는 중요한 수단이다.
다음은 데이터베이스 테이블 VBRK의 형식으로 두 개의 필드가 있는 내부 테이블을 정의하는 예제이다.
```abap
- 먼저 구조화된 유형 정의
TYPES: BEGIN OF t_vbrk,
VBELN TYPE VBRK-VBELN,
ZUONR TYPE VBRK-ZUONR,
END OF t_vbrk.
- 이제 정의된 유형 t_vbrk의 내부 테이블 정의
DATA : gt_vbrk TYPE STANDARD TABLE OF t_vbrk,
gt_vbrk_2 TYPE STANDARD TABLE OF t_vbrk. "더 많은 테이블을 쉽게 정의할 수 있습니다.
- 필요하면 구조체 정의 (내부 테이블의 행)
- 유형 또는 내부 테이블에 대한 참조로 정의:
DATA : gs_vbrk TYPE t_vbrk,
gs_vbrk_2 LIKE LINE OF gt_vbrk_2.
- 필요하면 테이블 유형도 정의할 수 있습니다.
TYPES tt_vbrk TYPE STANDARD TABLE OF t_vbrk.
```
ABAP 프로그램 내에서 테이블과 유사한 2차원 배열 데이터 구조를 가지며, 주로 테이블, 로컬 파일, 서버 파일 등 외부 데이터를 가져올 때 저장 위치로 사용된다. 정의, 데이터 저장, 사용, 변경, 삭제는 ABAP 프로그램에서만 실행할 수 있다.
내부 테이블에는 다음과 같은 세 가지 종류가 있다.
- 표준 테이블 (Standard Table): 기본 테이블 인덱스로 내부적으로 관리되며, 기본 테이블 키(기본 키)를 고유하게 가지지 않는다.
- 정렬 테이블 (Sorted Table): 기본 테이블 인덱스로 내부적으로 관리되며 항상 기본 키에 따라 정렬된다.
- 해시 테이블 (Hashed Table): 행이 해시 알고리즘에 따라 내부에 저장되고, 고유한 해시 키(해시 테이블에서의 기본 키)를 사용하여 접근할 수 있다.
각 내부 테이블의 특징은 다음 표와 같다.
| 테이블 명 | 접근 방법 | 기본 키로의 접근 시 응답 시간 | 기타 |
|---|---|---|---|
| 표준 테이블 (Standard Table) | ・ 기본 테이블 인덱스 | 테이블 내 엔트리 수에 비례 (선형 검색) | ・ 기본 키가 비고유(Non-Unique)만 가능 |
| 정렬 테이블 (Sorted Table) | ・ 기본 테이블 인덱스 | 테이블 내 엔트리 수에 대수적으로 비례 | ・ 기본 키는 고유, 비고유 모두 사용 가능 |
| 해시 테이블 (Hashed Table) | ・ 테이블 키(기본・보조) | 항상 일정 (테이블 내 엔트리 수에 영향을 받지 않음) | ・ 기본 테이블 인덱스가 존재하지 않음 |
3. 4. 이벤트 (Event)
ABAP에서는 각 처리에 대해 이벤트를 사용하며, ABAP 언어로 처리를 수행한다.레포트 프로그램을 작성하는 경우에는 다음과 같은 이벤트가 있다.
- INITIALIZATION: 초기 설정을 기술한다.
- AT SELECTION-SCREEN: 화면 등에서 입력된 결과에 대한 처리를 기술한다.
- START-OF-SELECTION: 주 처리를 기술한다.
- END-OF-SELECTION ('''폐지됨'''): 처리 결과를 표시, 출력한다.
4. ABAP 개발 환경
ABAP은 SAP사에서 제공하는 ERP 소프트웨어인 SAP R/3 시스템을 회사에 맞게 구축하는 데 쓰이는 SAP R/3 기반의 언어이다. ABAP 프로그래밍은 GUI 계층과 응용 프로그램 계층 사이에서 비즈니스 프로세스에 따라 사용자가 원하는 기능을 가진 프로그램을 제공하도록 개발하는 것이다. 구조적인 측면에서 ABAP은 선언, 모듈, 이벤트, 서브루틴으로 나눌 수 있다. ABAP 프로그램의 기본적인 흐름은 프로그램을 시작하고, 초기화한 뒤, 개발자가 구성한 입력 조건 화면을 생성한다. 이후 사용자가 검색하고자 하는 조건을 입력하면, 개발자가 검색 내용에 알맞은 내용을 데이터베이스에서 검색하여 사용자가 볼 수 있도록 출력한다.
ABAP 개발 도구는 다음과 같다.
- ABAP Editor(SE38): 소스 편집 도구로, 프로그램을 생성, 수정, 조회, 속성 정의를 할 수 있다.
- ABAP Dictionary(SE11): 테이블, 자료형 등을 정의하고 수정, 삭제할 수 있는 도구이다.
- Screen Painter(SE51): 사용자 대화 상자 화면을 만드는 도구이다.
- Menu Painter(SE41): 대화 상자를 꾸미는 도구이다.
- Function Builder(SE37): function 모듈을 생성, 수정, 삭제하는 도구이다.
- Class Builder(SE24): global 클래스와 인터페이스를 유지하는 도구이다.
- '''Object Navigator(SE80)''': 위의 모든 것을 사용할 수 있는 만능 도구이다.
4. 1. ABAP 워크벤치 (ABAP Workbench)
ABAP 워크벤치는 ABAP 시스템의 일부이며 SAP GUI를 통해 접근할 수 있다. 여기에는 프로그램을 편집하기 위한 다양한 도구가 포함되어 있다. 이 중 가장 중요한 것은 다음과 같다(트랜잭션 코드는 괄호 안에 표시됨).[6]| 도구 | 설명 | 트랜잭션 코드 |
|---|---|---|
| ABAP 에디터 | 보고서, 모듈 풀, 인클루드 및 서브루틴 풀을 작성하고 편집 | SE38 |
| ABAP 사전 | 데이터베이스 테이블 정의를 처리하고 전역 유형을 검색 | SE11 |
| 메뉴 페인터 | 사용자 인터페이스(메뉴 모음, 표준 툴바, 애플리케이션 툴바, 기능 키 할당)를 디자인 | SE41 |
| 화면 페인터 | 화면과 흐름 로직을 디자인 | SE51 |
| 펑션 빌더 | 펑션 모듈 | SE37 |
| 클래스 빌더 | ABAP 오브젝트 클래스와 인터페이스 | SE24 |
오브젝트 내비게이터(트랜잭션 SE80)는 이러한 다양한 도구에 대한 단일 통합 인터페이스를 제공한다.[6]
ABAP 개발 도구(ADT), 정식 명칭 "이클립스 기반 ABAP"는 ABAP 객체를 개발하기 위한 이클립스 IDE용 플러그인 세트이다.[6]
이 시나리오에서 ABAP 개발자는 필요한 도구를 자신의 컴퓨터에 설치하고 로컬에서 작업하며, 백엔드와 지속적인 동기화를 수행한다.[6]
4. 2. ABAP 개발 도구 (ABAP Development Tools, ADT)
'''ABAP 개발 도구'''('''ADT''', 정식 명칭 "이클립스 기반 ABAP")는 ABAP 객체 개발을 위한 이클립스 IDE용 플러그인 세트이다.[6]이 시나리오에서 ABAP 개발자는 필요한 도구를 자신의 컴퓨터에 설치하고 로컬에서 작업하며, 백엔드와 지속적인 동기화를 수행한다.
5. ABAP 딕셔너리 (ABAP Dictionary)
ABAP 딕셔너리는 SAP 시스템의 모든 데이터에 대한 정보(메타데이터)를 포함하며, ABAP 워크벤치와 밀접하게 연결되어 있다. 데이터(예: 테이블, 뷰, 데이터 유형)에 대한 모든 참조는 딕셔너리에서 가져온다. 개발자는 ABAP 딕셔너리 트랜잭션(SE80 오브젝트 탐색기 또는 직접)을 통해 이 메타데이터를 표시하고 관리한다.
딕셔너리 객체가 변경되면, 이를 참조하는 프로그램은 다음에 실행될 때 자동으로 새 버전을 참조한다. ABAP는 인터프리터 방식이므로, 변경된 딕셔너리 객체를 참조하는 프로그램을 다시 컴파일할 필요가 없다.
5. 1. 주요 객체 유형
ABAP 딕셔너리는 SAP 시스템의 모든 메타데이터를 포함하며, ABAP 워크벤치와 밀접하게 연결되어 있다. 개발자는 ABAP 딕셔너리 트랜잭션(SE80 오브젝트 탐색기 또는 직접)을 통해 데이터를 표시하고 관리한다. 딕셔너리 객체가 변경되면, 참조하는 프로그램은 다음에 실행될 때 자동으로 새 버전을 참조한다.주요 딕셔너리 객체 유형은 다음과 같다.
- 테이블: 데이터베이스에 존재하는 데이터 컨테이너이다.
- 대부분 ABAP 딕셔너리의 테이블 정의와 데이터베이스의 동일한 테이블 정의는 1:1 관계를 가진다("투명" 테이블).
- "풀" 테이블과 "클러스터" 테이블, 두 가지 유형의 비투명 테이블도 존재한다.
- "풀" 테이블: ABAP 딕셔너리에서 독립적인 개체로 존재하지만, 데이터베이스 수준에서 큰 물리적 테이블("풀")로 그룹화된다. 주로 구성 데이터를 저장하는 작은 테이블이다.
- "클러스터" 테이블: 기본 키를 기반으로 "클러스터"로 물리적으로 그룹화된다. 성능 개선을 위해 설계되었으며, 일부 관계형 데이터베이스 시스템에서는 기본 기능으로 존재한다.
- 인덱스: 자주 사용되는 선택 조건에 대한 테이블 데이터 접근을 가속화한다.
- 모든 SAP 테이블에는 기본 키 고유성을 적용하는 "기본 인덱스"가 암묵적으로 생성된다.
- 추가 인덱스(고유 또는 비고유)를 정의할 수 있으며, 이를 "보조 인덱스"라고 한다.
- 뷰: 하나 이상의 테이블에서 열(및/또는 행)의 하위 집합을 정의한다(조인 조건을 사용하여). 가상 테이블이므로 많은 공간을 차지하지 않는다.
- 구조: 여러 필드로 구성된 복잡한 데이터 유형이다. (C/C++의 `struct`와 유사).
- 데이터 요소: 테이블 또는 구조 필드에 대한 의미적 내용을 제공한다.
- 도메인: 데이터 요소의 구조적 특성을 정의한다. 가능한 값 목록을 제공하여 의미적 내용을 전달할 수도 있다.
- 검색 도움말: 사용자가 데이터 필드에 대한 가능한 값을 보려는 경우 고급 검색 전략을 제공한다. ("매치코드"의 후속 항목)
- 잠금 객체: 데이터를 변경할 때 애플리케이션 수준 잠금을 구현한다.
SAP R/3에서는 "테이블"이라고 불리는 데이터베이스 시스템을 사용한다. 테이블에는 "표준 테이블"과 "애드온 테이블" 두 종류가 있다.
- 표준 테이블: SAP R/3 및 S/4HANA에 표준으로 구현된 테이블.
- 애드온 테이블: 고객의 독자적인 요건 실현 등을 위해 엔지니어 또는 컨설턴트가 나중에 추가(애드온)하여 생성하는 테이블.
ABAP에서는 테이블에서 데이터를 가져오고 삽입 및 삭제할 때, SQL과 유사한 "ABAP SQL(구: OPEN SQL)" 및 특정 데이터베이스에 의존하는 "네이티브 SQL"을 사용할 수 있다.
S/4HANA가 주류가 되고, SAP HANA가 플랫폼이 되면서, 사용 가능한 데이터베이스 시스템이 제한되고 데이터베이스 응답 시간이 단축되었다. ABAP SQL의 기능 확장으로, 특정 데이터베이스에 의존하는 방식으로 데이터를 가져오고 조작하는 사례는 감소하고 있다.
6. ABAP Objects
ABAP 언어는 "ABAP Objects"라는 기능을 통해 객체 지향 프로그래밍을 지원하며[9], 이는 애플리케이션을 단순화하고 더 제어 가능하게 만드는 데 도움이 된다.
ABAP Objects는 기존 언어와 완벽하게 호환된다. 따라서 ABAP Objects를 사용하는 프로그램에서 기존의 구문 및 모듈화 단위를 사용할 수 있으며, 기존 ABAP 프로그램에서도 ABAP Objects를 사용할 수 있다. 다만, ABAP Objects 프로그램에서는 구문 검사가 더 강력하며, 특정 구문의 일부 형식(일반적으로 오래된 것)은 허용되지 않는다.
객체는 각 동작에 문자를 결합하는 캡슐을 형성한다. 객체를 통해 프로그래머는 실제 문제와 제안된 소프트웨어 솔루션을 일대일로 매핑할 수 있다. 비즈니스 환경의 일반적인 객체로는 '고객', '주문', '송장' 등이 있다. 릴리스 3.1부터 SAP Web Application Server ABAP의 BOR(Business Object Repository)에는 이러한 객체의 예가 포함되어 있다. BOR 객체 모델은 BOR 객체 유형을 ABAP 클래스 라이브러리로 마이그레이션하여 다음 릴리스에서 ABAP Objects에 통합될 예정이다.
객체 지향 전체에 대한 포괄적인 소개는 이 문서의 범위를 벗어난다. 여기서는 객체 지향에서 보편적으로 사용되고 ABAP Objects에서도 나타나는 용어를 간략하게 소개한다. 이어지는 섹션에서는 이러한 용어가 ABAP Objects에서 어떻게 사용되는지 자세히 설명한다.
6. 1. 주요 개념
ABAP 언어는 "ABAP Objects"를 통해 객체 지향 프로그래밍을 지원한다.[9] ABAP Objects는 기존 언어와 완벽하게 호환되므로, ABAP Objects를 사용하는 프로그램과 기존 ABAP 프로그램 모두에서 서로의 기능(구문 및 모듈화 단위)을 사용할 수 있다. 단, ABAP Objects 프로그램에서는 구문 검사가 더 엄격하며, 일부 오래된 구문 형식은 허용되지 않는다.객체는 데이터(속성)와 기능(메서드)을 결합하여 캡슐을 형성한다. 이를 통해 실제 문제와 소프트웨어 솔루션을 일대일로 매핑할 수 있다. 예를 들어, '고객', '주문', '송장'과 같은 비즈니스 객체가 있다.
- '''객체'''는 클래스의 인스턴스이다. 객체는 데이터를 포함하고, 메서드를 통해 서비스를 제공한다. 메서드는 객체의 데이터(속성)에 대해서만 작동하며, 객체의 속성은 사용자가 직접 변경할 수 없고 메서드를 통해서만 변경할 수 있다.
- '''클래스'''는 객체를 설명한다. 객체는 클래스의 런타임 인스턴스이며, 하나의 클래스를 기반으로 여러 객체를 만들 수 있다. 각 객체는 고유한 ID와 속성 값을 갖는다.
- '''객체 참조'''는 프로그램에서 객체를 식별하고 가리키는 데 사용되는 고유한 주소이다. 객체 참조를 통해 객체의 속성 및 메서드에 접근할 수 있다.
객체 지향 프로그래밍에서 객체는 일반적으로 다음과 같은 특징을 갖는다.
- '''캡슐화''' – 객체는 속성과 메서드의 가시성을 제한한다. 객체의 구현은 외부에서 보이지 않게 캡슐화된다.
- '''상속''' – 기존 클래스(슈퍼클래스)를 기반으로 새로운 클래스(파생 클래스)를 만들 수 있다. 파생 클래스는 슈퍼클래스의 데이터와 메서드를 상속받고, 기존 메서드를 덮어쓰거나 새로운 메서드를 추가할 수 있다.
- '''다형성''' – 같은 이름의 메서드가 다른 클래스에서 다르게 동작한다. ABAP Objects에서 다형성은 상속 중 메서드 재정의 및 인터페이스를 통해 구현된다.
7. CDS 뷰 (Core Data Services Views)
ABAP 코어 데이터 서비스(ABAP CDS)는 개발자가 애플리케이션 서버의 중앙 데이터베이스에 의미 있는 데이터 모델을 정의할 수 있게 해준다. 이러한 모델은 데이터베이스 시스템과 독립적으로 정의되며, ABAP 딕셔너리에 정의된 기존 데이터베이스 테이블 및 뷰보다 향상된 접근 기능을 제공한다. 특히, SAP HANA 데이터베이스를 사용할 때 그 장점이 두드러진다.[10]
데이터 모델은 ABAP CDS 구문에서 데이터 정의 언어(DDL) 및 데이터 제어 언어(DCL)를 사용하여 정의된다. 정의된 개체는 ABAP 딕셔너리에 통합되어 관리된다. CDS 소스 코드는 이클립스 기반 ABAP 개발 도구(ADT)에서만 프로그래밍할 수 있으며, DDL과 DCL은 서로 다른 편집기를 사용한다.[10]
7. 1. 특징
ABAP 코어 데이터 서비스(ABAP CDS)는 AS ABAP의 일반적인 CDS 개념 구현이다. ABAP CDS를 사용하면 애플리케이션 서버의 중앙 데이터베이스에서 의미 있는 데이터 모델을 정의할 수 있다. AS ABAP에서 이러한 모델은 데이터베이스 시스템과 독립적으로 정의할 수 있으며, ABAP 딕셔너리에 정의된 기존 데이터베이스 테이블 및 뷰와 비교하여 향상된 접근 기능을 제공하여 Open SQL 기반 애플리케이션을 최적화할 수 있다. 이는 AS ABAP이 SAP HANA 데이터베이스를 사용할 때 특히 명확하며, SAP HANA의 메모리 내 특성을 최적의 방식으로 구현할 수 있기 때문이다.[10]데이터 모델은 ABAP CDS 구문에서 ABAP CDS에 제공된 데이터 정의 언어(DDL) 및 데이터 제어 언어(DCL)를 사용하여 정의된다. 이러한 언어를 사용하여 정의된 개체는 ABAP 딕셔너리에 통합되어 관리된다.[10]
CDS 소스 코드는 Eclipse 기반 ABAP 개발 도구(ADT)에서만 프로그래밍할 수 있으며, 데이터 정의 언어(DDL)와 데이터 제어 언어(DCL)는 서로 다른 편집기를 사용한다.[10]
다음은 SAP NetWeaver ABAP 버전별 특징을 나타내는 표이다.
| SAP NetWeaver ABAP | SQL 조인 | SQL 집합 연산 | SELECT 절 |
|---|---|---|---|
| 7.40 SP05 | | | | | |
| 7.40 SP08 | |||
| 7.50 | |||
| 7.51 | | | | |
| SAP NetWeaver ABAP | 리터럴 | 산술 연산자 | 조건식 |
|---|---|---|---|
| 7.40 SP05 | | | | | |
| 7.40 SP08 | | | | | |
| 7.50 | |||
| 7.51 |
| SAP NetWeaver ABAP | 집계 함수 | 숫자 함수 | 문자열 함수 |
|---|---|---|---|
| 7.40 SP05 | | | | | |
| 7.40 SP08 | | | ||
| 7.50 | |||
| 7.51 | | | | |
| SAP NetWeaver ABAP | 바이트 문자열 함수 | 날짜 및 시간 함수 | 기타 함수 |
|---|---|---|---|
| 7.40 SP05 | |||
| 7.40 SP08 | |||
| 7.50 | | | | | |
| 7.51 | | |
| SAP NetWeaver ABAP | 조건(CASE) 표현식 | 확장성 | (관리되지 않는) 연관 |
|---|---|---|---|
| 7.40 SP05 | | | | | |
| 7.40 SP08 | | | | | |
| 7.50 | | | | | |
| 7.51 | | | | |
| SAP NetWeaver ABAP | 세션 변수 | 입력 매개변수 | 기타 |
|---|---|---|---|
| 7.40 SP05 | |||
| 7.40 SP08 | | | ||
| 7.50 | | | | | |
| 7.51 | | | | |
8. 트랜잭션 코드 (Transaction Code)
SAP 시스템에서 ABAP 코드를 실행하는 일반적인 방법은 트랜잭션 코드(예: VA01은 "판매 주문 생성"에 대한 트랜잭션 코드)를 입력하는 것이다. 트랜잭션은 시스템 정의 또는 사용자별, 역할 기반 메뉴를 통해 호출할 수 있다. 또한 모든 SAP 화면에 있는 명령 필드에 트랜잭션 코드를 직접 입력하여 시작할 수도 있다. ABAP 문 `CALL TRANSACTION` 및 `LEAVE TO TRANSACTION`을 사용하여 프로그래밍 방식으로 트랜잭션을 호출할 수도 있다.[1]
트랜잭션의 일반적인 개념은 SAP 용어에서 논리적 작업 단위(LUW)라고 한다.[1] SAP에서는 EASY ACCESS나 IMG 외에도 각 처리 화면으로 이동하는 방법으로 트랜잭션 코드가 존재한다.[1]
8. 1. 주요 트랜잭션 코드
ABAP 개발에 사용되는 주요 트랜잭션 코드는 다음과 같다.| 코드 | 설명 |
|---|---|
| SE09 | 전송 오거나이저 |
| SE11 | 테이블이나 데이터 엘리먼트 등의 추가/조회 |
| SE24 | 클래스 생성/조회 |
| SE37 | 범용 모듈 생성/조회 |
| SE38 | 프로그램 생성 |
| SE80 | 오브젝트 내비게이터 |
| SE81 | 어플리케이션 계층 |
| SE84 | 리포지토리 정보 시스템 |
| SE91 | 메시지 |
| SE93 | 트랜잭션 코드 생성/조회 |
9. ABAP 런타임 환경 (ABAP Runtime Environment)
ABAP 프로그램은 SAP 데이터베이스 내에 존재하며, 별도의 외부 파일에 저장되지 않는다. 데이터베이스에서 ABAP 코드는 ABAP 워크벤치 도구로 보고 편집할 수 있는 소스 코드와, 자바 바이트코드와 유사한 바이너리 표현인 생성된 코드의 두 가지 형태로 존재한다.[3]
ABAP 프로그램은 SAP 커널의 일부인 런타임 시스템의 제어 하에 실행된다. 런타임 시스템은 ABAP 문을 처리하고, 화면의 흐름 로직을 제어하며, 사용자의 화면 버튼 클릭과 같은 이벤트에 응답한다. 이는 자바 VM과 유사한 가상 머신으로 볼 수 있다.[3]
ABAP 런타임 시스템의 핵심 구성 요소는 데이터베이스 인터페이스이며, 데이터베이스 독립적인 ABAP 문("Open SQL")을 기본 DBMS("Native SQL")가 이해하는 문으로 변환한다. 데이터베이스 인터페이스는 ABAP 프로그램을 대신하여 관계형 데이터베이스와의 모든 통신을 처리하며, 응용 프로그램 서버의 로컬 메모리에서 테이블 및 자주 액세스하는 데이터의 버퍼링과 같은 추가 기능도 포함한다.[3]
9. 1. SAP 시스템 및 랜드스케이프
SAP 시스템은 중앙 관계형 데이터베이스와 이 데이터베이스의 데이터 및 프로그램에 접근하는 하나 이상의 애플리케이션 서버("인스턴스")로 구성된다. SAP 시스템은 최소 하나의 인스턴스를 포함하며, 크기 조정 및 성능상의 이유로 더 많은 인스턴스를 포함할 수 있다. 여러 인스턴스가 있는 시스템에서는 로드 밸런싱 메커니즘을 통해 사용 가능한 애플리케이션 서버 전체에 로드가 균등하게 분산된다.웹 애플리케이션 서버( ''랜드스케이프'') 설치는 일반적으로 개발, 테스트 및 품질 보증, 프로덕션용의 세 가지 시스템으로 구성된다. 랜드스케이프는 더 많은 시스템(예: 단위 테스트 및 사전 프로덕션 테스트를 위한 별도 시스템)을 포함하거나 더 적은 시스템(예: 별도의 QA 없이 개발 및 프로덕션만)을 포함할 수 있지만, 세 개로 구성하는 것이 가장 일반적이다. ABAP 프로그램은 개발 시스템에서 생성되어 첫 번째 테스트를 거친 후, 랜드스케이프의 다른 시스템으로 배포된다. 이러한 작업은 동시성 제어(예: 두 명의 개발자가 동시에 동일한 코드를 변경하는 것을 방지), 버전 관리, QA 및 프로덕션 시스템에서 프로그램 배포를 담당하는 변경 및 전송 시스템(CTS)의 제어하에 이루어진다.
웹 애플리케이션 서버는 데이터베이스 계층, 애플리케이션 계층, 프레젠테이션 계층의 세 계층으로 구성된다. 이 계층은 동일하거나 다른 물리적 머신에서 실행될 수 있다. ''데이터베이스 계층''에는 관계형 데이터베이스와 데이터베이스 소프트웨어가 포함된다. '애플리케이션 계층'에는 시스템의 인스턴스가 포함된다. 비즈니스 트랜잭션 및 ABAP 개발을 포함한 모든 애플리케이션 프로세스는 애플리케이션 계층에서 실행된다. ''프레젠테이션 계층''은 시스템 사용자와의 상호 작용을 처리한다. ABAP 애플리케이션 서버에 대한 온라인 액세스는 "SAP GUI"라고 하는 독점 그래픽 인터페이스 또는 웹 브라우저를 통해 가능하다.
9. 2. 소프트웨어 계층
ABAP 소프트웨어는 소프트웨어 컴포넌트 형태로 배포된다. 다음은 그 예시이다.- '''SAP_BASIS''': 모든 ABAP 시스템에 필요한 기술 기반 계층이다.
- '''SAP_ABA''': 비즈니스 파트너 및 주소 관리와 같은 모든 종류의 비즈니스 애플리케이션에 필요한 기능을 포함한다.
- '''SAP_UI''': SAP UI5 애플리케이션을 생성하는 기능을 제공한다.
- '''BBPCRM''': 비즈니스 애플리케이션의 예시이며, 이 경우 CRM 애플리케이션이다.
SAP의 제품에서만 사용되는 SAP 고유의 프로그래밍 언어이다. 원래는 구조적 프로그래밍 언어였지만, 후에 객체 지향 언어로 확장되었다.
SAP 애플리케이션군은 ABAP을 개발 언어로 사용하고, BASIS(SAP NetWeaver)를 애플리케이션 서버로 이용하여 특정 운영 체제나 데이터베이스 관리 시스템 등의 플랫폼에 의존하지 않고 개발, 운영할 수 있다. 또한, ABAP을 SAP 애플리케이션 개발에 채택함으로써 Java나 .NET C# 등 다른 IT 벤더가 제공하는 프로그래밍 언어를 사용하는 경우에 비해 언어 사양의 변경이나 런타임 업데이트의 영향을 받지 않고, 자사에서 릴리스 및 업그레이드 사이클을 제어할 수 있는 장점이 있다.
10. 헬로 월드 프로그램 (Hello World Program)
abap
REPORT TEST.
WRITE 'Hello World'.
```
ABAP 프로그램은 다른 프로그래밍 언어와 마찬가지로 실행 가능한 단위이거나 다른 프로그램에 재사용 가능한 코드를 제공하며 독립적으로 실행할 수 없는 라이브러리이다.
이 예제는 두 개의 구문, `REPORT`와 `WRITE`를 포함한다. 이 프로그램은 화면에 목록을 표시한다. 이 경우 목록은 "Hello, World!"라는 한 줄로 구성된다. `REPORT` 구문은 이 프로그램이 리포트임을 나타낸다. 이 프로그램은 `REPORT` 구문을 `PROGRAM`으로 바꾸면 모듈 풀이 될 수도 있다.
참조
[1]
웹사이트
Changes in Releases 7.5x
https://help.sap.com[...]
2024-09-03
[2]
웹사이트
'"ABAP History". SAP-technical.com'
http://www.sap-techn[...]
2024-12-07
[3]
웹사이트
Product Availability Matrix - PAMs
http://scn.sap.com/d[...]
2024-09-03
[4]
웹사이트
List of Transaction codes
https://help.sap.com[...]
2023-09-09
[5]
웹사이트
Full List of Transaction codes in S4/HANA - docsfortec.com
https://docsfortec.c[...]
2024-05-14
[6]
웹사이트
Get Started with the ABAP Development Tools for SAP NetWeaver | SAP Blogs
http://scn.sap.com/d[...]
2015-06-15
[7]
웹사이트
Example of an ABAP program with many expressions
http://help.sap.com/[...]
2015-06-19
[8]
웹사이트
DATA - Inline Declaration
https://help.sap.com[...]
[9]
간행물
SAP NetWeaver 7.0
2009-08-10
[10]
웹사이트
ABAP Keyword Documentation
https://help.sap.com[...]
2019-07-11
[11]
웹사이트
Core Data Services (CDS) ABAP Feature Matrix | SAP Blogs
https://blogs.sap.co[...]
2019-07-11
[12]
문서
ABAP — Release-Specific Changes
https://help.sap.com[...]
[13]
문서
A new generation of CDS views: CDS view entities
https://blogs.sap.co[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com