ABAP Clean Code

ABAP 클린 코드 - 정규식 [8]

Dev Do 2024. 8. 20. 21:35
반응형
“정규식 대신에 간단한 메서드를 사용하라”는 지침은 복잡하고 가독성이 떨어질 수 있는 정규 표현식(Regular Expression) 대신, 간단하고 명확한 메서드를 활용하여 문제를 해결하라는 의미입니다. 정규 표현식은 강력하지만, 잘못 사용하면 코드의 복잡도가 높아지고, 다른 개발자들이 이해하기 어려운 코드가 될 수 있습니다. 따라서 간단한 작업을 수행할 때는 정규식을 사용하기보다는 명확한 메서드로 대체하는 것이 더 나은 선택이 될 수 있습니다.

 

정규식의 문제점

  1. 복잡성: 정규 표현식은 특정 패턴을 처리하는 데 강력하지만, 매우 복잡해질 수 있습니다. 특히, 정규식을 잘 모르는 개발자들에게는 해독하기 어려운 코드가 될 수 있습니다.
  2. 가독성 저하: 정규 표현식은 코드의 가독성을 떨어뜨릴 수 있습니다. 정규식 자체가 짧더라도 그 의미를 이해하려면 시간이 걸리기 때문에, 코드 리뷰나 유지보수 시에 어려움을 초래할 수 있습니다.
  3. 유지보수 어려움: 정규 표현식은 작은 변경에도 예기치 않은 오류를 발생시킬 수 있습니다. 정규식을 수정할 때마다 예상하지 못한 부분에서 문제가 생길 수 있으므로, 유지보수가 어렵습니다.

 

간단한 메서드를 사용하는 장점

  1. 명확성: 메서드를 사용하면 코드의 의도가 명확해집니다. 코드의 가독성이 높아지고, 다른 개발자들이 쉽게 이해할 수 있습니다.
  2. 재사용성: 정규 표현식 대신 메서드를 사용하면, 이 메서드를 재사용할 수 있습니다. 동일한 로직을 여러 곳에서 사용할 때, 코드 중복을 줄일 수 있습니다.
  3. 유지보수 용이성: 메서드로 로직을 구현하면, 수정이 필요할 때 해당 메서드만 변경하면 됩니다. 이는 유지보수를 쉽게 만들어 줍니다.
* 잘못된 패턴
DATA: lv_text TYPE string.
lv_text = 'Hello123'.

IF lv_text CS '[0-9]'.
  WRITE: / 'Contains a number'.
ENDIF.

 

* 올바른 패턴
METHOD contains_number.
  LOOP AT lv_text INTO DATA(char).
    IF char CO '0123456789'.
      RETURN abap_true.
    ENDIF.
  ENDLOOP.
  RETURN abap_false.
ENDMETHOD.

DATA: lv_text TYPE string.
lv_text = 'Hello123'.

IF contains_number( lv_text ) = abap_true.
  WRITE: / 'Contains a number'.
ENDIF.

 

정규식 대신, 숫자가 포함되어 있는지 확인하는 간단한 메서드를 사용했습니다. 메서드명 contains_number는 무엇을 하는지 명확히 설명하며, 다른 사람이 코드를 쉽게 이해할 수 있습니다.

 

언제 정규식을 사용해야 할까?

정규식이 불가피한 경우도 있습니다. 정규식은 매우 복잡한 패턴 매칭이나 문자열 변환이 필요할 때 유용합니다. 단, 정규식을 사용할 때는 코드의 가독성을 위해 주석을 추가하여 설명을 명확히 하거나, 해당 정규식을 메서드로 분리해 가독성을 높이는 것이 좋습니다.

 

“정규식 대신에 간단한 메서드를 사용하라”는 복잡하고 가독성이 떨어질 수 있는 정규 표현식을 가능한 한 피하고, 대신 간단한 메서드로 문제를 해결하라는 의미입니다. 메서드를 사용하면 코드의 명확성, 가독성, 재사용성, 유지보수성이 향상됩니다. 정규식이 필요한 경우에도, 코드의 의미를 명확하게 표현하고 가독성을 유지하는 데 신경 써야 합니다.

 

“정규식 대신에 기본적인 체크를 하라”는 지침은 복잡한 정규 표현식을 사용하는 대신, 단순한 문제는 기본적인 논리나 조건문을 사용하여 해결하라는 의미입니다. 정규식은 강력한 도구이지만, 복잡하고 가독성이 떨어질 수 있기 때문에, 단순한 체크 작업이라면 정규식을 피하고 기본적인 방법으로 문제를 해결하는 것이 더 나은 경우가 많습니다.

 

* 잘못된 패턴
DATA(lv_text) = 'AB123'.
IF lv_text CS '^[A-Z]{2}[0-9]{3}$'.
  WRITE: / 'Matches pattern'.
ENDIF.

 

