더북(TheBook)

코드가 정말 못났다. 반복적일 뿐 아니라 너무 길기까지 하다. 코드를 살펴보면 ‘도형이 특정 타입인지 확인한 후 타입별 속성을 이용하는’ 식의 패턴을 세 번이나 반복한다. 중요한 것은 메서드 내에 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 값 처리 
➋ 타입별 처리
➌ 무엇을 해야 할지 알 수 없다면 예외를 던짐
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.