티스토리 뷰

Server

[Java] if else 리팩토링

니용 2023. 8. 14. 09:39
반응형

이전에 카카오 개발자분이 올려주신 자바 소스 코드의 리팩토링 방법에서 참고하여 현재 사용 중인 코드 작성 방법을 올려볼까 합니다. 해당 글에는 if-else 뿐만 아닌 다른 리팩토링 방법에 대해서도 작성하였습니다.

https://abbo.tistory.com/395

 

[Refactor] 자바 코드 리팩터링하기 - 3부

이전 글에 이어서 자바 코드를 리팩터링하는 기본적인 방법과 그 내용을 코드를 통하여 조금 더 이해하기 쉽도록 적어보려고 합니다. 리팩터링 1부 - https://abbo.tistory.com/393 [Refactor] 자바 코드 리

abbo.tistory.com

 


 

자바 코드 리팩토링을 진행하다보면 if else 구문으로 이루어진 서비스 로직을 자주 발견하게 되는데, else 만을 보았을 때는 내부 로직을 알 수 없습니다. 아래와 같은 코드를 보면 이해가 훨씬 쉬우실 겁니다.

private String toString(Integer integer) {
    if(integer == null) {
        return 0;
    }
    else {
        return String.valueOf(integer);
    }
}

 

여기에서 if 문의 경우 인자로 받은 integer값이 null인지를 알기 쉽습니다. 하지만 else 문만 보면 어떤 조건에 반례가 되는 것인지 감이 오지 않습니다. 그렇기 때문에 else 문을 사용할 바에 과감히 빼버린 다음 if를 위주로 사용하는 것이 좋은 리팩토링 방법입니다.

 

아래는 개선된 코드입니다.

private String toString(Integer integer) {
    if(integer == null) {
        return 0;
    }
    return String.valueOf(integer);
}

결과적으로 보면 위의 잘못된 코드와 아래 개선된 코드는 결과가 바뀌지 않았고, else를 제거한 것만으로도 코드가 간결해졌습니다. 

 

2중으로 된 함수 간결화하기

함수를 좀 더 확장하여 2중으로 되어 있는 if-if-else 를 처리하는 방법입니다.

private String toString(Integer integer) {
    if(integer == null) {
        return 0;
    }
    else {
        if(integer > 0) {
            return String.valueOf(integer);
        } else { // 음수가 들어온 경우 절대값으로 표기한다.
            return String.valueOf(Math.abs(integer));
        }
    }
}

그럼 이렇게 되어있는 코드를 개선해보겠습니다.

private String toString(Integer integer) {
    if(integer == null) {
        return 0;
    }
    if(integer > 0) {
        return String.valueOf(integer);
    } 
    return String.valueOf(Math.abs(integer));
}

 

 

함수를 호출할 때

else 를 사용하지 않고 함수를 호출하기 위해서는 return; 을 호출해 줍니다.

private void update(Integer id) {
    if(integer == null) {
        return;
    }
    doUpdate(id);
}

 

또는 throw를 해주는 것도 좋은 방법입니다.

private void update(Integer id) {
    if(integer == null) {
        throw new IllegalArgumentException("id를 입력해주세요");
    }
    doUpdate(id);
}

 

반응형
댓글
공지사항