SOLID 원칙 1) SRP

2021-09-30
OOP

안녕하세요. 도미닉입니다.

저번에 SOLID 에 대해 정리해보았습니다. SOLID 원칙

시간이 좀 지났고 자세히 더 알아보고 싶어서 각 원칙에 대해 글을 작성하고자 합니다.

SOLID 는 5가지 원칙을 가지고 있습니다.

이번에는 첫번째 S에 해당하는 SRP 에 대해 정리해보겠습니다.

SRP (Single Responsibility Principle)

한글로는 단일 책임 원칙입니다.

객체는 하나의 기능과 책임을 가져야만 한다는 원칙입니다.

코드로 풀어서 설명을 해보겠습니다.

아래와 같이 스마트폰 객체가 있습니다.

스마트폰에는 기능이 거의 무한적으로 있으나 이 코드에서는 call과 showYoutube만 있는 것으로 하겠습니다.

이제 스마트폰에 갤럭시 폴드가 나와서 접혀있는 상태가 추가된다라고 하면 아래와 같이 스마트폰을 수정할 수 있을 것입니다.

하지만 위와 같이 작성하면 SmartPhone 중 갤럭시 폴드가 아닌 스마트폰들은 항상 isFolded 값이 False 일 것입니다.

이러할 때 아래 SRP가 안 지켜진 사례를 참고하면 SRP 원칙에 위반됩니다.

SRP가 안 지켜진 사례

  • 변수레벨

    • 하나의 속성이 여러 의미를 갖는 경우
    • 어떤 곳에서는 쓰고, 어떤 곳에선 안 쓰는 속성이 있는 경우
  • 메소드레벨

    • 분기 처리를 위한 if문, switch문이 많은 경우

위 사례 중 어떤 곳에선 안 쓰는 속성이 있는 경우에 포함되기 때문에 SRP를 위반합니다.

이럴 때는 SmartPhone 객체를 상속받는 갤럭시 폴드 객체를 아래처럼 만들어서 SRP를 지킬 수 있습니다.

또한 앞으로 폴더 폰이 많이 생길 것을 예상하고 아래처럼 프로토콜을 활용할 수 있습니다.

다른 예를 보겠습니다.

아래와 같이 titleForHeaderInSection 메소드를 구현할 수 있습니다.

식당의 등급에 따라 헤더가 보여집니다.

이러할 때 식당의 등급이 필요한 코드마다 분기 처리를 위한 if문, switch문이 반복될 것 입니다.

이럴 때는 열거형을 활용할 수 있습니다.

위와 같이 등급을 저장하는 열거형을 작성하면 각 케이스에 맞는 이름을 메소드로 받아올 수 있습니다.

위와 같이 titleForHeaderInSection 메소드에서는 분기 처리를 하지않고 등급의 이름을 헤더로 뿌려줄 수 있습니다.

정리

오늘은 SOLID 원칙 중 SRP에 대해 정리해봤습니다.

위에 SRP가 안 지켜진 사례를 유념하고 이러한 상황이 발생할 때 상속이나 프로토콜, 열거형 등을 이용해 SRP가 잘 지켜지는 코드를 작성하면 좋을 것입니다.

읽어주셔서 감사합니다.

참고

https://sjh836.tistory.com/159