본문 바로가기
개발용어

SOLID 원칙 - 단일책임원칙, SRP (Single Responsibility Principle)

by devscb 2022. 5. 5.
반응형

SOLID 원칙 - 단일책임원칙, SRP (Single Responsibility Principle)


단일 책임원칙이란? (단일책임원칙, SRP ,Single Responsibility Principle)


단일 책임 원칙(Single-responsibility principle, SRP)은 컴퓨터 프로그램의 모든 기능/모듈이
기능의 한 부분에 대해 책임을 져야 하며, 그 부분을 캡슐화해야 한다는 원칙입니다.
그 모듈, 클래스 또는 기능의 서비스는 그 책임을 좁게 설정해야합니다.
SPR 는 커플링된 책임들을 여러 클래스를 나누라는 원칙이기도 합니다.
또한, 클래스는 단일 기능에 초점을 맞추고, 그 클래스는 단 하나의 작업만 수행해야 한다는 것을 의미합니다.

SRP를 준수해야하는 이유


- 더 많은 기능을 가지고 있다면, 더 많은 변화 가능성이 있기 때문입니다. (유지보수 cost의 증가)
- 클래스가 변경될수록 버그가 생길 가능성이 높아질 수 있기 때문입니다.
- 변경 사항은 다른 class / 모듈에 영향을 줄 수 있기 때문입니다.
- SRP를 준수하면 더 유지보수하기 쉽고 이해하기가 쉬워집니다.
- 테스트하기가 간단해지기 때문입니다.


SRP 도입의 예




// SRP 를 준수하지 않는 경우 

public class UserSettingService
{
 public void changeEmail(User user)
 {
 if(checkAccess(user))
 {
 ...
 }
 }
 public boolean checkAccess(User user)
 {
 ....
 }
}


위 예제에서는 UserSettingService 는 email을 바꾸고, 접근권한을 확인하는 두가지 메소드가 있습니다.
만일 이메일 변경이 승인되는 방식을 변경하거나, checkAccess가 수행되는 방식이 변경된다면 어떨까요?
두 가지 성격이 다른 경우임에도 불구하고 각각 UserSettingService를 수정해야 합니다.
이를 해결하기 위해 UserSettingService를 UserSettingService와 SecurityService로 분해하고,
checkAceess메소드를 SecurityService로 이동합니다.
그러면 아래 코드와 같이 되겠지요.


public class UserSettingService
{
 public void changeEmail(User user)
 {
 if(SecurityService.checkAccess(user))
 {
 //Grant option to change
 }
 }
}

public class SecurityService
{
 public static boolean checkAccess(User user)
 {
 //check the access.
 }
}




SRP 를 준수하지 않는 사례


1. 한 클래스에 최대한 많은 기능을 한번에 집어넣으려 한다.
2. 한 클래스에서 메서드를 다른 컴포넌트에서 사용할 때, 불필요한 기능이 있긴 하지만 별 상관 없으므로 그냥 쓴다.
3. 한 메서드를 의존하는 다른 메서드들이 불필요한 기능들 때문에 코드가 엉망이 된다.

총평


절차지향적으로 코딩을 해왔다면, 어디서부터 어떻게 나눠야할지 좀 어색할 수도 있겠습니다.
다른 사람의 코드를 잘 살펴보고, 내가 짠 코드를 나중에 다시 보았을때 더 나눌수는 없을지?
코드를 수정할때 마다 이 기능은 여기 있는게 맞는지? 모듈화를 해야하지는 않은지?
등의 의문을 가지면서 계속해서 노력해야 SRP 를 잘 준수할 수 있을것입니다.



#SOLID,#SOLID원칙,#단일,#책임,#원칙,#SOLIDprinciple,#SRP,#단일책임원칙,#single,#responsibility,#principle

 

https://devscb.com/post/91

 

SOLID Principle - SRP (Single Responsibility Principle)

SOLID Principle - Single Responsibility Principle, SRP (Single Responsibility Principle) What is the single responsibility principle? (Single Responsibility Principle, SRP, Single Responsibility Princ

devscb.com

 

728x90
반응형

댓글