λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ§‘‍πŸ’Ό SAP/ABAP

[SAP ABAP] OCCURS 0(N) μ΄λž€? (예제 포함)

by Jay Din 2025. 1. 3.
728x90
λ°˜μ‘ν˜•

OCCURS 0(N) μ΄λž€?

  1. OCCURS n은 인터널 ν…Œμ΄λΈ”μ„ μ„ μ–Έν•˜λ©΄μ„œ 각 λ ˆμ½”λ“œμ˜ ꡬ쑰와 κΈ°λ³Έ 크기(n)을 μ •μ˜ν•©λ‹ˆλ‹€.
    • n은 초기 λ©”λͺ¨λ¦¬ 크기λ₯Ό λ‚˜νƒ€λ‚΄λ©°, ν…Œμ΄λΈ”μ— μ €μž₯λ˜λŠ” λ ˆμ½”λ“œμ˜ 크기λ₯Ό κ²°μ •ν•©λ‹ˆλ‹€.
    • OCCURS 0은 초기 λ©”λͺ¨λ¦¬ 크기λ₯Ό μ§€μ •ν•˜μ§€ μ•Šκ³ , SAPκ°€ μžλ™μœΌλ‘œ λ™μ μœΌλ‘œ λ©”λͺ¨λ¦¬λ₯Ό κ΄€λ¦¬ν•˜λ„λ‘ μ„€μ •ν•©λ‹ˆλ‹€.
  2. 인터널 ν…Œμ΄λΈ”μ€ 동적 λ°°μ—΄μ²˜λŸΌ λ™μž‘ν•˜λ©°, 데이터가 μΆ”κ°€λ˜λ©΄ μžλ™μœΌλ‘œ 크기가 ν™•μž₯λ©λ‹ˆλ‹€.
  3. OCCURS n은 인터널 ν…Œμ΄λΈ”μ„ μ •μ˜ν•  λ•Œ μ‚¬μš©λ˜λ˜ κ΅¬λ¬Έμž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ ν˜„μž¬λŠ” 더 ꢌμž₯λ˜λŠ” 방식인 ν‘œμ€€ 인터널 ν…Œμ΄λΈ”(Standard Internal Table) μ •μ˜λ‘œ λŒ€μ²΄λ˜μ—ˆκ³ , OCCURS λŠ” ꡬ식 ꡬ문으둜 κ°„μ£Όλ©λ‹ˆλ‹€.

 

OCCURS 0 예제

λ‹€μŒμ€ `OCCURS 0`λ₯Ό μ‚¬μš©ν•˜μ—¬ 인터널 ν…Œμ΄λΈ”μ„ μ •μ˜ν•œ μ˜ˆμ‹œμž…λ‹ˆλ‹€.

" λ³€μˆ˜ μ„ μ–Έ
DATA: BEGIN OF ITAB OCCURS 0,
        FIELD1 TYPE I,
        FIELD2 TYPE STRING,
      END OF ITAB.

DATA: LS_ITAB LIKE ITAB.

" 데이터 μ‚½μž…
LS_ITAB-FIELD1 = 10.
LS_ITAB-FIELD2 = 'Apple'.
APPEND LS_ITAB TO ITAB.

LS_ITAB-FIELD1 = 5.
LS_ITAB-FIELD2 = 'Mango'.
APPEND LS_ITAB TO ITAB.

" 데이터 좜λ ₯
LOOP AT ITAB INTO LS_ITAB.
  WRITE: /'FIELD1: ', LS_ITAB-FIELD1,
        /'FIELD2: ', LS_ITAB-FIELD2.
ENDLOOP.

μ‹€ν–‰ ν™”λ©΄

 

