SOLID

apwierk·2022년 5월 19일
0

개인 공부

목록 보기
2/20

단일 책임 원칙

  • SRP : Single-Responsibilit Principle
  • 한 클래스는 단 한 가지의 책임을 가져야한다.

책임은 변경의 이유다!

높은 응집도 → 하나의 기능을 고칠 때 파일 한 개만 수정한다. (낮은 결합도)

낮은 응집도 → 하나의 기능을 고칠 때 여러 파일을 수정한다. (높은 결합도)

1번 예

위의 예를 보면 쥬스만들기 라는 class 과일준비(), 쥬스만들기(), 쥬스를준다()의 많은 역할을 중구난방으로 가지고 있는 것을 알 수 있다.

1번 예와 비교해서 각각의 과일준비(), 쥬스만들기(), 쥬스를준다() 역할을 하는 프로토콜을 만들어주고 각자의 역할만하는 메소드만을 구현하게 했다. 그리고 쥬스만들기에서는 이 프로토콜들을 활용해서 상효작용만을 하고 있습니다.
그로 인해 각각의 프로토콜들을 활용해서 로그인에 관한 책임만을 가지고 있다는 것을 알 수 있다.

개방 패쇄 원칙

  • OCP : Open-Close Principle
  • 확장에 열려있고 변경에 닫혀있다.

추상적이다. 정답은 없다.

그림 1

그림 2

위 그림을 보면 교통수단을 각각 enum(그림 1)과 protocol(그림 2)로 구현을 하였다. 그리고 구체적인 교통수단의 종류를 case와 struct로 표현하였다. 이 둘은 수정과정에서 차이를 가진다.

그림 3

그림 4

만약 외발 자전거라는 교통수단을 추가하려 한다면 enum타입의 경우는 전반적인 수정을 요구한다(그림 3). 그러나 protocol의 경우 외발자전거 struct만 추가해주면 되어서 확장만 실시하면 된다(그림 4).

리스코프 치환 원칙

  • LSP : Liskov-Substitution Principle
  • 자식 클래스는 부모 클래스로써의 역할을 완벽히 할 수 있어야 한다.

위배된 경우 : UIView에 상속되어 있는 것들(UIStepper, UILabel...등)중에 높이가 변하지 않는 경우가 있다.
-> 원칙이 우선인가? 가치가 우선인가? -> 가치를 위해 원칙이 있다.

  • 코드 예시

그림 1

그림 2

그림 3

정사각형은 직사각형이기도 하다. 그래서 직사각형 클래스를 상속 받고 있다. 하지만 정사각형은 양변의 길이가 똑같다는 자신만의 성질을 가지기 위해 직사각형의 메서드를 override 해주었고, 이로 인해 직사각형의 성질을 그대로 상속하는 것을 거부하고 자신만의 성질을 가지게 된다.(퇴화 함수)

인터페이스 분리 원칙

  • ISP : Interface-Segregation Principle
  • 클라이언트가 불필요한 메소드는 구현 할 필요가 없는 것을 명시한다.
  • 일반적인 인터페이스를 가지는 것보다 구체적인 각각의 다른 인터페이스를 가지는 것이 낫다고 명시한다.

예를들어, 동물이 움직이는 메소드를 포함한 동물 protocol을 만들었다.


상어이 경우 동물 프로토콜을 채택했음에도 메소드 두개는 구현하지 않게 된다. 해결 방법은 각 3개의 인터페이스(프로토콜)를 만들어 각각 필요한 프로토콜만 채택하는 것이다.

특성 별로 프로토콜을 정리할 경우 각각 필요한 프로토콜만 이용가능하다.

의존성 역전 원칙

  • DIP : Dependency-Inversion Principle
  • 상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안된다.
  • 구체적인 사항은 추상화에 의존해야된다.


    자동차를 만들 때 한 종류의 타이어만 의존하여 만들 경우 타이어 교체가 불가능하다. 이를 해결해주기 위해서는 모든 타이어를 호환해줄 수 있는 프로토콜(하이브리드바퀴)을 만들어 의존한 후 각 타이어들도 의존하게 하면 된다.
profile
iOS 꿈나무 개발자

0개의 댓글