기본 데이터 오브젝트 및 데이터 유형 사용

Objectives

After completing this lesson, you will be able to:
  • 데이터 오브젝트를 선언합니다.
  • 값을 지정합니다.

ABAP의 데이터 오브젝트

ABAP 프로그램의 데이터 오브젝트는 프로그램 메모리의 예약된 섹션을 나타냅니다.

ABAP에서는 변수, 상수, 리터럴이라는 세 가지 유형의 데이터 오브젝트를 인식합니다.

변수

변수는 런타임 중에 변경할 수 있는 컨텐트가 있는 데이터 오브젝트입니다. 변수는 이름으로 식별됩니다. 이 이름은 런타임 시 데이터 오브젝트를 처리하는 데에도 사용됩니다. ABAP 변수의 시작 값은 항상 잘 정의되어 있습니다.

상수

상수는 변수와 유사합니다. 그러나 변수와 달리 값은 소스 코드에 하드 코드되며 런타임 중에 변경되지 않아야 합니다. 변수와 마찬가지로 상수는 재사용 가능한 이름을 갖습니다.

리터럴

리터럴 값도 소스 코드에 하드 코딩됩니다. 상수와 달리 리터럴에는 이름이 없습니다. 따라서 리터럴을 재사용할 수 없습니다. 리터럴은 상수 값과 변수의 시작 값만 지정할 때 사용합니다.

ABAP 데이터 오브젝트는 항상 유형이 지정됩니다. 모든 데이터 오브젝트는 포함할 수 있는 정보의 종류를 결정하는 데이터 유형을 기반으로 합니다. ABAP 데이터 오브젝트의 데이터 유형은 프로그램 실행 내내 동일하게 유지됩니다.

변수 선언

ABAP 프로그램의 변수는 키워드 DATA를 사용하여 선언됩니다.

DATA 문은 세 부분으로 구성됩니다. 각 부분을 좀 더 자세히 살펴보겠습니다.

DATA
키워드 DATA 뒤에 변수 이름이 옵니다. 변수 이름은 30자를 초과할 수 없으며, 문자 A - Z, 숫자 0 - 9, 밑줄이 포함될 수 있습니다. 이름은 문자 또는 밑줄로 시작해야 합니다.
TYPE
추가 요소 TYPE 뒤에 변수 유형이 지정됩니다. 예시에서는 기본 제공 유형 i(정수)와 문자열(가변 길이의 문자열)이 사용됩니다.
VALUE
추가 값(Addition VALUE)은 선택사항이며 변수에 대한 시작 값을 지정하는 데 사용할 수 있습니다. VALUE가 없으면 변수의 기술적 유형에 따라 초기 값으로 변수가 생성됩니다.

ABAP 데이터 유형의 소스

ABAP에서는 다음과 같은 데이터 유형 소스를 제공합니다.

ABAP 기본 제공
ABAP에는 단순 숫자, 문자 유형 및 이진 데이터 오브젝트에 대해 14개의 사전 정의된 데이터 유형 세트가 있습니다.
TYPES 문
명령문 TYPES를 사용하면 정의 위치에 따라 데이터 유형을 정의하고 다른 위치에서 재사용할 수 있습니다.
ABAP 딕셔너리
ABAP 딕셔너리는 ABAP 저장소의 일부입니다. 무엇보다 시스템 전체에서 사용할 수 있는 전역 데이터 유형을 관리합니다. ABAP 딕셔너리 유형은 기술적 속성을 정의할 뿐 아니라 시맨틱 정보(예: 레이블)를 추가합니다. ABAP 딕셔너리 유형은 사용자 인터페이스를 구현할 때 특히 유용합니다.

사용해 보기: 사전 정의된 ABAP 유형

  1. 이 과정의 첫 번째 연습문제와 마찬가지로 인터페이스 IF_OO_ADT_CLASSRUN을 구현하는 신규 전역 클래스를 생성합니다.
  2. 다음 코드 스니핏을 if_oo_adt_classrun~main( ) 메소드의 구현 부분에 복사합니다.
    Code Snippet
    12345678910111213141516171819202122232425
    * Data Objects with Built-in Types ********************************************************************** " comment/uncomment the following declarations and check the output DATA variable TYPE string. * DATA variable TYPE i. * DATA variable TYPE d. * DATA variable TYPE c LENGTH 10. * DATA variable TYPE n LENGTH 10. * DATA variable TYPE p LENGTH 8 DECIMALS 2. * Output ********************************************************************** out->write( 'Result with Initial Value)' ). out->write( variable ). out->write( '---------' ). variable = '19891109'. out->write( 'Result with Value 19891109' ). out->write( variable ). out->write( '---------' ).
  3. CTRL + F3 을 눌러 클래스를 활성화하고 F9 를 눌러 콘솔 앱으로 실행합니다.
  4. 콘솔 출력을 분석합니다. 다른 변수 선언의 주석 처리를 해제합니다. 개념을 익히려면 자신의 선언을 시도해 보십시오.

상수 및 리터럴

상수 선언

상수는 하드 코드된 값이 있는 데이터 오브젝트이며 런타임 중에 변경되지 않아야 합니다. 상수에 대한 쓰기 권한이 있으면 구문 오류가 발생합니다.

ABAP에서는 키워드 CONSTANTS를 사용하여 상수를 선언합니다. CONSTANT 문은 DATA 문과 동일한 부분으로 구성됩니다. 유일한 차이점은 VALUE 추가가 필수라는 것입니다.

상수 값이 유형별 초기 값이어야 하는 경우 특수 형식 VALUE IS INITIAL 에서 VALUE 추가 요소를 사용할 수 있습니다.

ABAP의 리터럴

