๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

ABAP Implimentation (๐Ÿ› ๏ธ์‹ค๋ฌด)/Clean ABAP

ABAP Clean Code : ๋ณ€์ˆ˜์™€ ๋ฆฌํ„ฐ๋Ÿด(Variables and Literals) - ๋ฌธ์ž์—ด(String)

์ด ๊ธ€์€ ใ€ŽClean ABAP – A Style Guide for Developersใ€ ์„œ์  (written by Klaus Haeuptle, Florian Hoffmann, Rodrigo Jordão, Michel Martin, Anagha Ravinarayan, Kai Westerholz) ์„ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๋‚ด์šฉ์„ ์ข€ ๋” ์‰ฝ๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์š”์•ฝ/์ •๋ฆฌ ๋ฐ ๊ฐœ์ธ์ ์ธ ์˜๊ฒฌ์„ ๋ถ™์—ฌ ์žฌ๊ตฌ์„ฑํ•œ  ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค. 

 

 

 

ABAP ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด ์ฝ”๋“œ ์•ˆ์— ๋ฌธ์ž์—ด์„ ์ง์ ‘ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋‚˜ ํ…Œ์ŠคํŠธ ์ถœ๋ ฅ ๋ฌธ๊ตฌ์ฒ˜๋Ÿผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜๋„ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๋Š” ๊ฒฝ์šฐ์ด๋‹ค. ABAP์—์„œ ๋ฌธ์ž์—ด(STRING)์„ ํด๋ฆฐํ•˜๊ฒŒ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.


1. ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด ์‚ฌ์šฉ  -  ' (์ž‘์€๋”ฐ์˜ดํ‘œ) vs ` (๋ฐฑํ‹ฑ)

๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์ด๋ž€ ์†Œ์Šค ์ฝ”๋“œ ๋‚ด์— ์ง์ ‘ ์ž…๋ ฅํ•œ ํ…์ŠคํŠธ ๋ฌธ์ž๋ฅผ ๋งํ•œ๋‹ค. ํ•˜์ง€๋งŒ ํ…์ŠคํŠธ ๋ฌธ์ž๊ฐ€ ์–ด๋–ค ๊ธฐํ˜ธ๋กœ ๊ฐ์‹ธ์กŒ๋А๋ƒ์— ๋”ฐ๋ผ ํƒ€์ž…๊ณผ ๋™์ž‘ ๋ฐฉ์‹์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค. 

 

๐Ÿ” 'ํ…์ŠคํŠธ' (์ž‘์€๋”ฐ์˜ดํ‘œ)

DATA text TYPE string.
text = 'Hello, Two ssun!'.
  • ์ž‘์€๋”ฐ์˜ดํ‘œ ' '๋Š” CHAR(๋ฌธ์ž) ํƒ€์ž… ๋ฆฌํ„ฐ๋Ÿด์„ ์˜๋ฏธํ•จ
  • STRING์œผ๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜์— CHAR ๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•˜๋Š” ํ˜•ํƒœ
  • CHAR ํƒ€์ž…์€ ๊ณ ์ • ๊ธธ์ด ๋ฌธ์ž์ด๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€์ƒ ๋ณ€์ˆ˜๊ฐ€ STRING ํƒ€์ž…์ด๋ฉด ์•”๋ฌต์  ํ˜•๋ณ€ํ™˜์ด ๋ฐœ์ƒ

๐Ÿ” `ํ…์ŠคํŠธ` (๋ฐฑํ‹ฑ)