OCCURS 0μ—μ„œμ˜ λ™μž‘ 방식

  1. λ©”λͺ¨λ¦¬ 관리
    • OCCURS 0은 초기 크기λ₯Ό μ§€μ •ν•˜μ§€ μ•Šμ•„λ„ ν•„μš”μ— 따라 λ©”λͺ¨λ¦¬λ₯Ό λ™μ μœΌλ‘œ ν• λ‹Ήν•©λ‹ˆλ‹€.
    • λ©”λͺ¨λ¦¬κ°€ νš¨μœ¨μ μ΄μ§€λ§Œ, 초기 크기λ₯Ό λͺ…ν™•νžˆ μ§€μ •ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ 예츑이 μ–΄λ €μšΈ 수 μžˆμŠ΅λ‹ˆλ‹€.
  2. μžλ™ ν™•μž₯
    • 데이터가 μΆ”κ°€λ˜λ©΄ SAPκ°€ λ‚΄λΆ€μ μœΌλ‘œ 크기λ₯Ό μ‘°μ •ν•˜μ—¬ λ©”λͺ¨λ¦¬λ₯Ό ν™•μž₯ν•©λ‹ˆλ‹€.
  3. ꡬ쑰 μ •μ˜
    • OCCURS ꡬ문은 인터널 ν…Œμ΄λΈ”μ˜ ꡬ쑰λ₯Ό μ •μ˜ν•  λ•Œ μ‚¬μš©λ˜λ©°, 여기에 ν•„λ“œλ₯Ό μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

'μ–Έμ œ(When)' μ‚¬μš©ν• κΉŒ?

  1. 동적 데이터 처리
    • `OCCURS 0`λŠ” 특히 λ™μ μœΌλ‘œ 데이터λ₯Ό μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ” μƒν™©μ—μ„œ μœ μš©ν•©λ‹ˆλ‹€. ν”„λ‘œκ·Έλž¨μ΄ 싀행될 λ•Œ μ–Όλ§ˆλ‚˜ λ§Žμ€ 데이터가 ν•„μš”ν•œμ§€ 미리 μ•Œ 수 μ—†λŠ” κ²½μš°μ— ν™œμš©λ©λ‹ˆλ‹€.
  2. μœ μ—°μ„±μ„ ν•„μš”λ‘œ ν•˜λŠ” 상황
    • ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λŠ” λ™μ•ˆ μ‚¬μš©μž μž…λ ₯μ΄λ‚˜ μ™ΈλΆ€ μ΄λ²€νŠΈμ— 따라 ν•„μš”ν•œ 데이터가 λ³€ν•˜λŠ” 경우, `OCCURS 0`λ₯Ό μ‚¬μš©ν•˜μ—¬ μ΄ˆκΈ°μ— λΉ„μ–΄μžˆλŠ” ν…Œμ΄λΈ”μ„ μƒμ„±ν•˜λ©΄ μœ μ—°ν•˜κ²Œ 데이터λ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜ μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

728x90

 

'μ™œ(Why)' μ‚¬μš©ν• κΉŒ?

  1. λ©”λͺ¨λ¦¬ μ΅œμ ν™”:
    • μ΄ˆκΈ°μ— 큰 크기의 ν…Œμ΄λΈ”μ„ μƒμ„±ν•˜μ§€ μ•Šκ³  ν•„μš”ν•  λ•Œλ§ˆλ‹€ λ™μ μœΌλ‘œ 행을 μΆ”κ°€ν•¨μœΌλ‘œμ¨ λ©”λͺ¨λ¦¬λ₯Ό μ΅œμ ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λΆˆν•„μš”ν•œ μ΄ˆκΈ°ν™”λ‘œ μΈν•œ λ©”λͺ¨λ¦¬ λ‚­λΉ„λ₯Ό λ°©μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  2. λŸ°νƒ€μž„ νš¨μœ¨μ„±:
    • `OCCURS 0`λ₯Ό μ‚¬μš©ν•˜λ©΄ ν”„λ‘œκ·Έλž¨μ΄ λŸ°νƒ€μž„ 쀑에 λ™μ μœΌλ‘œ 데이터λ₯Ό ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ μ‹œκ°„μ„ μ΅œμ ν™”ν•˜κ³  μ„±λŠ₯을 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€.
  3. 동적 ꡬ성 κ°€λŠ₯:
    • ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λŠ” λ™μ•ˆ ν•„μš”ν•œ 만큼의 데이터λ₯Ό μΆ”κ°€ν•˜λ©΄μ„œ ꡬ성할 수 있기 λ•Œλ¬Έμ— 동적인 상황에 적응할 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ‚¬μš©μžκ°€ μ„ νƒν•œ μ˜΅μ…˜μ— 따라 λ‹€μ–‘ν•œ 데이터λ₯Ό μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ” κ²½μš°μ— μœ μš©ν•©λ‹ˆλ‹€.

 

