[Easy ABAP 2.0] SAP ERP 입문자의 독학 공부기록 📚 [02. Data Type-2]

jimi·2025년 5월 2일

이지 아밥 2.0

목록 보기
4/11
post-thumbnail

02. Data Type

시스템 변수 sy-datum과 sy-datlo 의 차이점

System Time Zone 은 어플리케이션 서버의 Time Zone을 의미한다.
User's Default Zone 은 개별 사용자의 Time Zone을 설정하게 된다.

  • sy-datum : IMG에서 설정한 System Time Zone을 기준으로 시간이 설정됨.
  • sy-datlo : IMG에서 설정한 User's Time Default Time 또는 사용자 프로파일에 설정된 Time zone 을 기준으로 시간이 설정된다.

만약 중국과 한국에 공장이 있는 Global 업체의 경우, 중국에 공장이 있는 회사가 한국(본사)에 있는 SAP를 사용하게 되면, 중국 사용자들은 User Time Zone을 이용해서 현재 시간을 인식해야 한다.

sy-datum 시스템 변수를 프로그램에서 사용하게 되면 1시간 빠른 한국 시간이 반환됨. 따라서 이 경우엔 sy-datlo가 사용자 현지 시간에 맞게 설정된 것!

4. 가변 길이를 가지는 Predefined ABAP Type

  • String: 실행 중에 길이에 따라 메모리가 동적으로 할당되는 "가변 길이" 문자 타입. 실행 도중 메모리를 잡기 때문에 아주 긴 문자열 처리에 적합하다.

  • TYPE C: "고정 길이". 고정된 메모리 객체라 동적 메모리가 아니다.

⭐️ 아래의 내용은 스트링 또는 타입 C로 구성된 문자열의 사용되는 명령어이다 자주 사용 된다고 하니 기억해두자.


FIND : ABAP이란 글자 안에 B가 있으면, 시스템 변수 SY-SUBRC = 0 반환
REPLACE : ABAP을 BBAP 로 바꾸기
TRANSLATE : 대소문자 변경
SHIFT : 왼쪽으로 한칸씩 옮기기
CONDENSE: 공백 제거.
OVERLAY: character 의 빈곳을 채우고, 채워져 있는 곳을 덮어쓰기 않음.
CONCATENATE: AB+ AP를 합쳐서 ABAP으로 연결
SPLIT : 기준 문자 C를 중심으로 AB 와 AP 로 나눔.

TIP!
ABAP 언어에 익숙하지 않다면 SAP 에서 제공하는 HELP 기능 활용하기 스스로 메뉴얼을 통해 학습하는 방식을 익히기

