반응형
“정규식 대신에 간단한 메서드를 사용하라”는 지침은 복잡하고 가독성이 떨어질 수 있는 정규 표현식(Regular Expression) 대신, 간단하고 명확한 메서드를 활용하여 문제를 해결하라는 의미입니다. 정규 표현식은 강력하지만, 잘못 사용하면 코드의 복잡도가 높아지고, 다른 개발자들이 이해하기 어려운 코드가 될 수 있습니다. 따라서 간단한 작업을 수행할 때는 정규식을 사용하기보다는 명확한 메서드로 대체하는 것이 더 나은 선택이 될 수 있습니다.
정규식의 문제점
- 복잡성: 정규 표현식은 특정 패턴을 처리하는 데 강력하지만, 매우 복잡해질 수 있습니다. 특히, 정규식을 잘 모르는 개발자들에게는 해독하기 어려운 코드가 될 수 있습니다.
- 가독성 저하: 정규 표현식은 코드의 가독성을 떨어뜨릴 수 있습니다. 정규식 자체가 짧더라도 그 의미를 이해하려면 시간이 걸리기 때문에, 코드 리뷰나 유지보수 시에 어려움을 초래할 수 있습니다.
- 유지보수 어려움: 정규 표현식은 작은 변경에도 예기치 않은 오류를 발생시킬 수 있습니다. 정규식을 수정할 때마다 예상하지 못한 부분에서 문제가 생길 수 있으므로, 유지보수가 어렵습니다.
간단한 메서드를 사용하는 장점
- 명확성: 메서드를 사용하면 코드의 의도가 명확해집니다. 코드의 가독성이 높아지고, 다른 개발자들이 쉽게 이해할 수 있습니다.
- 재사용성: 정규 표현식 대신 메서드를 사용하면, 이 메서드를 재사용할 수 있습니다. 동일한 로직을 여러 곳에서 사용할 때, 코드 중복을 줄일 수 있습니다.
- 유지보수 용이성: 메서드로 로직을 구현하면, 수정이 필요할 때 해당 메서드만 변경하면 됩니다. 이는 유지보수를 쉽게 만들어 줍니다.
* 잘못된 패턴
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.
정규식 조합을 사용할 때 고려할 사항
- 명확한 명명 규칙: 각 정규식 패턴을 변수로 분리할 때, 그 의미가 명확하게 드러나는 이름을 사용하는 것이 중요합니다. 이를 통해 코드의 가독성을 높일 수 있습니다.
- 최소한의 복잡성 유지: 정규식을 조합하는 것도 너무 많이 사용하면 오히려 복잡해질 수 있습니다. 패턴을 너무 세분화하지 않고, 적절한 수준에서 관리하는 것이 중요합니다.
- 주석 사용: 정규식을 조합하여 사용할 때, 각 정규식의 목적과 기능을 명확히 설명하는 주석을 달아두는 것이 좋습니다. 이렇게 하면 코드 리뷰나 유지보수 시에 더 쉽게 이해할 수 있습니다.
- 유효성 검사: 조합된 정규식이 예상대로 작동하는지 충분히 테스트해야 합니다. 특히 패턴이 변경되었을 때, 모든 경우를 처리할 수 있는지 확인해야 합니다.
“복잡한 정규식들을 조합하는 것을 고려하라”는 여러 개의 단순한 정규식을 조합하여 복잡한 패턴을 처리함으로써 코드의 가독성, 유지보수성, 그리고 유연성을 향상시키라는 의미입니다. 정규식을 조합하면 코드가 더 이해하기 쉬워지고, 수정이 필요할 때도 특정 부분만 변경하면 되므로 유지보수가 간편해집니다. 또한, 정규식을 재사용할 수 있어 코드 중복을 줄이고, 효율적인 코드를 작성하는 데 도움이 됩니다.
반응형
'ABAP Clean Code' 카테고리의 다른 글
ABAP 클린 코드 - Class 클래스 (범위) [9-2] (0) | 2024.08.22 |
---|---|
ABAP 클린 코드 - Class 클래스 (객체 지향 클래스) [9-1] (0) | 2024.08.21 |
ABAP 클린 코드 - IF 조건문 [7] (0) | 2024.08.19 |
ABAP 클린 코드 - Condition 컨디션 [6] (0) | 2024.08.18 |
ABAP 클린 코드 - Boolean 불리언 [5] (0) | 2024.08.17 |