코드가 정말 못났다. 반복적일 뿐 아니라 너무 길기까지 하다. 코드를 살펴보면 ‘도형이 특정 타입인지 확인한 후 타입별 속성을 이용하는’ 식의 패턴을 세 번이나 반복한다. 중요한 것은 메서드 내에 if 문이 여러 개 있음에도 불구하고 각각의 if 문은 return 문만을 포함하므로 항상 전체 if 문 중에 단 하나만 선택적으로 수행된다는 점이다. 다음 코드는 동일한 작업을 수행하는 코드를 C# 7의 switch 문을 이용하여 작성한 예다.

    예제 12-11 패턴을 사용하여 둘레 길이 계산 ▶ ShapePerimeterWithPatternsSwitchCase.cs

    static double Perimeter(Shape shape)
    {
        switch (shape)
        {
            case null:
                throw new ArgumentNullException(nameof(shape));
            case Rectangle rect:
                return 2 * (rect.Height + rect.Width);
            case Circle circle:
                return 2 * PI * circle.Radius;
            case Triangle tri:
                return tri.SideA + tri.SideB + tri.SideC;
            default:
                throw new ArgumentException(...);
        }
    }

     


    ➊ null 값 처리 
    ➋ 타입별 처리
    ➌ 무엇을 해야 할지 알 수 없다면 예외를 던짐
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.