DATA text TYPE string.
text = `Hello, Two ssun!`.
  • ๋ฐฑํ‹ฑ `์€ STRING(๋ฌธ์ž์—ด) ํƒ€์ž… ๋ฆฌํ„ฐ๋Ÿด์„ ์˜๋ฏธํ•จ
  • STRING ํƒ€์ž… ๋ณ€์ˆ˜์— ๋„ฃ์„ ๋•Œ ํ˜•๋ณ€ํ™˜์ด ํ•„์š” ์—†์ด ์•ˆ์ „ํ•˜๊ฒŒ ๋“ค์–ด๊ฐ

2. โš ๏ธInline Declaration (์ธ๋ผ์ธ ์„ ์–ธ)์‹œ ์ฃผ์˜์‚ฌํ•ญ

DATA(log_message1) = 'Saved successfully'.

์œ„ ์˜ˆ์‹œ๋Š” ์ธ๋ผ์ธ ์„ ์–ธ์ด์–ด์„œ String(๋ฌธ์ž์—ด) ํƒ€์ž…์œผ๋กœ ๋ณด์ด์ง€๋งŒ ์‹ค์ œ๋กœ ' (์ž‘์€ ๋”ฐ์˜ดํ‘œ)๋ฅผ ์‚ฌ์šฉํ–ˆ์œผ๋ฏ€๋กœ, ํ•ด๋‹น ๋ณ€์ˆ˜๋Š” CHAR(๋ฌธ์ž) ํƒ€์ž… ๋ฆฌํ„ฐ๋Ÿด ์ธ 18์ž๋ฆฌ ๊ณ ์ •์œผ๋กœ ์„ ์–ธ๋œ๋‹ค. 

 

์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๋’ท๋ถ€๋ถ„ ๋กœ์ง์—์„œ ํ•ด๋‹น ๋ณ€์ˆ˜์— ๋‹ค๋ฅธ ๋ฉ”์‹œ์ง€๋ฅผ ๋„ฃ์„ ๊ฒฝ์šฐ, ์˜ˆ๋ฅผ ๋“ค์–ด ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋„ฃ์—ˆ์„ ๋•Œ ๋ฉ”์‹œ์ง€๊ฐ€ ๊ธธ์–ด์ง„๋‹ค๋ฉด 18์ž๋ฆฌ๋กœ ์ž˜๋ ค์„œ ๋ณด์ผ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.  ๋”ฐ๋ผ์„œ ์ธ๋ผ์ธ ์„ ์–ธ ์‹œ์—” ๋ฐ˜๋“œ์‹œ ` (๋ฐฑํ‹ฑ)์„ ์‚ฌ์šฉํ•ด STRING ํƒ€์ž…์œผ๋กœ ์ •ํ™•ํžˆ ์ง€์ •ํ•˜๋„๋ก ํ•˜์ž.

DATA(log_message2) = `Saved successfully`.

 

< ๋””๋ฒ„๊น… ์‹œ ์ธ๋ผ์ธ ๋ณ€์ˆ˜ ์„ ์–ธ์‹œ ' ์™€ ` ์œผ๋กœ ๊ฒฐ์ •๋˜๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž… >


3. ๊ณ ์ • ํ…์ŠคํŠธ๋ฉด ์ƒ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์ž. 

๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ž์—ด์ด๋ผ๋ฉด, CONSTANTS ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜๋„๋ฅผ ๋ช…ํ™•ํžˆ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ฝ”๋“œ์˜ ์˜๋ฏธ๋„ ๋” ๋ช…ํ™•ํ•ด์ง€๊ณ  ์œ ์ง€๋ณด์ˆ˜ ์‹œ ์‹ค์ˆ˜๋„ ์ค„์–ด๋“ค๊ฒŒ ๋œ๋‹ค.

CONSTANTS success_message  TYPE string VALUE `Saved successfully`.

4. String Interpolation(๋ฌธ์ž์—ด ๋ณด๊ฐ„) - ํŒŒ์ดํ”„ ๊ตฌ๋ฌธ( |  | ) ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ๋ฐฉ์‹.

์‹ค๋ฌด์—์„œ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์ž์—ด์€ ๊ทธ ๋ฉ”์‹œ์ง€, ์˜ค๋ฅ˜ ์‘๋‹ต, ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ๋“ฑ๊ณผ ๊ฐ™์ด "๊ณ ์ •๋œ ๋ฌธ๊ตฌ + ๋ณ€์ˆ˜ ๊ฐ’" ์ฒ˜๋Ÿผ๋™์ ์œผ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ์ด์ฒ˜๋Ÿผ ์ •์ ์ธ ๋ฌธ์ž์—ด๊ณผ ๋ณ€์ˆ˜ ๊ฐ’์„ ์กฐํ•ฉํ•˜๋ ค๋ฉด, ๋ฌธ์ž์—ด ๋ณด๊ฐ„(string interpolation)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ ํ›จ์”ฌ ์œ ๋ฆฌํ•˜๋‹ค. 

