반응형
“컨디션을 긍정문으로 작성하라”는 프로그래밍에서 조건문을 작성할 때, 부정적인 표현(예: NOT, !=, IS NOT INITIAL)보다는 긍정적인 표현을 사용하라는 의미입니다. 이는 코드의 가독성을 높이고, 논리적 오류를 줄이기 위해 권장되는 코딩 스타일입니다.
긍정문 조건과 부정문 조건의 차이점
부정문 조건: 조건이 부정적으로 표현됩니다. 예를 들어, NOT, <>, IS NOT INITIAL 같은 구문을 사용합니다.
IF NOT lv_value IS INITIAL.
* 로직 수행
ENDIF.
긍정문 조건: 조건이 긍정적으로 표현됩니다. 예를 들어, =, IS INITIAL 같은 구문을 사용합니다.
IF lv_value IS INITIAL.
* lv_value가 is initial 인 경우
ELSE.
* lv_value가 is not initial 인 경우
ENDIF.
긍정문 조건을 사용하는 이유
- 가독성 향상: 긍정문으로 조건을 작성하면 코드의 의도가 더 명확하게 드러납니다. 긍정적인 조건은 이해하기 쉽고 직관적이기 때문에, 코드 리뷰나 유지보수 시에 더 쉽게 파악할 수 있습니다.
- 논리적 오류 감소: 부정문 조건은 논리적인 오류를 일으킬 가능성이 더 큽니다. 여러 조건이 결합된 복잡한 논리에서 부정문을 사용하면 혼란을 초래할 수 있습니다. 긍정문으로 작성된 조건은 논리적인 오류 발생 가능성을 줄여줍니다.
- 코드 일관성 유지: 긍정문 조건은 코드를 일관되게 유지할 수 있습니다. 조건문에서 동일한 논리 구조를 사용하면, 다른 개발자들이 코드를 읽고 이해하기 더 쉬워집니다.
예외 상황
물론 모든 조건문을 긍정문으로 작성할 수 있는 것은 아닙니다. 특정 논리 흐름에서 부정문이 더 자연스러울 수도 있습니다. 그러나 일반적으로 조건이 긍정적으로 표현될 수 있을 때는 긍정문을 사용하는 것이 바람직합니다.
“컨디션을 긍정문으로 작성하라”는 조건문을 작성할 때 가능한 긍정적인 표현을 사용하여 코드를 더 명확하고 읽기 쉽게 작성하라는 의미입니다. 긍정문을 사용하면 코드의 가독성이 향상되고, 논리적인 오류를 줄일 수 있으며, 코드의 유지보수성을 높일 수 있습니다.
“NOT IS보다 IS NOT을 사용하라”는 지침은 ABAP에서 조건문을 작성할 때, 부정 조건을 표현할 때 NOT 연산자와 IS 조합을 사용하기보다는 IS NOT 구문을 사용하는 것이 더 명확하고 가독성이 좋다는 의미입니다.
NOT IS와 IS NOT의 차이점
- NOT IS: NOT 연산자를 사용하여 조건을 부정하는 방식입니다. 예를 들어, NOT IS INITIAL, NOT IS BOUND와 같은 구문이 여기에 해당합니다.
* NOT IS
IF NOT lv_value IS INITIAL.
* 특정 작업 수행
ENDIF.
- IS NOT: ABAP에서 제공하는 문법으로, 조건을 부정적으로 표현할 때 사용됩니다. 예를 들어, IS NOT INITIAL, IS NOT BOUND와 같은 구문이 여기에 해당합니다.
* IS NOT
IF lv_value IS NOT INITIAL.
* 특정 작업 수행
ENDIF.
“NOT IS보다 IS NOT을 사용하라”는 조건문에서 부정 조건을 표현할 때, 더 명확하고 가독성이 좋은 IS NOT 구문을 사용하라는 의미입니다. IS NOT 구문은 조건의 부정을 더 직관적으로 표현하며, 코드의 일관성을 유지하고, 논리적 오류를 방지하는 데 도움이 됩니다. 따라서 ABAP에서 조건문을 작성할 때는 가능한 한 IS NOT 구문을 사용하는 것이 바람직합니다.
“복잡한 컨디션들을 쪼개는 것을 고려하라”는 복잡한 조건문을 작성할 때, 하나의 긴 조건문을 여러 개의 작은 조건으로 나누어 처리하라는 의미입니다. 이 지침은 코드의 가독성, 유지보수성, 그리고 논리적 명확성을 높이기 위한 중요한 코딩 스타일 원칙입니다.
왜 복잡한 조건문을 쪼개야 하는가?
- 가독성 향상: 복잡한 조건문을 하나의 긴 문장으로 작성하면 코드의 의도가 명확하지 않을 수 있습니다. 조건을 쪼개어 처리하면 각 조건의 의미가 더 명확해지고, 코드가 더 읽기 쉬워집니다.
- 유지보수 용이: 긴 조건문은 수정하기 어렵습니다. 조건을 쪼개어 변수로 저장하거나 별도의 함수로 분리하면, 나중에 로직을 수정하거나 확장할 때 더 쉽게 유지보수할 수 있습니다.
- 논리적 오류 방지: 조건이 너무 복잡하면 논리적인 오류를 일으킬 가능성이 높아집니다. 조건을 쪼개어 각각의 조건이 올바르게 평가되는지 확인함으로써 오류를 줄일 수 있습니다.
* 잘못된 패턴
IF ( lv_status = 'ACTIVE' AND lv_role = 'ADMIN' AND lv_login_attempts < 3 ).
* 로직 수행
ENDIF.
* 올바른 패턴
DATA: lv_is_active TYPE abap_bool,
lv_is_admin TYPE abap_bool,
lv_login_ok TYPE abap_bool.
lv_is_active = xsdbool( lv_status = 'ACTIVE' ).
lv_is_admin = xsdbool( lv_role = 'ADMIN' ).
lv_login_ok = xsdbool( lv_login_attempts < 3 ).
IF lv_is_active = abap_true AND lv_is_admin = abap_true AND lv_login_ok = abap_true.
* 로직 수행
ENDIF.
조건을 쪼갤 때 고려할 사항
- 조건의 의미 명확화: 조건을 쪼개면 각 조건이 의미하는 바가 더 명확해집니다. 각각의 조건이 무엇을 나타내는지 코드에서 드러나도록 변수명이나 함수명을 신중하게 선택합니다.
- 조건 간의 논리적 관계 유지: 조건을 쪼개더라도 원래의 논리적 관계를 유지해야 합니다. 각 조건이 독립적으로 평가된 후, 이를 결합하여 최종 결과를 얻도록 작성해야 합니다.
- 디버깅 및 테스트 용이성: 쪼개진 조건들은 개별적으로 테스트하고 디버깅할 수 있어야 합니다. 복잡한 조건을 쪼개면, 각 조건이 올바르게 평가되고 있는지 확인하기가 더 쉬워집니다.
- 함수 사용 고려: 반복적으로 사용되는 복잡한 조건은 함수로 분리하는 것이 좋습니다. 이렇게 하면 로직을 재사용할 수 있고, 코드의 유지보수성이 높아집니다.
“복잡한 컨디션들을 쪼개는 것을 고려하라”는 복잡한 조건문을 하나로 작성하지 말고, 여러 개의 작은 조건으로 나누어 처리하라는 의미입니다. 조건을 쪼개면 코드의 가독성, 유지보수성, 그리고 논리적 명확성이 향상됩니다. 각각의 조건을 변수나 함수로 분리하면 코드가 더 명확해지고, 나중에 수정하거나 디버깅하기도 더 쉬워집니다.
“복잡한 컨디션들을 메서드화하라”는 복잡한 조건문을 간결하고 명확하게 만들기 위해, 이를 별도의 메서드로 분리하여 처리하라는 의미입니다. 복잡한 조건을 메서드로 분리하면 코드의 가독성과 재사용성을 높일 수 있으며, 유지보수와 테스트가 쉬워집니다.
왜 복잡한 조건을 메서드화해야 하는가?
- 가독성 향상: 복잡한 조건을 하나의 메서드로 분리하면, 코드의 본질적인 논리 흐름이 더 명확해집니다. 메서드명은 조건이 어떤 의미를 가지는지 잘 설명할 수 있으며, 코드 읽기가 쉬워집니다.
- 유지보수 용이: 복잡한 조건이 메서드로 분리되면, 나중에 조건 로직을 수정해야 할 때 해당 메서드만 수정하면 됩니다. 따라서 유지보수가 용이해집니다.
- 재사용성: 복잡한 조건을 메서드로 분리하면, 동일한 조건이 여러 곳에서 필요할 때 메서드를 재사용할 수 있습니다. 이를 통해 코드 중복을 줄일 수 있습니다.
- 테스트 용이: 메서드로 분리된 조건은 독립적으로 테스트할 수 있습니다. 이를 통해 조건 로직이 정확히 작동하는지 개별적으로 확인할 수 있습니다.
* 위에 잘못된 패턴 중 복잡한 IF문을 METHOD화
METHODS: can_user_access_admin_area RETURNING VALUE(rv_result) TYPE abap_bool.
METHOD can_user_access_admin_area.
rv_result = xsdbool( lv_status = 'ACTIVE' AND lv_role = 'ADMIN' AND lv_login_attempts < 3 ).
ENDMETHOD.
IF can_user_access_admin_area( ) = abap_true.
* 관리자 액세스 허용 로직 작성
ENDIF.
“복잡한 컨디션들을 메서드화하라”는 복잡한 조건문을 간결하고 명확하게 만들기 위해, 이를 별도의 메서드로 분리하여 처리하라는 의미입니다. 메서드화하면 코드의 가독성, 재사용성, 유지보수성, 그리고 테스트 용이성이 크게 향상됩니다. 복잡한 조건이 반복되거나 수정될 가능성이 있다면, 메서드로 분리하는 것을 고려하는 것이 좋습니다.
반응형
'ABAP Clean Code' 카테고리의 다른 글
ABAP 클린 코드 - 정규식 [8] (0) | 2024.08.20 |
---|---|
ABAP 클린 코드 - IF 조건문 [7] (0) | 2024.08.19 |
ABAP 클린 코드 - Boolean 불리언 [5] (0) | 2024.08.17 |
ABAP 클린 코드 - 문자열 [4] (0) | 2024.08.16 |
ABAP 클린 코드 - 테이블 [3-2] (0) | 2024.08.15 |