3-1.기능의 산재 Shotgun Surgery

[ 2017-07.18 작성 ]

Sympoms

수정의 산발(Divergent Change)과 유사하지만 실제로는 정반대입니다. Divergent Change는 단일 클래스에 많은 변경이 있을 때입니다. 하지만 기능의 산재(산탄총 수술; Shotgun Surgery)는 한 번에 여러 개의 클래스를 동시에 변경하는 경우를 말합니다.

쉽게 말해서 수정의 산발(Divergent Change)은 여러 종류의 변경 때문에 하나의 클래스가 시달리는 경우이고 산탄총 수술(shotgun Surgery)은 하나를 변경했을 때 많은 클래스를 고쳐야 하는 경우입니다.

※ 리펙토링 shotgun surgery은 기능의 산재, 확산적 변경, 산탄총 수술 같이 3가지로 통용되고 있습니다.

Reasons for the Problem

수정의 산발(Divergent Change)를 지나치게 적용한 후에 발생할 수 있습니다.

Treatment

Move Field와 Move Method를 통해 책임을 기존의 어떤 클래스로 모으거나 이럴만한 클래스가 없다면 새로운 클래스를 만들어 해결할 수 있습니다. 즉 산발적으로 여러 곳에 분포된 책임들을 한 곳에 모으면서 설계를 깨끗하게 합니다. 응집력을 높이는 작업입니다.

쉽게 말해서 하나의 수정을 위해서 여러 클래스를 건드려야 할 경우가 발생된다면, 차후 하나의 클래스만 수정하는 것이 가능하도록 만드는 것을 의미한다.

1. class diagram

Shotgun Surgery.png