리터럴은 하드 코드된 값을 가진 익명의 데이터 오브젝트입니다. 리터럴은 상수에 대한 비초기 값과 변수의 초기 값이 아닌 시작 값을 정의하는 데 주로 사용됩니다.

기술적으로 코드의 어느 곳에든 리터럴을 사용할 수 있습니다. 가독성과 유지보수성을 지원하려면 대신 상수를 정의하고 사용하는 것이 좋습니다.

ABAP에서는 다음 세 가지 유형의 리터럴을 인식합니다.

  • 숫자 리터럴은 부호가 있거나 없는 정수 숫자입니다. 숫자 리터럴의 데이터 유형은 일반적으로 I입니다. 데이터 유형 I에 대해 값이 너무 큰 경우에만 P 유형이 사용되며, 길이는 충분하고 소수 자릿수는 없습니다.
  • 텍스트 리터럴은 간단한 따옴표로 묶인 문자열입니다. 텍스트 리터럴의 유형은 C입니다. 길이는 따옴표로 묶인 내용에서 파생됩니다. 후행 공백은 무시됩니다.
  • 문자열 리터럴은 뒷따옴표(`) 쌍의 문자열입니다. 문자열 리터럴은 STRING 유형입니다. 문자열 유형이 지정된 데이터 오브젝트에 대한 값을 제공하는 데 사용해야 합니다.

사용해 보기: 데이터 오브젝트

  1. 이 과정의 첫 번째 연습문제와 마찬가지로 인터페이스 IF_OO_ADT_CLASSRUN을 구현하는 신규 전역 클래스를 생성합니다.
  2. 다음 코드 스니핏을 if_oo_adt_classrun~main( ) 메소드의 구현 부분에 복사합니다.
    Code Snippet
    1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
    * Example 1: Local Types ********************************************************************** * Comment/Uncomment the following lines to change the type of my_var TYPES my_type TYPE p LENGTH 3 DECIMALS 2. * TYPES my_type TYPE i . * TYPES my_type TYPE string. * TYPES my_type TYPE n length 10. * Variable based on local type DATA my_variable TYPE my_type. out->write( `my_variable (TYPE MY_TYPE)` ). out->write( my_variable ). * Example 2: Global Types ********************************************************************** * Variable based on global type . " Place cursor on variable and press F2 or F3 DATA airport TYPE /dmo/airport_id VALUE 'FRA'. out->write( `airport (TYPE /DMO/AIRPORT_ID )` ). out->write( airport ). * Example 3: Constants ********************************************************************** CONSTANTS c_text TYPE string VALUE `Hello World`. CONSTANTS c_number TYPE i VALUE 12345. "Uncomment this line to see syntax error ( VALUE is mandatory) * constants c_text2 type string. out->write( `c_text (TYPE STRING)` ). out->write( c_text ). out->write( '---------' ). out->write( `c_number (TYPE I )` ). out->write( c_number ). out->write( `---------` ). * Example 4: Literals ********************************************************************** out->write( '12345 ' ). "Text Literal (Type C) out->write( `12345 ` ). "String Literal (Type STRING) out->write( 12345 ). "Number Literal (Type I) "uncomment this line to see syntax error (no number literal with digits) * out->write( 12345.67 ).
  3. CTRL + F3 을 눌러 클래스를 활성화하고 F9 를 눌러 콘솔 앱으로 실행합니다.
  4. 소스 코드를 사용하여 개념을 숙지합니다.
    • my_type 선언의 주석을 해제하고 F2와F3을 사용하여 my_variable 변수의 정의를 분석합니다.
    • F2와F3을 사용하여 공항 변수의 정의를 분석합니다.
    • 상수 c_text2의 정의에 대한 주석 처리를 해제하여 구문 오류를 확인합니다.
    • 마지막 코드 라인의 주석 처리를 해제하여 구문 오류를 확인합니다.
    • ...

데이터 오브젝트에 값 지정

값 지정을 사용하여 변수 값을 변경합니다.

방법을 보려면 이 비디오를 시청하십시오.

암시적 유형 변환

ABAP은 유형이 지정된 프로그래밍 언어이지만 값 지정에서는 소스 표현식의 유형과 대상 변수의 유형이 다를 수 있습니다. 이 경우 런타임은 유형 변환을 시도합니다.

그림에 나와 있듯이, 가능한 경우 다음과 같은 이유로 유형 변환을 피하십시오.

  • 추가 런타임 사용: 유형 변환을 사용하는 값에는 유형이 동일한 값 지정보다 많은 런타임이 필요합니다.
  • 잠재적 런타임 오류: 소스 유형과 대상 유형의 일부 조합은 런타임 오류를 일으킬 수 있습니다. 예를 들어, 대상 변수에 숫자 유형 l이 있고 소스 표현식에 유형과 같은 문자가 있는 경우 텍스트를 숫자로 변환할 수 없는 경우 런타임에 오류가 발생합니다.
  • 잠재적 정보 손실: 소스 유형과 대상 유형의 일부 조합은 런타임 오류를 발생시키지 않지만 데이터 손실을 초래할 수 있습니다. 예를 들어, 소스와 대상이 모두 C 유형이지만 대상 변수 유형이 더 짧습니다. 그러면 런타임에서 소스 값이 잘립니다.

변수 재설정

명령문 CLEAR은 특별한 종류의 값 지정입니다. 변수를 해당 유형별 초기 값으로 재설정하는 데 사용됩니다.

노트

CLEAR 문은 시작 값과 VALUE 추가 요소를 무시합니다. CLEAR 후 변수에는 항상 유형별 초기 값이 포함됩니다.

값 지정의 인라인 선언

이 동영상에서 인라인 선언 및 값 지정에서의 작동 방식에 대해 알아보십시오.