If 문은 프로그래밍을 하면서 사용할 수밖에 없는 문법 중 하나이다.
If 문을 사용할 때 보다 가독성 좋고 최적화된 코드로 작성하기 위해 If 문 클린 코드 방법에 대해 정리해보고자 합니다.
단축 평가
자바에서 and와 or 은 &&, || 연산으로 처리합니다.
&&
if(condition1 && condition2 && condition3 && condition4) {}
&& 연산자는 여러 개의 boolean 조건이 있을 때, 하나의 조건이라도 false가 있으면 결과는 false가 됩니다.
즉, 위 조건 식에서 condition1이 false이면 뒤에 있는 조건을 확인하지 않고 조건문을 벗어나게 됩니다.
||
if(condition1 || condition2 || condition3 || condition4) {}
|| 연산자는 여러 개의 boolean 조건이 있을 때 하나의 조건이라도 true이면 결과는 true가 됩니다.
즉, 위의 조건에서 condition1이 true이면 뒤에 조건들을 확인하지 않고 조건문을 벗어납니다.
뒤에 있는 조건을 검사하지 않고 넘어가는 것을 단축 평가라고 합니다. 그래서, 각 조건에서 true, false 값이 간단하게 나오는 상황을 앞 쪽에 위치시키면 뒤에 있는 조건문을 패스할 수 있어 빠르게 조건문을 처리할 수 있습니다.
단점
- 뒤의 연산들을 모두 판단하지 않을 수도 있어 단위 테스트 시에 어려움이 있습니다.
If 문 가독성 높이기
if문을 작성할 때 3중, 4중 … 깊게 depth를 가져가는 것은 좋지 않습니다.
코드 복잡도 뿐만 아니라 가독성 측면에서도 좋지 않아 최대한 깊이가 1인 분기문을 작성하는 것이 좋습니다.
if (cond1) {
if (cond2) {
if (cond3) {
...
}
}
}
위처럼 depth를 길게 가져가지 않고 1중 또는 최대 2중으로 처리하도록 하는 것이 좋습니다.
Guard Clause
프로그래밍에서 특정 조건을 만족하지 않으면 메서드나 함수의 실행을 조기에 종료시키는 방식입니다.
조건을 만족하지 않는 경우를 빠르게 반환하여 이후 복잡한 로직을 건너뛰도록 합니다.
public void processOrder(Order order) {
if (order != null) {
if (order.isValid()) {
// 주문 처리 로직
}
}
}
- order가 null이 아닌지 한 번 검사하고
- order가 유효한지 한 번 더 검사한 다음에 옳은 경우에 메인 로직을 처리합니다.
- 특정 조건을 만족하지 않으면 예외나 함수를 조기 종료 시켜 가독성을 높일 수 있습니다.
public void processOrder(Order order) {
if (order == null || !order.isValid()) {
return; // 조건을 만족하지 않으면 조기 종료
}
// 주문 처리 로직
}
- order가 null이고 유효하지 않다면 조기 종료합니다.
- 메인 로직을 if문 depth 안에 작성하지 않아 가독성을 높일 수 있습니다.
if / else 블록의 순서
- if와 else 문을 사용할 시 if 조건 안에는 긍정 조건을 넣는 것이 좋습니다.
- if 절에 간단한 로직을 넣어 빠른 처리와 가독성을 높일 수 있다.
- 메서드에서 조건에 따라 값을 반환하는 경우 else 문을 적지 않아도 된다.
// 비추천
public void processOrder(Order order) {
if (order != null) {
return order
} else {
return null
}
}
// 추천
public void processOrder(Order order) {
if (order != null) {
return order
}
return null
}
삼항 연산자
간단한 구문일 경우 삼항 연산자를 통해 코드를 한 라인으로 작성할 수 있다.
한 라인으로 처리하기 어려운 경우에는 if/else 문을 사용하는 것이 더 좋다.
// 삼항 연산자가 유리한 경우
String timeType = hour < 12 ? "am" : "pm";
// if/else가 유리한 경우
String timeKor, timeEng;
if (hour < 12) {
timeKor = "오전";
timeEng = "am"
} else {
timeKor = "오후";
timeEng = "pm";
callPmCustomAction();
}
'JAVA' 카테고리의 다른 글
Java string, stringbuilder를 이용해 문자열 합치기 (0) | 2024.11.23 |
---|---|
Java Record 컴팩트 생성자(compactconstructor) 이해하기 - record, @QueryProjection 적용 (0) | 2024.11.18 |
[Java] Java Shutdown Hook 이란 - System.exit() (2) | 2024.09.25 |
[Java] 자바 predicate, consumer, supplier, function 이해하기 - 함수형 인터페이스 이해하기 (3) | 2024.09.22 |
[Java] 자바 추상화 설계 이해하기 - 추상 클래스와 인터페이스 활용 (0) | 2024.09.21 |