DATA(order_message) = `Sales Order ` && l_vbeln && ` Created.'

 

์œ„์˜ ์˜ˆ์ œ๋Š” ๊ณผ๊ฑฐ์— ์ž์ฃผ ์‚ฌ์šฉ๋˜์—ˆ๋˜ ๋ฐฉ์‹์œผ๋กœ ๋ณ€์ˆ˜์™€ "&&" ๋Š” ๋ฌธ์ž์—ด์„ ์กฐํ•ฉํ•  ๋•Œ ์œ ์šฉํ–ˆ์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ์ ์ด ์žˆ๋‹ค.

  • ๋ฌธ์ž์—ด์˜ ์‹œ์ž‘๊ณผ ๋์ด ์–ด๋””์ธ์ง€, ๋ณ€์ˆ˜๋Š” ์–ด๋””์— ์žˆ๋Š”์ง€ ์ง๊ด€์ ์œผ๋กœ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์›€
  • ๋ณ€์ˆ˜ ๊ฐœ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด ์ฝ”๋“œ๊ฐ€ ์ฝ๊ธฐ ์–ด๋ ต๊ณ , ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ํž˜๋“ค์–ด์ง
DATA(order_message) = |Sales Order { l_vbeln } Created.|.

 

์œ„์˜ ์˜ˆ์ œ๋Š” new syntax์— ์ƒ๊ธด ํŒŒ์ดํ”„ ๊ตฌ๋ฌธ " |  | " ์‚ฌ์šฉํ•œ ๋ฌธ์ž์—ด ๋ณด๊ฐ„์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ์ด ์žˆ๋‹ค. 

  • ๋ฌธ์ž์—ด ํ๋ฆ„ ์•ˆ์— ๋ณ€์ˆ˜ ์œ„์น˜๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณด์—ฌ ๊ฐ€๋…์„ฑ์ด ๋งค์šฐ ๋›ฐ์–ด๋‚จ
  • ` (๋ฐฑํ‹ฑ) ์—†์ด๋„ ๋ฐ”๋กœ STRING ํƒ€์ž…์œผ๋กœ ์ธ์‹ํ•จ
  • ๋ณ€์ˆ˜์— ๋‹ด์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์ฆ‰์„์—์„œ ๋ฌธ์ž์—ด ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•จ (ex. MESSAGE | Sales Order { l_vbeln } Created. | TYPE 'S'. )

 

โš ๏ธ ๋ณด๊ฐ„๋ฒ•์€ ์˜ค์ง ๋ณ€์ˆ˜๋‚˜ ํ‘œํ˜„์‹์ด ํฌํ•จ๋  ๋•Œ๋งŒ ์‚ฌ์šฉํ•˜์ž.

โŒ Bad Case
welcome_message = |Hello, Two ssun!|.

โœ… Good Case
welcome_message = `Hello, Two ssun!`.

 

๋ณ€์ˆ˜ ๋˜๋Š” ํ‘œํ˜„์‹ ์‚ฌ์šฉ์ด ์—†๋Š” ์ผ๋ฐ˜์ ์ธ ๊ณ ์ • ๋ฌธ๊ตฌ๋ฅผ ๊ตณ์ด ํŒŒ์ดํ”„ ๊ตฌ๋ฌธ |   | ๋ฅผ ์ด์šฉํ•  ํ•„์š”๋Š” ์—†๋‹ค. ํ•ด๋‹น ๋ฌธ๋ฒ•์€ ๋ฌธ์ž์—ด ๋ณด๊ฐ„์„ ์œ„ํ•œ ๊ฒƒ์ด๋ฏ€๋กœ `   `๋ฐฑํ‹ฑ์œผ๋กœ๋„ ์ถฉ๋ถ„ํžˆ ์„ ์–ธ ๊ฐ€๋Šฅํ•˜๋‹ค. 

 


โœ๏ธ ํ•˜๋“œ์ฝ”๋”ฉ ๋Œ€์‹  ๋ฉ”์‹œ์ง€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ž.

์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ๋ฌธ์ž์—ด์€ ์ฝ”๋“œ์— ์ง์ ‘ ํ•˜๋“œ์ฝ”๋”ฉํ•˜์ง€ ๋ง๊ณ , ๋ฉ”์‹œ์ง€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์ด ๋ฐฉ์‹์€ ๋‹ค๊ตญ์–ด ์ง€์›
( ๋ฒˆ์—ญ ์‹œ์Šคํ…œ ์—ฐ๊ณ„ ), ์ค‘์•™ ๊ด€๋ฆฌ, ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด์„ฑ(์žฌ์‚ฌ์šฉ),  ๋“ฑ์˜ ์žฅ์ ์ด ์žˆ๋‹ค. ๋˜ํ•œ ๋ณ€์ˆ˜ ์ž๋ฆฌ( & )๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์–ด ๋ฌธ์ž์—ด ๋ณด๊ฐ„ ์—†์ด๋„ ์ƒํ™ฉ๋ณ„ ๋ฉ”์‹œ์ง€๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.