TIP
작은 따옴표(')와 의 차이점.는 문자열 내에 포함되어 있는 space를 모두 인식함.

5. Hexadecimal(16진수) Type

1byte가 2 개의 digits로 표현 되는 타입이다.
8비트가 1 byte이기 때문에 16 진수는 0에서 9, 그리고 10에서 15 까지 표현되며 10 부터 15 까지는 문자 A B C D E F로 표현 된다
16 진법은 binary 코드로 프로그래밍 하는 것이 어려워 쉽게 표현 할 수 있는 방법으로 사용된 것으로, 저급 언어인 PC 어셈블리어의 표현 법이다.

ABAP에서 16 진수는 프린터 언어와 그래픽 관련 영역에서 많이 쓰인다.

Unicode checks active 옵션

ABAP 프로그램 생성 시 Unicode checks active 옵션이 존재한다. 이것은 unicode 시스템 환경에서 프로그램이 정상적으로 작동 하는지 점검 하는 기능이다.

Unicode checks active 옵션을 체크 하면 다음과 같은 효력이 있다.
1. non unicode system 환경에서 프로그램을 생성 하더라도 SAP 업그레이드 이후 unicode system 환경으로 프로그램이 import 된 후 정상적으로 기능을 수행한다.

03. 프로그램의 Local Type

  1. Type 선언

    프로그램 내에서 local Type 을 선원 하여 로컬 프로그램에서만 특별한 타입으로 사용하기 위해 TYPES 구문을 이용한다.

TYPES dtype [TYPE type | LIKE dobj] ...
  1. Structured TYPE 선언

: 여러개 필드로 이루어진 구조체 타입을 선언할 수 있다.

Include type 구문을 이용해 Nested Structure 타입을 선언 할 수 있다.

구조체 타입을 사용하지 않고 DATA BEGIN OF ~ END OF 구문을 이용하여 바로 구조체 변수를 선언 할 수도 있다.

INCLUDE STRUCTURE 구문을 이용하면, DATA로 선언된 구조체나 ABAP Dictionary 구조체를 Nested Structure로 포함 될 수 있다.

04. ABAP Dictionary 의 Type

ABAP Dictionary는 Global Data Type이다.
ABAP Dictionary(table, structure, data element)는 모든 프로그램에서 data type으로 선언하여 사용할 수 있다.

크게 3가지 유형으로 나누어 진다.
1. Table and View : ..TYPE dbtab, ...TYPE dbtab-comp
2. Data Types: Data Elements, Structures, Table types
3. Type Groups

T-CODE:SE11 를 이용해 생성, 변경, 조회 가능

1. Table View 를 이용한 TYPE 선언

Database Table 과 View 전체를 참고하여 구조체 및 인터널 테이블을 선언할 수 있다.
그리고 Table의 필드만을 참고하여 선언할 수 있다.

2. Data Type 을 이용한 TYPE 선언

Data Type은 ABAP Dictionary 를 정의하는 실질적인 타입이다.

2.1 Data Element

Data Element 는 개별 필드를 정의한다. Data Element 의 타입은 Domain을 참고하게 된다.

2.2 Structure를 이용한 TYPE 선언

Structure는 여러개의 table에 존재하는 필드들을 조합할 필요성이 있는 경우에 자주 사용된다. ABAP Dictionary Structure를 생성한 후, TYPES 구문을 사용하여 구조체를 선언할 수 있다.

TYPES <dtype> TYPE <structure> . 

3. Type Group을 이용한 TYPE 선언

Type Group 은 INCLUDE Technique를 기반으로 한다.
여러가지 TYPE을 그룹으로 묶어서 선언할 때 사용된다.
TYPE GROUP은 모든 프로그램에서 사용할 수 있는 Global Data Type이다. 모듈별로 자주 사용하게 되는 타입들을 Type Group으로 관리하는 것도 좋은 방법이다.

TYPE-POOLS name.

4. ABAP Dictionary Type vs. ABAP Type

ABAP의 기본 데이터 타입을 이용하여 자주 사용되는 타입은 ABAP Dictionary Type으로 생성되어 있다.
개발자 입장에서는 두 타입에 차이가 없다!!
다음 두개의 구문은 같은 타입이다.

DATA gv_f1(10) TYPE c.
DATA gv_f2 TYPE char10. 

05. Assigning Value

1. Assigning Value (값 할당)

ABAP/4에서는 변수를 선언하거나 실제 데이터가 처리되는 구문에서 Data Object에 값을 할당할 수 있다.
변수를 선언할 때 VALUE 구문을 통하여 초깃값을 정의할 수 있고, 실제 데이터를 처리하는 프로그램 구문 내에서는 MOVE 또는 WRITE TO 구문을 이용하여 변수에 값을 할당한다.

  • MOVE TO 구문
    : = 구문과 동일한 의미이다.
    Field string 값을 Copy하는 경우에는 MOVE-CORRESPONDING 구문을 사용할 수 있다.
    각 구조체의 같은 필드게 값이 복사된다. 만약 구조체의 필드 이름 및 순서가 다른 경우 MOVE 구문을 사용하면 필드 이름에 관계없이 순서대로 할당이 일어나기에,,, 주의하기.

  • MOVE 구문
    : 형 변환 가능.
    ABAP에서는 Type D(데이터)와 Type T(시간) 간의 형변환이 불가하지만 나머지는 Type 변경과 Length 조정을 자동으로 지원한다.
    총 64개 형태의 형변환이 가능하다.

  • WRITE 구문
    : 1. 리스트 출력 2. 변수 할당
    두가지 용도로 사용된다. WRITE TO구문은 2. 변수할당에 해당함.

2. offset을 이용한 값 할당

MOVE <f1> [+<p1>] [(<l1>)] TO <f2> [+<p2>][(<l2>)].

위 구문은 f1 필드 p1에서 시작하여 l1까지 복사하여, f2 필드 p2에서 길이 l2까지 할당하는 구문이다. Offsets(시작위치)를 지정하는 p1 값은 0부터 시작한다. 1번째 자리는 0 을 의미함!

예시)

DATA : f1(8) VALUE 'ABCDEFGH',
	   f2(8).
MOVE   f1+2(3)   TO   f2.

