이번 글에서는 else 예약어를 지양해야 하는 이유에 대해서 설명해보려고한다.
If - else
- If - else는 프로그래밍에서 조건에 따라 다른 코드를 실행하도록 하는 조건문이다.
- 조건은 프로그래밍에 있어서 매우 중요한 요소이며, 이를 통해 우리는 여러 제약을 걸어 프로그램을 구현할 수 있다.
- 그런데 이런 구조에서 else를 지양하자니 무슨 말인 걸까?
else를 지양하자?
- 이번에 코드리뷰를 받아보면서 else 예약어를 지양해야 한다는 말을 듣게되었다.
- 이유가 궁금해 찾아보았고, if -else 구조에서 else 예약어를 사용하게 되면 가독성과 유지보수성이 떨어진다는 말을 보게 되었다.
- 실제로 위와 같이 if - else가 반복되는 상황에는 보기 싫은 코드가 될 수 있겠으나 실제로 위와 같이 사용하는 경우는 드물다.
- 그렇기에 처음 피드백을 받고나서는 else 예약어를 지양해야한다는 말은 잘 와닿지 않았다.
- 아래는 피드백을 받고나서 작성했던 코드이다.
if (drawResult == 3) { // 5등
totalPrize += Constant.STATICS_FIFTH_PRIZE.getConstant();
fifthCount++;
}
if (drawResult == 4) { // 4등
totalPrize += Constant.STATICS_FOURTH_PRIZE.getConstant();
fourthCount++;
}
if (drawResult == 5 && !bonusResult) { // 3등
totalPrize += Constant.STATICS_THIRD_PRIZE.getConstant();
thirdCount++;
}
if (drawResult == 5 && bonusResult) {
totalPrize += Constant.STATICS_SECOND_PRIZE.getConstant();
secondCount++;
}
if (drawResult == 6) {
totalPrize += Constant.STATICS_FIRST_PRIZE.getConstant();
firstCount++;
}
- 그냥 else문을 쓰면 안된다는 생각으로 작성하다보니 터무니 없는 코드가 나와버렸다.
- 위 코드에서는 변수는 결국엔 모든 if 문을 거치게 되고, 이는 비효율적인 코드의 모범이 되어버렸다.
- 위와 같은 구조에서는 오히려
else-if
를 사용하여 코드의 효율을 높히거나switch-case
를 사용하는 것이 더 가독성 면에서도 도움이 될 것이다. - 이와 같이 else를 지양하자는 말의 뜻은 else를 금지하자는 말이 아니다.
- else를 이용하여 조건 분기로 인해 복잡해질 수 있는 부분을 복잡성을 최소화하자는 의미이다.
- 아래에서 소개 할
early return
방식을 이용하여 복잡성을 줄이는 방법을 알아보자.
Early return?
- Early return 은 함수 내부에서 조건을 체크하고, 그 조건이 충족되지 않는 경우 빠르게 함수를 종료하는 방식이다.
- 이렇게 하면 깊은 중첩을 피하고 코드의 가독성을 높일 수 있다.
- 아래 예제는 early return을 모를 때 잘못 작성했었던 코드의 예제이다
- 코드를 살펴보면 if문 안에 for문이 들어가 처리하게 되고 else를 통해 분기를 또 처리하게 되어 복잡하게 코드가 작성 되어있는 것을 볼 수 있다.
public List<Car> parseCarName(String input) {
List<Car> cars = new ArrayList<>();
if (input.contains(",")) {
for (String car : input.split(",")) {
cars.add(new Car(validate(car)));
}
} else {
cars.add(new Car(validate(input)));
}
return cars;
}
- 이 코드에 early return을 적용하면 아래와 같은 코드로 변경할 수 있다.
public List<Car> parseCarName(String input) {
if (!input.contains(",")) {
cars.add(new Car(validate(input)));
return cars;
}
for (String car : input.split(",")) {
cars.add(new Car(validate(car)));
}
return cars;
}
- 이렇게 early return을 사용하며 else가 없는 간단한 분기문으로도 조건 처리를 할 수 있다.
- 또한, Indent가 깊어지지 않아 가독성과 복잡성을 줄일 수 있게 되었다.
- 이렇게 early return을 잘 사용하면 복잡한 코드의 가독성과 복잡성을 줄이는데 도움이 된다.
요약 및 결론
- else 예약어 지양은 else의 금지가 아니다.
- 적절한 상황에서는 사용하는 것이 더 알맞으며, 중요 포인트는 코드의 복잡성을 줄이는데 있다.
- 또한, early return 만으로 else 예약어를 지양하는 것은 아니다.
- 적절한 메서드 분리, else-if, switch-case문 사용을 통해 더 좋은 코드를 만들 수 있다.
참고 -
'오늘의 공부 > 기타' 카테고리의 다른 글
NCP 이용해보기! (2) | 2023.12.19 |
---|---|
코드 리뷰 작성해보기 (1) | 2023.12.02 |