반응형

* 무분별한 if-else 줄이는 코딩 방법(Callback Hell 탈출)

if-else는 프로그래밍을 하면서 필수적으로 사용된다.

하지만 무분별한 if-else문 남용은 가독성을 떨어트려 이해하기 어려운 코드가 된다.

특히, JS에서 많이 사용되는 Callback Hell이라고 불리는 문제를 해결하는 방법을 알아보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//Callback Hell
void getConnection() {
    Server server = getServer();
    if (server != null) {
        Client client = server.getClient();
        if (client != null) {
            Connection con = con.getConnection();
            if (con != null) {
                // 실제 처리할 로직
            }
        }
    }
}
 
cs

위 코드는 Callback은 아니지만, 무분별한 if문 남발로 가독성이 떨어지는 코드이다.

이를 해결할 수 있는 방법은 if문에서 예외 처리해야할 부분을 잡아서 처리하는 방법이 좋다.

예외 처리를 미리 해주면 단순 프로그래밍시만 아니라 Backtracking이나 DFS같은 재귀함수를 쓸 때도 무한루프에 빠지지 않을 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void getConnection() {
    Server server = getServer();
    if (server == null) {
        return;
    }
    Client client = server.getClient();
    if (client == null) {
        return;
    }
    Connection con = con.getConnection();
    if (con == null) {
        return;
    }
    // 실제 처리할 로직
}
cs

위와 같이 if문으로 예외 처리를 통해 바로 return으로 함수를 종료하면 가독성이 높아진다.

또한, if문 조건에는 주로 간단한 내용을 조건으로 주로 걸고, 복잡한 내용은 else문에 작성하는 것이 일반적이다.

1
2
3
4
5
6
7
8
9
10
11
public int checkNumber(int inputNumber) {
    if (inputNumber == 1) {
        //처리    
    } else if (inputNumber == 2) {
        //처리
    } else if (inputNumber == 3) {
        //처리
    } else if (inputNumber == 4) {
        //처리
    }
}
cs

위 코드 역시 inputNumber가 1인 경우에도 끝까지 확인을 해야한다는 단점이 있다.

이러한 경우 역시 if문으로 조건을 만족하면 return 시키는 방법이 효율적이라고 할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public int checkNumber(int inputNumber) {
    if (inputNumber == 1) {
        //처리
        return ret;
    }
    if (inputNumber == 2) {
        //처리
        return ret;
    }
    if (inputNumber == 3) {
        //처리
        return ret;
    }
    if (inputNumber == 4) {
        //처리
        return ret;
    }
}
cs


* 참고

Java 성능 좋은 분기문을 쓰는 방법, if문에서 연산 순서 (if문에서 좋은 퍼포먼스를 만들기, && || 연산자 우선 순위)

if문은 가장 필수 적인 요소 하지만 골치 아픈 녀석(if 안쓰는법)

반응형