OCCURSλ₯Ό λͺ…μ‹œν•˜μ§€ μ•ŠμœΌλ©΄?

ABAPμ—μ„œ λ‚΄λΆ€ ν…Œμ΄λΈ”μ„ μ„ μ–Έν•  λ•Œ `OCCURS`λ₯Ό λͺ…μ‹œν•˜μ§€ μ•ŠμœΌλ©΄ 기본적으둜 ν•œ ν–‰μœΌλ‘œ μ΄ˆκΈ°ν™”λ©λ‹ˆλ‹€.

" μœ„ μ „μ²΄μ½”λ“œ 쀑 itab μ„ μ–Έ λΆ€λΆ„μ—μ„œ OCCURS 0 제거
DATA: BEGIN OF itab,
        field1 TYPE I,
        field2 TYPE STRING,
      END OF itab.

 

μœ„ μ½”λ“œμ—μ„œ `itab`은 μ΄ˆκΈ°μ— ν•œ 행을 ν¬ν•¨ν•˜λŠ” 인터널 ν…Œμ΄λΈ”λ‘œ μ„ μ–Έλ©λ‹ˆλ‹€. 이 경우, ν”„λ‘œκ·Έλž¨μ΄ 싀행될 λ•Œ `itab`μ—λŠ” κΈ°λ³Έκ°’μœΌλ‘œ μ΄ˆκΈ°ν™”λœ ν•œ 행이 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ, OCCURSλ₯Ό λͺ…μ‹œν•˜μ§€ μ•Šκ³  데이터λ₯Ό μ—¬λŸ¬κ°œ μ‚½μž…ν•˜λ €κ³  ν•˜λ©΄ OCCURSλ₯Ό μ„ μ–Έν•΄λ‹¬λΌλŠ” 였λ₯˜("ITAB" is not an internal table "OCCURS n" specification is missing.)κ°€ λ‚˜μ˜΅λ‹ˆλ‹€.

였λ₯˜ ν™”λ©΄

 

λ”°λΌμ„œ OCCURS λ₯Ό μ„ μ–Έν•˜μ§€ μ•ŠμœΌλ©΄ ν…Œμ΄λΈ”μ΄ μ•„λ‹Œ ν•˜λ‚˜μ˜ ꡬ쑰체 ν˜•μ‹μœΌλ‘œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

" λ³€μˆ˜ μ„ μ–Έ
DATA: BEGIN OF ITAB,
        FIELD1 TYPE I,
        FIELD2 TYPE STRING,
      END OF ITAB.

" 데이터 μ‚½μž…
ITAB-FIELD1 = 10.
ITAB-FIELD2 = 'Apple'.

" 데이터 좜λ ₯
WRITE: /'FIELD1: ', ITAB-FIELD1,
      /'FIELD2: ', ITAB-FIELD2.

μ‹€ν–‰ κ²°κ³Ό

 

ꢌμž₯ 방식: μ΅œμ‹  인터널 ν…Œμ΄λΈ” μ„ μ–Έ

OCCURS ꡬ문은 ν˜„μž¬ 더 이상 ꢌμž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λŒ€μ‹ , μ΅œμ‹  λ°©μ‹μœΌλ‘œλŠ” STANDARD TABLE, SORTED TABLE, HASHED TABLE을 μ‚¬μš©ν•©λ‹ˆλ‹€.

https://jay-din.tistory.com/244

 

[SAP ABAP] 인터널 ν…Œμ΄λΈ” Standard, Sorted, Hashed table μ΄λž€?

