λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

ABAP Concept (πŸ“κ°œλ…)/Etc.

숫자 연산이 λ˜λŠ” CHAR - 암묡적 ν˜• λ³€ν™˜(Implicit Type Conversion)

ABAPμ—μ„œ 코딩을 ν•˜λ‹€ 보면, Char νƒ€μž…μ˜ λ³€μˆ˜κ°€ 숫자 연산이 λ˜λŠ” 경우λ₯Ό λ³Ό 수 μžˆλ‹€. 

 

λ‹€λ₯Έ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ˜€λ‹€λ©΄ ν˜•λ³€ν™˜ 였λ₯˜(Type Error) κ°€ λ‚˜μ•Ό μ •μƒμ΄μ§€λ§Œ, SAP μ‹œμŠ€ν…œμ€ λΉ„μ¦ˆλ‹ˆμŠ€ μ‚¬μš©μž μœ„μ£Όλ‘œ μ„€κ³„λ˜μ—ˆκΈ° λ•Œλ¬Έμ—, 문자 νƒ€μž…μ— μˆ«μžκ°€ λ“€μ–΄κ°€λ©΄ μžλ™μœΌλ‘œ 숫자둜 ν•΄μ„ν•˜λ €λŠ” νŠΉμ„±μ΄ μžˆλ‹€. 즉, ABAPμ—μ„œλŠ” 암묡적 ν˜• λ³€ν™˜(Implicit Type Conversion)에 μ˜ν•΄ 였λ₯˜ 없이 연산이 μˆ˜ν–‰λœλ‹€. 이번 κΈ€μ—μ„œλŠ” CHAR ν˜•λ³€ν™˜μ˜ νŠΉμ„±κ³Ό μ£Όμ˜μ‚¬ν•­μ„ μ˜ˆμ œμ™€ ν•¨κ»˜ 정리해 보도둝 ν•˜κ² λ‹€. 


πŸ“Œ CHAR νƒ€μž…인데 μ™œ μˆ«μžμ²˜λŸΌ μ—°μ‚°μ΄ λ κΉŒ?

ABAPμ—μ„œλŠ” CHAR νƒ€μž…μ˜ λ³€μˆ˜λΌ ν•˜λ”λΌλ„, κ·Έ μ•ˆμ— 숫자 ν˜•μ‹μ˜ λ¬Έμžμ—΄μ΄ λ“€μ–΄ 있으면 μžλ™μœΌλ‘œ 숫자둜 μΈμ‹ν•˜κ³  κ³„μ‚°ν•œλ‹€.

μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” '2'λŠ” λ¬Έμžμ§€λ§Œ, ABAP은 이λ₯Ό μžλ™μœΌλ‘œ μ •μˆ˜λ‘œ λ³€ν™˜ν•΄ κ³„μ‚°ν•œ λ’€, λ‹€μ‹œ CHAR둜 되돌렀 μ €μž₯ν•œλ‹€.

 

λ‚΄λΆ€μ μœΌλ‘œ λͺ…μ‹œμ  ν˜• λ³€ν™˜μœΌλ‘œ μœ μΆ”ν•΄ 보면 λ‹€μŒκ³Ό κ°™λ‹€. 

< λͺ…μ‹œμ  ν˜•λ³€ν™˜ 예제 >

πŸ’‘ 곡백 μƒνƒœμ˜ CHARλŠ” μ•”λ¬΅μ μœΌλ‘œ 0으둜 μ²˜λ¦¬λœλ‹€. κ·Έλ ‡λ‹€κ³  헀깔리면 μ•ˆ λ˜λŠ” 것이 계산이 될 λ•Œ 0으둜 λ³€ν™˜μ΄ λœλ‹€λŠ” 것이지 μ²˜μŒλΆ€ν„° 0인 것은 μ•„λ‹ˆλ‹€. Initial Value인 곡백(space)으둜 값을 κ°€μ§€κ³  μžˆλŠ”λ‹€. 

< 곡백은 0으둜 계산 >

πŸ’‘ CHAR(λ¬Έμžν˜•)으둜 예제λ₯Ό λ“€μ—ˆμ§€λ§Œ, λ™μΌν•œ 문자 νƒ€μž…μΈ STRING(λ¬Έμžμ—΄)도 λ˜‘κ°™μ΄ ν•΄λ‹Ήλœλ‹€. 


⚠️ μ£Όμ˜μ‚¬ν•­

