더북(TheBook)

12.7.2 패턴 매칭을 사용해야 하는 경우

다음 두 가지 경우에는 반드시 패턴 매칭의 사용을 검토해 보기 바란다.

isas 연산자를 사용하고 있고, 구체적인 타입별로 서로 다른 작업을 수행하는 경우

동일 값에 대해 다양한 조건을 검토하는 if/else-if/else-if/else와 같은 반복 코드가 있고, 이를 switch 문으로 대체 가능한 경우

만약 var … when 형태의 패턴을 반복적으로 사용하고 있다면(즉, 가드 절을 통해서만 조건을 나누는 경우) 실제로 패턴 매칭이 필요한 코드인지를 자문해 볼 필요가 있다. 나도 이런 방식으로 패턴 매칭을 사용한 경우가 있었는데, 이는 패턴 매칭의 잘못된 사용 예라고 할 수 있다. 다소 불편하게 느낄지는 모르겠지만, 각각의 요건을 단일의 조건으로 구성하고 각 조건별로 하나의 작업을 수행하도록 구성하는 것이 if/else를 반복해서 사용하는 것에 비해 훨씬 더 의도를 명확히 나타낸다.

이 두 가지는 모두 기존에 개발된 코드의 구현 세부 사항만을 변경하는 경우다. 따라서 논리의 흐름과 구성은 바뀌지 않는다. 하지만 구현 세부 사항을 변경하는 과정에서 특정 타입의 공개 API 등을 리팩터링하는 것과 같은 큰 변화로 이어지기도 하는데, 이 경우는 특정 짓기가 매우 어렵다. 때로는 패턴 매칭을 이용하여 상속 관계를 제거하는 경우도 있다. 각각의 타입별로 서로 다르게 계산을 수행해야 하는 복잡한 논리를 한 곳에 모아서 표현하는 것이 좀 더 깔끔할 때가 있기 때문이다. 12.3절에서 살펴봤던 도형 둘레 계산 방식이 하나의 예가 될 수 있으며, 동일한 방식으로 다양한 비즈니스 논리를 구현할 수도 있을 것이다. 이런 방식으로 논리를 구현하면 완전히 격리되어 따로 놀았던 타입들을 좀 더 다양하게 사용할 수 있다.

이 절의 내용이 다소 미진한 부분이 있더라도 늘 그렇듯이 다양한 실험을 해보고, 결과를 되돌아보는 과정이 매우 중요하다. 어디에 적용할 수 있을지 생각해 보고 새로운 것을 시도해 보라. 장단점에 대한 검토는 그 이후에 해도 늦지 않다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.