이전 기사에서는 객체 지향 설계의 원칙인 SOLID Principle에 대해 배웠습니다.
이 기사에서는 SOLID Principle을 사용하는 이유와 각 원칙의 관련성에 대해 조금 설명합니다.
왜 설계 원칙이 중요한가?
사용자의 요구 사항 변경은 실제로 때때로 이루어집니다.
요구사항이 바뀌면 한숨에서 나오는 것은 사실이다.
하지만 그런 이유로 결국 그 요구사항을 받아들이고 프로그램을 수정해야 한다.
왜? 결국 프로그램을 사용하는 것은 유저이기 때문에. 다양한 요구 사항을 모두 수정해 보면 코드가 비틀리는 것도 비일비재한다.
초기에는 깨끗한 설계도 이것 덧붙여 보면 더러워지기 어려워지기 때문에.
이로 인해 유지보수성과 확장성이 더욱 높아지고 버그가 줄어들 수 있습니다.
좋은 디자인중요합니다.
SOLID Principles를 준수함으로써 프로그램의 유연성과 확장성과 재사용성 향상, Cupling 감소, Cohesion 증가 등 유지보수성을 높이는 뛰어난 설계가 가능합니다.
가능한 한 유지 관리하기 쉽고 코드를 수정해도 다른 것이 영향을 받지 않게 하지 않으면 조금이라도 더 빠른 시간 내에 요구사항을 반영할 수 있게 되어 조금이라도 더 적은 버그가 튀어나올 것이다.
요약과 SOLID 원칙의 관련성
- Single Responsibility Principle
- 하나의 수업은 단 하나의 책임만 가지고 있어야 하며, 변경의 이유가 그 책임의 변화 하나뿐이다.
- 테스트 용이성 향상, 코드 변경 효과 최소화
- 하나의 수업은 단 하나의 책임만 가지고 있어야 하며, 변경의 이유가 그 책임의 변화 하나뿐이다.
- Open Closed Principle
- 모든 컴포먼트는 수정에는 열려 있고 확장에는 닫아야 합니다.
. - 코드를 변경하지 않고 기능을 변경하고 확장할 수 있습니다.
- 확장성과 유연성 향상
- 모든 컴포먼트는 수정에는 열려 있고 확장에는 닫아야 합니다.
- Liskov Substitution Principle
- subtype이 항상 supertype으로 대체됨가능해야하며 대체시 프로그램 동작에 변화가 없어야합니다.
- 이 때문에, 오버라이드(override)시의 슈퍼 타입 메소드의 동작 의도를 크게 수정해서는 안된다.
- 확장성 향상, Cohesion 감소
- subtype이 항상 supertype으로 대체됨가능해야하며 대체시 프로그램 동작에 변화가 없어야합니다.
- Interface Segregation Principle
- 모든 개체는 사용하지 않는 method 를 가지는 interface 에 depend 해서는 안 된다.
- 이렇게 하려면 인터페이스를 작은 단위로 분할해야 합니다.
- 재사용성 증가, 커플링 증가, 코히션 감소
- Dependency Inversion Principle
- dependency를 가진 구성 요소는 implementation 대신 abstraction에 의존해야 한다.
- 확장성과 유연성 향상, 커플링 감소
- dependency를 가진 구성 요소는 implementation 대신 abstraction에 의존해야 한다.
Single Responsibility Principle과 Interface Segregation Principle은 비슷합니다.
Single Responsibility Principle은 모든 클래스가 하나의 책임만 갖도록 분할되어야 합니다.
Open Closed Principle과 Dependency Inversion Principle, Liskov Substitution Principle에는 관련이 있다.
Dependency Inversion Principle은 추상화에 의존해야 하는 원칙이며, Liskov Substitution Principle은 서브타입을 슈퍼타입으로 대체해야 한다는 원칙입니다.
Liskov Substitution Principle에 의해 업 캐스트 될 때 프로그램 동작의 동등성을 보장하기 위해 abstraction을 사용할 수 있습니다.
abstraction을 사용할 수 있으므로 Dependency Inversion Principle 및 Open Closed Principle을 사용할 수 있습니다.
마무리
SOLID Principle은 객체 지향 설계를 수행할 때 중요한 원칙입니다.
그러나 이러한 원칙을 항상 지키는 것은 어렵다.
설계에 시간도 많아 모든 원칙을 항상 100% 준수할 수 있는 것은 아니기 때문이다.
오히려 SOLID Principle을 적용하려고 하면 코드가 더 복잡해지는 경우도 많고, SOLID Principle 이외에 다른 원칙도 많다.
따라서 상황에 따라 적절한 판단이 필요합니다.
그러므로 좋은 디자인의 많은 예듣다 더 좋은 방법이 없는지 끊임없이 고찰해야 한다.