본문 바로가기
개발/기본) 기본기

기본기) Switch 문 안에 Switch 문법 (Nested switch-case)

by 테샤르 2021. 8. 26.

Switch 문 안에 Switch 문법 (Nested switch-case)

 

코드를 작성하다보면 조건분기가 점점 많아지는 예외 상황이 생길 경우가 있다.

다중 if 문도 비슷하지만 switch 문안에 다중 switch가 생기는 경우에 대한 고민과 생각이 들어서 관련되서

찾아보고 포스팅하게 되었다.

 

Nested switch-case 라고 하는 표현은 가독성과 순환 복잡성이 늘어난다고 한다.

순환 복잡성이 높아지면 여러가지 케이스가 생기게되고 버그 및 사이드 이펙트, 결함이 비례한다는 이야기가 있다.

반응형

 

결론적으로 예시의 코드처럼 Nested switch-case문은 사용하는것을 지양해야 한다.

< 수정 전 코드 >

    public void TestSwitchCase(int paramValue1, int paramValue2)
    {
        switch (paramValue1)
        {
            case 1:
                {
                    // Nested Switch
                    switch (paramValue2)
                    {
                        case 2:
                            Debug.Log("Choice Value : 2");
                            break;
                        case 3:
                            Debug.Log("Choice Value : 3");
                            break;
                    }
                }
                break;
            case 4:
                Debug.Log("Choice Value : 3");
                break;
            default:
                Debug.Log("Choice is other Value than 1, 2 3, or 4");
                break;
        }
  
    }

<수정 후 코드>

public void TestSwitchCase(int paramValue1, int paramValue2)
    {
        string stringValue = string.Empty;
        switch (paramValue1)
        {
            case 1:
                {
                    // Nested Switch
                    stringValue = NestSwitchCase(paramValue2);
                }
                break;
            case 4:
                stringValue = "Choice Value : 3";
                break;
            default:
                stringValue = "Choice is other Value than 1, 2 3, or 4";
                break;
        }

        if (stringValue != string.Empty)
            Debug.Log(stringValue);
    }

    public string NestSwitchCase(int parmaValue)
    {
        switch (parmaValue)
        {
            case 2:
                return "Choice Value : 2";
            case 3:
                return "Choice Value : 3";
            default:
                return string.Empty;
        }
    }
반응형

개인적으로 코드의 가독성이 많은 위험(버그, 사이드이펙트, 결함, 오류)등을 많이 줄여준다고 생각하기 때문에 분리해서 작업하는 방식으로 작업하는것에 대한건 좋다고 생각한다. 개인적인 생각이기 때문에 Nested switch-case 사용한다고 해서 잘못된건 아니다. 결국 코드에 대한 스타일의 차이라고 생각한다.

if같은 조건 분기문도 중첩해서 사용하기 보다는 else if 를 사용을 권장하는것도 비슷한 맥락이라고 생각한다.

 

순환복잡성 : https://en.wikipedia.org/wiki/Cyclomatic_complexity

 

Cyclomatic complexity - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Cyclomatic complexity is a software metric used to indicate the complexity of a program. It is a quantitative measure of the number of linearly independent paths through a program's so

en.wikipedia.org

 

 

★☆☆☆☆

 

반응형

댓글