[클린코드] 읽기 쉬운 분기문(if) 작성법
by 배부른코딩로그💡 매일 더 나은 코드를 작성해보자!
목표
- 읽기 쉬운 분기문(if)를 작성할 수 있다.
- 예제를 통해 개선된 코드의 장점을 말할 수 있다.
코드를 유지보수 하다보면, 조건문이나 분기문이 작성한 사람의 입맛대로 구현되어 있는 경우가 많다.
어떻게 하면 효율적인 분기문을 작성할 수 있을까?
어떻게 하면 더 읽기 쉽고 파악하기 좋은 분기문을 작성할 수 있을까?
이러한 고민을 바탕으로 정말 중요하다고 생각하는 작성 방법에 대해 정리해본다.
가독성을 높이는 습관
보호절 숙어(Guard Clause)
if문을 작성할 때, 가장 주의할 점은 깊이(Deep)이다.
이중(if 안에 if), 삼중, N 중 중첩문을 가장 기피해야 한다.
이는 코드 복잡도를 올릴뿐만 아니라 코드에 대한 가독성도 무차별적으로 파괴시키는 안 좋은 방식이다.
가능하다면 최대한 깊이가 1인 분기문을 작성하는 것이 좋다.
if (!isEmpty) {
// 메인로직
}
if (isEmpty) {
return;
}
// 메인로직
Guard Clause이란, 사전 조건이 판별하여 거짓이라면 예외 혹은 반환 처리하여 더 이상 다음 단계가 실행되지 않도록 사전에 차단하는 방식이다. 이 습관을 갖고 있는 프로그래머는 분기 처리에 어마 무시한 변화를 일으킨다.
public void guardClause() {
Client client = new Client();
if (client != null) {
ClientDetail clientDetail = client.getClientDetail();
if (clientDetail != null) {
List<Order> orders = clientDetail.getOrders();
if (orders.size() > 0) {
// 실제 처리할 로직
doSomething();
}
}
}
}
public void guardClause() {
Client client = new Client();
if (client == null) {
return;
}
ClientDetail clientDetail = client.getClientDetail();
if (clientDetail == null) {
return;
}
List<Order> orders = clientDetail.getOrders(); // NOT NULL
if (orders.size() == 0) {
return;
}
// 실제 처리할 로직
doSomething();
}
N중 중첩 IF문은 가독성을 심각히 떨어트린다.
좋은 분기 처리를 하기 위해 Guard Clause 방식을 필수적이다.
만약, 불가피하게 조건문 안에 조건문이 필요할 경우는 어떻게 해야 할까?
함수를 통해 의존성을 만들어주는 방식으로 해결하자.
즉, doSomething()이라는 함수를 호출하는 것이다. 호출된 함수 내에 새로운 조건문이 있는 것이다.
조건문 인수 규칙
개발자마다 팀마다 스타일이 다를 수 있음을 유의하자.
좌변에 유동적인 값을 작성하고, 우변에는 상수와 같은 고정값을 기입하도록 하자.
if (orders == ORDER.EMPTY) { // ORDER.EMPTY == 0
return;
}
if/else 조건의 경우, if 에는 가능한 긍정의 조건을 기입하자.
if (isEmpty) {
// 빈값이라면,
} else {
// 빈값이 아니라면, 추가로직.
}
단, Guard Clause 구문으로 변경 가능하다면, if/else문은 안티패턴임을 유의하여야 한다.
조건에 대해 중첩 괄호은 최소화하자.
// if (!(isEmpty && !isRunnable)) {
// throw new NotCompletedException();
// }
if (!isEmpty || isRunnable) {
throw new NotCompletedException();
}
괄호가 적을수록 조건에 대한 가독성이 좋아진다고 볼 수 있다.
출처
- 좋은 분기문(if) 작성법, DevOOOOOOOOP, 2016-04-01
- 분기를 작성하는 방법 n가지, ChoDragon9
- 성능과 가독성을 높이는 분기처리 방법, Dev Log Island(jeaha), 2020-12-11
- if, switch 누가 더 빠를까?, 제리92, 2021-12-06
- *클린 코드 핵심 요약 및 정리, MangKyu's Diary, 2021-03-05
- 지금까지 사용하던 for 루프를 더 빠르게 할 수 있다고?, 양봉수 블로그, 2020
- 자바 성능을 결정짓는 코딩습관과 튜닝이야기, 이상민, 2019.04.25
Last Updated. 2022. 05. 16.
블로그의 정보
배부른코딩로그
배부른코딩로그