SOLID - SRP ( 단일 책임 원칙 ) 에 대하여
OOP단일 책임 원칙 (SRP)
SRP (Single Responsibility Principle ) 이란..?
직역하면 단일 책임 원칙이다. 사실 직관적인 단어라 어려운 부분이 없다고 생각했다. 하지만 예시를 확인해 봤을때 이게 뭔 말인가? 했다. 그래서 가지고 있던 책 중에 클린 코드를 확인 해보았다.
단일 책임 원칙은 클래스나 모듈을 변경할 이유가 단 하나뿐이어야 한다.
아! 나는 기존에 정의된 하나의 클래스에 하나의 책임만을 가져야 된다는 것보다 이게 더 직관적으로 와닿았다.
Dashboard라는 클래스를 예시로 설명해보겠다.
public class Dashboard extends JFrame implements MetaData
{
public Componet getLastFocusComp()
public void setLastFocus(Component lastFocus)
public int getMajorVersionNum()
public int getMinorVersionNum()
public int getBuildNum()
}
여기서 Dashboard의 역할은 두 개로 가정한다. 소프트웨어 버전 정보를 추적, Dashboard는 스윙 컴포넌트를 관리. 하지만 소프트웨어는 출시될때마다 버전 정보가 변경되며, 스윙 코드를 변경할 때마다 버전 번호가 달라진다. 자, 그럼 여기서 코드를 변경해야 하는 이유가 두 가지나 된다는 것이다.
따라서 이 코드에서 냄새를 제거해보자. 변경되는 이유를 찾았으니, 버전 정보를 다루는 메소드를 추출해서 새로운 클래스를 생성해보자. 여기서 버전 정보를 관리하는 메소드는 아래와 같다. 이를 Version 클래스로 만들어보자.
public class Version {
public int getMajorVersionNum()
public int getMinorVersionNum()
public int getBuildNum()
}
이렇게 만들어진 Version 클래스는 다른 애플리케이션에서도 충분히 쉽게 사용될 것이다.
많은 주니어 개발자들은 깨끗하고 체계적인 소프트웨어보다 돌아가는 소프트웨어에 초점을 맞추는데, 사실 이건 비교하면 잘 정리된 여러 개의 수납장에 물건을 정리해서 사용할 것이냐? 큰 서랍장 하나에 모든 물건을 던져놓고 쓸 것이냐? 이다. 느껴지지 않는가? 냄새나는 코드의 제거는 중요하다.
마음의 정화를 가져오는 SRP, PEACE
'OOP' 카테고리의 다른 글
객체 지향 그리고 SOLID (0) | 2020.12.03 |
---|---|
SOLID - LSP ( 리스코프 치환 원칙) 에 대하여 (0) | 2020.12.02 |
SOLID - DIP ( 의존 관계 역전의 법칙 ) 에 대하여 (0) | 2020.12.01 |
SOLID - ISP ( 인터페이스 분리 원칙 ) 에 대하여 (0) | 2020.11.30 |
SOLID - OCP ( 개방-폐쇄 원칙 ) 에 대하여 (0) | 2020.11.30 |