SOLID 에는 "프로그램의 개체를 해당 프로그램의 정확성을 변경하지 않고 하위 유형의 인스턴스로 대체 할 수 있어야합니다"라는 개념을 가진 Liskov 대체 원칙 이 포함되어 있습니다.
정적 메소드가있는 정적 클래스 (클래스와 약간 비슷 함 Math
)에는 인스턴스가 전혀 없으므로 정적 메소드가있는 정적 클래스가 있으면 시스템이 SOLID로 간주됩니까?
SOLID 에는 "프로그램의 개체를 해당 프로그램의 정확성을 변경하지 않고 하위 유형의 인스턴스로 대체 할 수 있어야합니다"라는 개념을 가진 Liskov 대체 원칙 이 포함되어 있습니다.
정적 메소드가있는 정적 클래스 (클래스와 약간 비슷 함 Math
)에는 인스턴스가 전혀 없으므로 정적 메소드가있는 정적 클래스가 있으면 시스템이 SOLID로 간주됩니까?
답변:
LSP는 클래스의 인스턴스를 메서드에 전달하는 데 적용되며, 메서드가 해당 인스턴스와 관련된 작업을 수행하고 종종 일종의 결과를 생성합니다. C #에서는 정적 클래스의 인스턴스를 만들 수 없으므로 정적 클래스는 중요하지 않습니다.
더 중요한 것은 정적 클래스 가 봉인되어 상속 될 수 없다는 것입니다. 이것은 C #이 진행되는 한 귀하의 질문을 혼란스럽게 만듭니다.
정적 클래스는 해당 원칙을 위반하는 서브 클래스를 생성 할 수 없으므로 항상 LSP를 준수한다고 말할 수 있습니다. 정적 클래스는 같은 이유로 LSP를 준수하지 않는다고 말할 수도 있습니다.
final
하고 생성자를 숨겨야합니다. 일단 그렇게하면 C #과 유사하게 동작하므로 인스턴스화하거나 서브 클래스화할 수 없습니다. 내부 클래스를로 선언 할 수 static
있지만 C #에서와 같은 의미는 아닙니다. 단순히 중첩 된 최상위 클래스 를 나타냅니다 .
VB.NET 은이 경우 C #과 정확히 동일한 방식으로 작동합니다.
S 화롯불 책임 원리 : 정적 클래스는 쉽게 원리를 따릅니다.
O 펜 / 폐쇄 원칙 : 정적 클래스가 봉인되어 있기 때문에, 그들도이 원리를 따를 수 없습니다.
L 이스 코프 치환 원리 : 상기와 같이.
I nterface의 분리 원칙 이 원칙을 다음 향해 단계가 될 수있는 하나의 클래스에 적용되지만 작고, 더 전문들로 분할 하나 개의 큰 정적 클래스하지 않습니다.
D ependency 반전 원리 : 그것을 사용하는 모든 클래스는 항상 시간에 존재하는 어떤 구현에 따라 달라집니다 그래서 정적 클래스, 인터페이스를 구현할 수 없습니다. 따라서 정적 클래스는이 원칙을 위반합니다.
정적 클래스는 5 가지 기준을 모두 만족하지 않으므로 SOLID가 아닙니다.
나는 객체 지향 지향과 같은 클래스를 분류하지 않기 때문에 객체 지향 디자인의 원칙을 충족시킬 수 없으며 시도해서는 안된다고 말하고 싶습니다.
이러한 클래스는 Java 및 C #과 같은 언어로 클래스 외부에서 코드를 제공 할 수없는 경우의 해결 방법 일뿐입니다. 가능한 경우 객체 지향의 이점을 얻지 못하므로 독립형 함수로 정의해야합니다.