개발놀이터
코딩 스탠다드 1 : if 문의 조건식이 길다면 함수로 빼버린다. 본문
제목 그대로 if 문의 조건이 길다면 함수로 빼는 것이 제 첫번째 코딩 스탠다드입니다.
상황) 만약 장바구니에 있는 상품 중에서 사이즈가 M인 상품을 2개 구매하려고 할 때 재고가 1개밖에 남지 않았다면 이를 막아야합니다.
우리는 다음과 같은 흐름을 따라갈 것입니다.
- 데이터베이스에서 나의 장바구니를 가져온다.
- 장바구니 안에 상품의 사이즈가 M인지 체크한다.
- 내가 고른 장바구니의 수량과 데이터베이스에 남아있는 수량을 비교한다.
- 만약 재고가 더 많이 남아있으면 결제를 진행한다.
Bucket myBucket = bucketRepository.findByLoginId(loginId);
String itemName = myBucket.getItem().getName()
Item myItem = itemRepository.findByItemName(itemName);
if (myBucket.getItem().getSize().equals("M")) {
if (myBucket.getItem().getCount() - myItem.getStock() > 0) {
// payment logic
}
}
일단 저렇게 if 문이 중첩되어있으면 하나로 합칠 수도 있을 것 같이 보입니다.
Bucket myBucket = bucketRepository.findByLoginId(loginId);
String itemName = myBucket.getItem().getName()
Item myItem = itemRepository.findByItemName(itemName);
if (myBucket.getItem().getSize().equals("M") && myBucket.getItem().getCount() - myItem.getStock() > 0) {
// payment logic
}
들여쓰기가 하나 줄어들긴 했지만 if 문의 조건식이 굉장히 길어졌습니다.
물론 나 혼자 개발하는거면 저렇게 냅둬도 상관 없을 수도 있습니다. 물론 1년뒤에 보면 까먹기 때문에 혼자 개발해도 리팩토링을 해야한다는 것이 제 생각이긴합니다만.
아무튼 저렇게 길어진 조건식은 이렇게 함수로 빼면 깔끔하게 볼 수 있습니다.
Bucket myBucket = bucketRepository.findByLoginId(loginId);
String itemName = myBucket.getItem().getName()
Item myItem = itemRepository.findByItemName(itemName);
if (isBucketCountOverZero()) {
// payment logic
}
private boolean isBucketCountOverZero() {
return myBucket.getItem().getSize().equals("M") && myBucket.getItem().getCount() - myItem.getStock() > 0
}
깔끔하게 코드를 리팩토링하고 나중에 이 코드를 다시 봤을 때 함수 이름으로 조건식을 짐작할 수 있기 때문에 코드가 클린해졌습니다.
마치며
저는 if 문의 조건식이 길어지면 나중에 봤을 때 코드를 해석하기 굉장히 힘들어지기 때문에 리팩토링을 반드시 진행해야한다고 생각하는 주의입니다.
if 조건식을 메서드로 모두 빼야한다고 주장하는 것은 아닙니다. if 조건식이 직관적으로 해석이 불가능할정도로 긴 경우에나 빼는 것이지 적당히 짧은건 그대로 냅둬도 된다고 생각합니다.
하지만 만약 조건식이 중복되는 경우라면 반드시 메서드로 빼서 관리하는 것이 좋을 것 같습니다.
'리팩토링 > 코딩 스탠다드' 카테고리의 다른 글
코딩 스탠다드 5 : 강타입 언어라면 강타입 언어의 장점을 적극 활용하자 (HTTP Request) (0) | 2024.04.30 |
---|---|
코딩 스탠다드 4 : 강타입 언어라면 강타입 언어의 장점을 적극 활용하자 (String 을 지양해야 하는 이유) (0) | 2024.04.30 |
코딩 스탠다드 3 : StreamAPI로 처리할 수 있는 반복문은 StreamAPI로 처리한다. (0) | 2024.04.29 |
코딩 스탠다드 2 : Optional 을 활용한 null 체크 (0) | 2024.04.29 |
코딩 스탠다드 카테고리 시작! (0) | 2024.04.29 |