* 올바른 패턴
DATA(lv_text) = 'AB123'.
IF lv_text(2) CO 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' AND
   lv_text+2(3) CO '0123456789'.
  WRITE: / 'Matches pattern'.
ENDIF.

 

정규식을 피할 수 있는 다른 ABAP 함수들

 

ABAP에는 문자열 작업을 간단하게 처리할 수 있는 여러 함수와 조건문이 있습니다. 이들 함수를 활용하면 정규식 없이도 다양한 작업을 수행할 수 있습니다.

 

  • CO: 문자열에 특정 문자가 포함되어 있는지 확인
  • CA: 문자열에 특정 문자가 하나라도 포함되어 있는지 확인
  • CS: 문자열이 특정 문자열을 포함하는지 확인
  • CP: 문자열이 특정 패턴에 맞는지 확인 (예: 와일드카드)
  • SHIFT: 문자열에서 특정 부분을 이동
  • SPLIT: 문자열을 구분자를 기준으로 나누기
  • CONCATENATE: 문자열 결합

이러한 함수들은 문자열 작업을 간단하게 처리할 수 있도록 돕기 때문에, 복잡한 정규식을 사용하는 대신 간단한 체크로 문제를 해결할 수 있는 경우가 많습니다.

 

“정규식 대신에 기본적인 체크를 하라”는 복잡한 정규 표현식을 사용하지 않고, 기본적인 조건문이나 문자열 함수를 사용하여 문제를 해결하라는 의미입니다. 이를 통해 코드의 가독성, 유지보수성, 그리고 단순함을 유지할 수 있습니다. 정규식이 필요한 경우도 있지만, 가능한 경우 간단한 체크 방법을 사용하여 코드의 복잡성을 줄이고, 더 명확한 코드를 작성하는 것이 바람직합니다.

 

“복잡한 정규식들을 조합하는 것을 고려하라”는 지침은 여러 개의 단순한 정규 표현식을 조합하여 복잡한 패턴을 처리할 때 유용하다는 의미입니다. 이는 코드의 효율성을 높이고, 중복을 줄이며, 정규식의 가독성과 유지보수성을 향상시키는 데 도움이 됩니다. 복잡한 문제를 해결할 때 단일 정규식을 사용하기보다는, 여러 정규식을 조합하는 방식을 통해 코드의 유연성과 재사용성을 극대화할 수 있습니다.

 

* 잘못된 패턴
DATA: lv_email TYPE string.
lv_email = 'test@example.com'.

IF lv_email CS '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$'.
  WRITE: / 'Valid email address'.
ELSE.
  WRITE: / 'Invalid email address'.
ENDIF.

 

* 올바른 패턴
CONSTANTS: pattern_local_part TYPE string VALUE '^[A-Za-z0-9._%+-]+',
           pattern_domain     TYPE string VALUE '[A-Za-z0-9.-]+\.[A-Za-z]{2,}$'.

DATA: lv_email TYPE string.
lv_email = 'test@example.com'.

IF lv_email CS pattern_local_part && '@' && pattern_domain.
  WRITE: / 'Valid email address'.
ELSE.
  WRITE: / 'Invalid email address'.
ENDIF.

 

정규식 조합을 사용할 때 고려할 사항

 

  1. 명확한 명명 규칙: 각 정규식 패턴을 변수로 분리할 때, 그 의미가 명확하게 드러나는 이름을 사용하는 것이 중요합니다. 이를 통해 코드의 가독성을 높일 수 있습니다.
  2. 최소한의 복잡성 유지: 정규식을 조합하는 것도 너무 많이 사용하면 오히려 복잡해질 수 있습니다. 패턴을 너무 세분화하지 않고, 적절한 수준에서 관리하는 것이 중요합니다.
  3. 주석 사용: 정규식을 조합하여 사용할 때, 각 정규식의 목적과 기능을 명확히 설명하는 주석을 달아두는 것이 좋습니다. 이렇게 하면 코드 리뷰나 유지보수 시에 더 쉽게 이해할 수 있습니다.
  4. 유효성 검사: 조합된 정규식이 예상대로 작동하는지 충분히 테스트해야 합니다. 특히 패턴이 변경되었을 때, 모든 경우를 처리할 수 있는지 확인해야 합니다.
“복잡한 정규식들을 조합하는 것을 고려하라”는 여러 개의 단순한 정규식을 조합하여 복잡한 패턴을 처리함으로써 코드의 가독성, 유지보수성, 그리고 유연성을 향상시키라는 의미입니다. 정규식을 조합하면 코드가 더 이해하기 쉬워지고, 수정이 필요할 때도 특정 부분만 변경하면 되므로 유지보수가 간편해집니다. 또한, 정규식을 재사용할 수 있어 코드 중복을 줄이고, 효율적인 코드를 작성하는 데 도움이 됩니다.
반응형