SRP (Single Reponsibility Principle; 단일 책임 원칙)

 

한 클래스는 하나의 책임을 가져야 한다.

클래스가 변경되는 이유가 하나여야 한다.

 

 

 

 

 


SRP가 뭐지?

 

 

사진을 추가할 수 있는 메모 앱을 만드려고 한다.

메모를 작성하는 화면수정하는 화면이 필요하다.

 

거의 비슷한 동작을 할 것이다.

두 개의 클래스를 만든다면 분명 중복 코드가 생기게 된다.

 

그래서 천재적으로 하나의 MemoManipulateAcitivity를 만들었다.

 

 

 

짠! 아주 책임이 가득한 클래스가 완성되었다.

 

SRP고 뭐고 잘 동작한다.

나는 훌륭하게 일을 해냈다.

 


작성일자와 수정일자를 표시하는 요구사항이 추가되었다.

 

코드를 수정하고 메모를 작성해 보니 잘 표시한다. 출시!

 

출시하고 보니 수정할 때마다 작성일자가 오늘일자로 수정된다.

아 수정하는 일도 했었지...

 

한 클래스에 두가지의 책임이 공존해 실수가 나왔다.

 

 


프로필 화면에서 사진을 추가하는 요구사항이 추가되었다.

 

프로필 화면에서도 이미지를 받아와야 하는데 코드가 중복된다....

 

하나의 책임에 집중하지 못한 클래스는 재사용하기 힘들다.

 

 

 

 

 


 

하나의 책임에 집중해보자

 

 

클래스당 하나의 책임만 가지도록 만들어 보자

 

 

하나의 책임을 가지도록 클래스를 분리했다.

각 클래스는 하나의 책임에 집중한 적은 양의 코드만 남았다.

 

 

이미지를 받아오는 코드를 캡슐화 했다.

이를 통해 중복코드없이 프로필 설정화면에도 재사용할 수 있게 되었다.

 

메모 작성 화면과 수정 화면의 공통 조작 부분을 MemoManipulateActivity로 캡술화하고

두 클래스에 의존적인 메모를 만드는 부분은 추상 메소드 getMemo로 만들었다.

 

이로 인해 작성 화면과 수정 화면은 서로 불필요한 영향을 받을 일이 줄고 자신의 책임에 집중할 수 있다.

 

 

 

 

 


외부 포스팅

 

더 자세하게 깊게 알고 싶다면..

https://velog.io/@amobmocmo/Software-Design-SRP-Single-Responsibility-Principle-4pk2aklhqo

 

[Software Design] SRP (Single Responsibility Principle)

책임 로버트 C. 마틴은 책임을 변경하려는 이유라고 정의했다. 변화의 시기와 이유가 같다면 같은 책임 아래 있다고 보는 것이다. 반대로, 한 객체 내에서 변화의 시기, 이유가 다른 부분이 존재한다면 그 객체는 여러 책임을 가지고 있는 것이다. 그에 따라 이렇게 좀 더 알아보기 쉽게 정의할 수 있을 것 같다. > 책임은 객체에 의해 정의되는 응집도있는 ...

velog.io

 

 

 

 

'SoftwareDesign' 카테고리의 다른 글

LSP  (0) 2020.03.01
OCP  (0) 2020.03.01
SOLID 개요  (0) 2020.03.01
3. Observer  (0) 2020.01.19
2. Strategy  (0) 2020.01.07

+ Recent posts