출력 : 'CDE'

f2필드는 f1필드의 3번째 자리부터 3개까지의 'CDE' 값을 가지게 됨.

구조체의 산술 계산

다음 구문으로 구조체 간에 연산 가능함.

ADD-CORRESPONDING
SUBTRACT-CORRESPONDING
MULTIPLY-CORRESPONDING
DIVIDE-CORRESPONDING

06. 기타 변수 선언

1. Constants

: 상수.
상수로 선언하게 되면 프로그램 내에서 변경할 수 없다.
1. Constant 변수를 여러번 사용하였고, Constant 변수값을 변경하여야 할 경우-> 한 번만 변경하면 되기 때문에
프로그램 수정 시간 절감 가능함.
2. 숫자를 의미있는 변수명으로 지정함으로써 프로그램 가독성 향상에 도움!

2. STATICS

프로그램 Subroutine(FORM, FUNCTION)에 사용되는 local 변수의 값을 지속적으로 저장하여야 할 경우에 사용됨.

즉, FORM 구문 내의 STATICS로 선언된 Local 변수는 프로그램이 종료될 때까지 값을 유지하게 됨.

3. TABLES

TABLES 구문을 사용해서 ABAP Dictionary Table, View, Structure 을 선언하게 되면 ABAP Dictionary 타입과 같은 Data Object를 생성하게 된다.
이것을 Table Work Area 라고 부르며 프로그램 내에서 구조체처럼 사용할 수 있다.


단원 학습 후기

  1. 이번 ABAP 데이터 타입 파트에서는 크게 네 가지를 다뤘다.
    1️⃣ 첫째, sy-datum은 애플리케이션 서버 기준 시간대, sy-datlo는 사용자 프로파일에 설정된 시간대라는 차이.
    2️⃣ 둘째, String는 실행 중 메모리를 동적으로 할당하는 '가변 길이' 타입과, '고정 길이' 타입인 TYPE C의 차이를 확인하고, FIND, REPLACE, SPLIT 등 문자열 조작 명령어 정리했다.
    3️⃣ 셋째, 16진수 타입이 주로 프린터 언어·그래픽 분야에서 쓰인다는 점과, Unicode 체크 옵션으로 유니코드 환경 전환 시 호환성을 미리 검증할 수 있다는 팁.
    4️⃣ 마지막으로 로컬 타입(TYPES), 구조체 선언, 그리고 ABAP Dictionary(SE11) 기반 글로벌 타입·타입풀 관리까지 두루 살펴봤다.

  2. ABAP 데이터 선언 및 할당 방법으로는 다음과 같이 배웠다.

  • 데이터 할당MOVE/MOVE-CORRESPONDING(구조체 간 필드 일대일 복사), WRITE TO(포맷된 값 변수에 할당) 등으로 처리하고,
  • f1+offset(length) 형태로 오프셋 지정 복사도 가능하다는 걸 배웠다.
  • 구조체 간 산술 연산은 ADD-CORRESPONDING 등으로 간단히 할 수 있고,
  • VALUE로 선언 시 초깃값을 지정할 수도 있다.
  • CONSTANTS로 상수를 정의해 가독성을 높이고,
  • STATICS로 서브루틴 내 변수 값을 유지하거나,
  • TABLES 구문으로 워크 에어리어(데이터베이스 테이블 레코드용 구조체)를 바로 선언하는 방법도 정리했다.
  1. 느낀 점으로는 ABAP은 “타입" 하나에도 "환경·출력·호환성”을 꼼꼼히 고려한다는 인상이 강했다...
    특히 sy-datum vs sy-datlo 같은 시간대 이슈도 꼼꼼히 체크해야하는 점이 실무 안정성에 큰 밑거름이 될 것이라고 생각했다.
    가변·고정 타입 구분으로 메모리 효율과 문자열 활용법을 명확히 이해하고, 앞으로 코드 작성 시 “이 타입을 왜 써야 할까” 고민하는 습관을 길러야할 것 같다.
  2. ABAP의 다양한 할당 구문과 구조체 연산, 상수·정적 변수 활용법이 실무 코드를 한층 깔끔하게 만들어 주리라고 느꼈다. 특히 오프셋 복사와 CORRESPONDING 시리즈는 종종 복잡한 데이터 가공에서 시간을 크게 절약해 줄 것 같다고 생각했다.
profile
멋진 SAP 전문가가 되기 위하여

0개의 댓글