βœ… CHAR의 μ§€μ •λœ ν•„λ“œ 길이λ₯Ό μ΄ˆκ³Όν•˜λŠ” 경우 μ •ν™•ν•œ 값을 λ°›μ§€ λͺ»ν•œλ‹€.

< CHAR 길이λ₯Ό μ΄ˆκ³Όν•˜λŠ” 경우 예제 >

μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” 계산 κ²°κ³Όκ°€ ν•΄λ‹Ή λ³€μˆ˜μ˜ 길이λ₯Ό μ΄ˆκ³Όν•˜κ³  μžˆλ‹€. 일반적인 계산 결과라면 val1 μ—λŠ” 12, val2 μ—λŠ” 104κ°€ 좜λ ₯이 λ˜μ–΄μ•Ό ν•  것이닀. 

< 예제 결과 >

κ²°κ³Όμ—μ„œ λ³Ό 수 μžˆλ“―μ΄ 계산이 자릿 수과 초과되면 첫 자릿 수의 값이 *으둜 μΉ˜ν™˜λ˜μ–΄ 보여진닀. μ΄λŠ” 였λ₯˜μ΄κΈ΄ ν•˜λ‚˜, 값을 자λ₯΄κ±°λ‚˜ μ˜€λ²„ν”Œλ‘œμš° λ°©μΉ˜ν•˜μ§€ μ•Šκ³  "값이 λ„˜μ³€λ‹€"λŠ” κ±Έ μ‹œκ°μ μœΌλ‘œ μ•Œλ¦¬λŠ” νš¨κ³Όκ°€ μžˆλ‹€. 

 

βœ… 문자 + 숫자 μ‘°ν•©  →  CX_SY_CONVERSION_NO_NUMBER μ˜ˆμ™Έ λ°œμƒ(Dump)

λ‹€μŒκ³Ό 같이 'A'λŠ” μˆ«μžκ°€ μ•„λ‹ˆλ―€λ‘œ μ—°μ‚° κ²°κ³ΌλŠ” λ‹Ήμ—°νžˆ μ—λŸ¬κ°€ λ‚  μˆ˜λ°–μ— μ—†λ‹€. 

< ν˜• λ³€ν™˜ 였λ₯˜ >

βœ… μ‹€λ¬΄μ—μ„œ λ°œμƒν•˜λŠ” 였λ₯˜λ“€ 

  • λͺ…ν™•ν•œ 숫자 처리λ₯Ό ν•΄μ•Ό ν•˜λŠ” κ³³μ—μ„œ 문자 νƒ€μž…μ„ μ“Έ 경우, μ˜€λ™μž‘ν•  수 있음.
  • μ΄ˆκΈ°κ°’μ΄ λΉ„μ–΄ μžˆμ„ λ•Œ, ' ' → 숫자둜 λ³€ν™˜ μ‹œ 0 처리됨.

✨  κ²°λ‘  μ΄λ ‡κ²Œ 쓰도둝 ν•˜μž

  • 숫자λ₯Ό λ‹€λ£° 땐 항상 I, P, F 같은 숫자 μ „μš© νƒ€μž…μ„ μ“°μž.
  • ν˜• λ³€ν™˜μ΄ ν•„μš”ν•˜λ©΄ CONV, MOVE, WRITE TO λ“± λͺ…μ‹œμ  λ³€ν™˜ ν•¨μˆ˜λ₯Ό μ“°μž.
  • CHARλŠ” λ¬Έμž κ·Έ μžμ²΄μΌ λΏ, μˆ«μž κ³„산은 ν”Όν•˜μž (μ˜λ„ μ „달이 λΆˆλͺ…확해짐)
πŸ“Œ  ABAPμ—μ„œλŠ” CHAR νƒ€μž…μ— 숫자 λ¬Έμžκ°€ λ“€μ–΄κ°€λ©΄, λ‚΄λΆ€μ μœΌλ‘œ 숫자둜 암묡적 ν˜• λ³€ν™˜μ΄ λ˜μ–΄ 연산이 κ°€λŠ₯ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이건 νŽΈλ¦¬ν•¨μ„ λ„˜μ–΄ μ˜€μž‘λ™μ˜ 원인이 될 수 μžˆμœΌλ―€λ‘œ, λͺ…μ‹œμ  νƒ€μž… λ³€ν™˜μ„ μŠ΅κ΄€ν™”ν•˜λŠ” 것이 μ’‹κ² λ‹€.