1. ν…Œμ΄λΈ”μ˜ 속성 및 μš©λ„ μ •λ¦¬ν‘œ  ν…Œμ΄λΈ” μœ ν˜• STANDARD TABLESORTED TABLE HASHED TABLE ꡬ쑰비정렬, μˆœμ„œλŒ€λ‘œ 데이터 μ €μž₯ν‚€λ₯Ό κΈ°μ€€μœΌλ‘œ μžλ™ μ •λ ¬λœ ν…Œμ΄λΈ”ν‚€ 기반의 ν•΄μ‹œ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ 데이터 μ €μž₯ν‚€

jay-din.tistory.com

 

OCCURSλ₯Ό ꢌμž₯ν•˜μ§€ μ•ŠλŠ” 이유

λ©”λͺ¨λ¦¬ κ΄€λ¦¬μ˜ νš¨μœ¨μ„±

OCCURS 방식:

  • OCCURS nμ—μ„œ 초기 λ©”λͺ¨λ¦¬ 크기(n)λ₯Ό μ§€μ •ν•˜μ§€λ§Œ, ν•„μš”μ— 따라 λ©”λͺ¨λ¦¬λ₯Ό μΆ”κ°€λ‘œ ν• λ‹Ήν•©λ‹ˆλ‹€.
  • λ©”λͺ¨λ¦¬ ν™•μž₯이 ν•„μš”ν•  λ•Œλ§ˆλ‹€ λΉ„μš©μ΄ λ°œμƒν•˜λ©°, μ„±λŠ₯이 μ €ν•˜λ  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 특히, 데이터가 λ§Žμ„ 경우 λΆˆν•„μš”ν•œ λ©”λͺ¨λ¦¬ μ‚¬μš©μ΄ λ°œμƒν•  κ°€λŠ₯성이 ν½λ‹ˆλ‹€.

μƒˆλ‘œμš΄ ν…Œμ΄λΈ” ꡬ쑰:

  • STANDARD, SORTED, HASHED TABLE은 동적 λ©”λͺ¨λ¦¬ 할당을 더 효율적으둜 μ²˜λ¦¬ν•©λ‹ˆλ‹€.
  • λ©”λͺ¨λ¦¬λ₯Ό μžλ™μœΌλ‘œ μ‘°μ •ν•˜λ©°, λΆˆν•„μš”ν•œ λ©”λͺ¨λ¦¬ λ‚­λΉ„λ₯Ό μ€„μž…λ‹ˆλ‹€.

 

μ„±λŠ₯ μ΅œμ ν™”

OCCURS 방식:

  • 인터널 ν…Œμ΄λΈ”μ—μ„œ 데이터λ₯Ό 검색할 λ•Œ, 항상 순차적 κ²€μƒ‰λ§Œ κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • 검색 μ‹œκ°„μ€ O(n)으둜, 데이터 크기에 따라 μ„±λŠ₯이 μ €ν•˜λ©λ‹ˆλ‹€.

μƒˆλ‘œμš΄ ν…Œμ΄λΈ” ꡬ쑰:

  • STANDARD TABLE: μ—¬μ „νžˆ 순차 κ²€μƒ‰μ΄μ§€λ§Œ, λͺ…μ‹œμ  ν‚€ 없이도 효율적인 검색 ꡬ쑰λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€.
  • SORTED TABLE: 이진 검색(Binary Search)을 μ‚¬μš©ν•˜μ—¬ 검색 μ„±λŠ₯이 O(log n)으둜 크게 ν–₯μƒλ©λ‹ˆλ‹€.
  • HASHED TABLE: ν•΄μ‹œ μ•Œκ³ λ¦¬μ¦˜ 기반으둜 검색 μ‹œκ°„ O(1)을 μ œκ³΅ν•˜λ©° λŒ€λŸ‰ 데이터에 νƒμ›”ν•œ μ„±λŠ₯을 κ°€μ§‘λ‹ˆλ‹€.

 

데이터 무결성 κ³Ό ꡬ쑰적 λͺ…ν™•μ„±

