Open bumdream opened 6 years ago
여러원인에 의한 변경(Divergent change)
산탄총 수술(Shotgun surgery)
SRP 1줄 요약: 클래스를 변경할 수 있는 이유는 1가지어야 한다.
부연설명: 예를 들어서 보고서를 편집하고 출력하는 모듈을 생각해 보자. 이 모듈은 두 가지 이유로 변경될 수 있다. 첫 번째로 보고서의 내용 때문에 변경될 수 있다. 두 번째로 보고서의 형식 때문에 변경될 수 있다. 이 두 가지 변경은 하나는 실질적이고 다른 하나는 꾸미기 위한 매우 다른 원인에 기인한다. 단일 책임 원칙에 의하면 이 문제의 두 측면이 실제로 분리된 두 책임 때문이며, 따라서 분리된 클래스나 모듈로 나누어야 한다. [출처: 위키] +참고
프로젝트 적용: VideoPlaybackRenderer라는 영상과 아이콘 이미지를 실제로 스크린에 그리는 보조 클래스가 있다. 여기서 하는 일은 실제 이미지를 그리는 일 말고도, 사용자의 터치 좌표를 인식해서 특정 버튼의 바운더리에 들어가는 지 안 들어가는 지 boolean값으로 리턴하는 일도 한다. (리턴값이 참이면 메인클래스인 VideoPlayback에서 그 버튼의 기능을 수행한다.)
SRP에 따르면 터치 좌표를 인식 및 판별을 다른 클래스로 분리하는게 맞을 거 같다. 왜냐하면 현재는 아이콘을 넓게 한다거나 등 이미지를 그리는 일을 바꾸려고 클래스를 변경할 수 있고, 또 터치 좌표 인식 범위를 넓히는 등 인식 판별을 바꾸려고 클래스를 변경할 수 있기 때문이다. 다만 아이콘을 넓게 그리는 것과 동시에 인식범위를 넓히는 일은 보통 같이 이루어지는 변경인데, 나누는 게 맞는 건가 싶은 생각도 든다.
또 나누더라도 그런데 다른파일에 클래스를 만들어 import문을 중복하느니 같은 파일에 클래스를 만들고 싶은데, 혹시 문제는 없을까?
SRP(Single Responsibility Principle):
책임=코드를 변경할만한 사유
[SRP 위반] 클래스 하나에 두 개의 책임
[SRP 지킴] 클래스 하나당 한 개의 책임
SRP(Single Responsibility Principle):
그림은 홍석님께서 잘 올려주셨으므로 위의 그림을 참고!
SRP 에 정리한 내용을 간략히 적어서 댓글로 단다!