SOLID
객체지향 설계의 5원칙의 앞글자를 따서 SOLID라고 한다. 이 원칙들은 응집도는 높이고 결합도는 낮추자는 고전 원칙을 객체 지향의 관점에서 재정립한 것으로 볼 수 있다.
SRP(Single Responsibility Principle) : 단일 책임 원칙
OCP(Open Closed Principle) : 개방 폐쇄 원칙
LSP(Liskov Substitution Principle) : 리스코프 치환 원칙
ISP(Interface Segregation Principle) : 인터페이스 분리 원칙
DIP(Dependency Inversion Principle) : 의존 역전 원칙
SRP(Single Responsibility Principle) = 단일 책임 원칙
한 클래스는 하나의 책임(기능 담당)만 가져야 한다. 중요한 기준은 변경(수정)이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것이다. 예) UI 변경, 객체의 생성과 사용을 분리 (모듈이 변경되는 이유가 한가지 여야 함)
코드의 길이가 길어지더라도, 코드의 가독성 향상, 유지보수 용이라는 이점이 있다. 다른 설계 원리들을 적용하는 기초이다.
SRP 설계 원칙
1. 클래스명은 책임의 소재를 알 수 있게 작명한다.
2. 무작정 분리하지 말고, 결합도와 응집도를 따져가며 구성한다.
(응집도는 높게, 결합도는 낮게 설계하는 것이 좋은 프로그램)
OCP(Open Closed Principle) = 개방 폐쇄 원칙
소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에 대해서는 열려 있어야 하지만 변경에 대해서는 닫혀 있어야 한다. 이것은 interface를 구현하여 해결할 수 있다.
LSP(Liskov Substitution Principle) = 리스코프 치환 원칙
서브타입은 언제나 자신의 기반타입으로 교체할 수 있어야 한다. 즉, 하위 클래스의 인스턴스는 상위형 객체 참조 변수에 대입해 상위 클래스의 인스턴스 역할을 수행하는 데 문제가 없어야 한다. 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다. 다형성에서 하위 클래스는 인터페이스 규약을 다 지켜야 한다는 것, 다형성을 지원하기 위한 원칙, 인터페이스를 구현한 구현체를 믿고 사용하려면, 이 원칙이 필요하다.
ISP(Interface Segregation Principle) = 인터페이스 분리 원칙
인터페이스 분리 원칙은 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙이다. 인터페이스 분리 원칙은 큰 덩어리의 인터페이스들을 구체적이고 작은 단위들로 분리시킴으로써 클라이언트들이 꼭 필요한 메서드들만 이용할 수 있게 한다. 인터페이스 분리 원칙을 통해 시스템의 내부 의존성을 약화시켜 리팩토링. 수정, 재배포를 쉽게 할 수 있다.
DIP(Dependency Inversion Principle) = 의존 역전 원칙
프로그래머는 “추상화에 의존해야지, 구체화에 의존하면 안된다.” 의존성 주입은 이 원칙을 따르는 방법중 하나이다. 쉽게 이야기해서 구현 클래스에 의존하지 말고, 인터페이스에 의존하라는 뜻이다. 역할에 의존하게 해야 한다는 것과 같다. 객체 세상도 클라이언트가 인터페이스에 의존해야 유연하게 구현체를 변경할 수 있다. 구현체에 의존하게 되면 변경이 아주 어려워진다.
'TIL' 카테고리의 다른 글
230731 TIL (1) | 2023.07.31 |
---|---|
230721 TIL (0) | 2023.07.24 |
230720 TIL (0) | 2023.07.20 |
230718 TIL (0) | 2023.07.18 |
230717 TIL (0) | 2023.07.17 |