OCCURS 방식

  • ν…Œμ΄λΈ”μ— ν‚€λ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ •μ˜ν•  수 μ—†μœΌλ―€λ‘œ, 데이터 쀑볡 λ°©μ§€ 및 μœ νš¨μ„± 검증이 μ–΄λ ΅μŠ΅λ‹ˆλ‹€.
  • 데이터 μ‚½μž… μ‹œ, ꡬ쑰적 μ œμ•½ 쑰건을 μ μš©ν•˜κΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

μƒˆλ‘œμš΄ ν…Œμ΄λΈ” ꡬ쑰

  • SORTED TABLE 및 HASHED TABLEμ—μ„œλŠ” ν‚€λ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ •μ˜ κ°€λŠ₯ν•©λ‹ˆλ‹€.
    • WITH UNIQUE KEYλ₯Ό μ‚¬μš©ν•΄ 데이터 쀑볡 λ°©μ§€.
    • λͺ…ν™•ν•œ 데이터 무결성을 보μž₯.
  • 데이터 ꡬ쑰λ₯Ό λͺ…ν™•νžˆ μ •μ˜ν•  수 μžˆμ–΄, μœ μ§€λ³΄μˆ˜μ„±κ³Ό 가독성이 ν–₯μƒλ©λ‹ˆλ‹€.

 

ν™•μž₯μ„±κ³Ό μœ μ§€λ³΄μˆ˜μ„±

OCCURS 방식

  • κΈ°μ‘΄ 방식은 μœ μ—°μ„±μ΄ λΆ€μ‘±ν•˜μ—¬, μ½”λ“œκ°€ ν™•μž₯될수둝 관리가 μ–΄λ €μ›Œμ§‘λ‹ˆλ‹€.
  • 특히 λ³΅μž‘ν•œ 데이터 μ‘°μž‘μ—λŠ” μ ν•©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μƒˆλ‘œμš΄ ν…Œμ΄λΈ” ꡬ쑰

  • λ‹€μ–‘ν•œ 데이터 μž‘μ—…μ— μ΅œμ ν™”λœ 방식 제곡:
    • 순차 처리: STANDARD TABLE
    • μ •λ ¬ 및 검색 μ΅œμ ν™”: SORTED TABLE
    • 고속 검색 및 쀑볡 λ°©μ§€: HASHED TABLE
  • μƒˆλ‘œμš΄ 데이터 μœ ν˜•κ³Ό ꡬ쑰가 λ„μž…λ˜λ©΄μ„œ μ½”λ“œ ν™•μž₯이 μš©μ΄ν•˜κ³ , μ΅œμ‹  ABAP ꡬ문과 잘 ν˜Έν™˜λ©λ‹ˆλ‹€.

 

ν˜„λŒ€ ABAP 개발 ν‘œμ€€

  • 가독성: STANDARD, SORTED, HASHED TABLE은 λͺ…μ‹œμ μ΄κ³  직관적인 μ½”λ“œ μž‘μ„±μ„ κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€.
  • 미래 μ§€ν–₯적: ABAP의 μ΅œμ‹  버전(7.4 이상)μ—μ„œλŠ” OCCURSκ°€ 더 이상 ν•„μš”ν•˜μ§€ μ•ŠμœΌλ©°, μƒˆλ‘œμš΄ κΈ°λŠ₯κ³Ό λ„κ΅¬μ—μ„œ μ§€μ›λ˜μ§€ μ•Šμ„ κ°€λŠ₯성이 μžˆμŠ΅λ‹ˆλ‹€.
  • μ„±λŠ₯ μ΅œμ ν™”μ™€ 일관성: μƒˆλ‘œμš΄ 방식은 μ‹œμŠ€ν…œ λ¦¬μ†ŒμŠ€λ₯Ό 효율적으둜 μ‚¬μš©ν•˜κ³ , ν˜„λŒ€μ  개발 ν‘œμ€€μ— λΆ€ν•©ν•©λ‹ˆλ‹€.

 

 

728x90
λ°˜μ‘ν˜•