나는 최근에 추상 클래스 사용에 대해 고민하고 있습니다.
때로는 추상 클래스가 미리 만들어져 파생 클래스가 작동하는 방식의 템플릿으로 작동합니다. 이는 다소 높은 수준의 기능을 제공하지만 파생 클래스에서 구현할 특정 세부 정보를 생략한다는 것을 의미합니다. 추상 클래스는 몇 가지 추상 메소드를 배치하여 이러한 세부 사항의 필요성을 정의합니다. 이러한 경우 추상 클래스는 청사진, 기능에 대한 높은 수준의 설명 또는 호출하려는 모든 것과 같이 작동합니다. 자체적으로 사용할 수는 없지만 고급 구현에서 제외 된 세부 사항을 정의하도록 전문화되어야합니다.
다른 경우에는 일부 파생 된 클래스를 생성 한 후 추상 클래스가 생성됩니다 (부모 / 추상 클래스가 아직 파생되지 않았기 때문에 아직 의미하는 바는 아님). 이 경우 추상 클래스는 일반적으로 현재 파생 클래스에 포함 된 모든 종류의 공통 코드를 넣을 수있는 장소로 사용됩니다.
위의 관찰을 통해이 두 경우 중 어느 것이 규칙인지 궁금합니다. 모든 파생 클래스에서 일반적으로 발생하기 때문에 추상 클래스에 세부 정보가 표시되어야합니까? 고급 기능의 일부가 아닌 공통 코드가 있어야합니까?
파생 클래스에 공통으로 발생하기 때문에 추상 클래스 자체에 의미가없는 코드가 있어야합니까?
추상 클래스 A에는 a () 메소드와 aq () 메소드가 있습니다. 파생 클래스 AB와 AC 모두에서 aq () 메서드는 b () 메서드를 사용합니다. b ()를 A로 옮겨야합니까? 그렇다면 A 만 봅니다 (AB와 AC는 없다고 가정). b ()의 존재는 의미가 없습니다! 이것은 나쁜 것입니까? 누군가가 추상 클래스를 살펴보고 파생 클래스를 방문하지 않고 진행되는 상황을 이해할 수 있어야합니까?
솔직히 말해서, 이것을 요구하는 순간, 파생 클래스를 보지 않고도 이해가되는 추상 클래스를 작성하는 것은 깨끗한 코드와 깨끗한 아키텍처의 문제라고 생각하는 경향이 있습니다. 나는 모든 종류의 코드에 대한 덤프처럼 작동하는 추상 클래스의 아이디어가 실제로 모든 파생 클래스에서 공통적으로 발생하는 것을 좋아하지 않습니다.
당신은 어떻게 생각 / 연습합니까?
Writing an abstract class that makes sense without having to look in the derived classes is a matter of clean code and clean architecture.
-- 왜? 응용 프로그램을 디자인하고 개발하는 과정에서 여러 클래스가 자연스럽게 추상 클래스로 리팩토링 될 수있는 공통 기능을 가지고 있음을 알 수 있습니까? 파생 클래스에 대한 코드를 작성하기 전에 항상 이것을 예상 할 수있는 천성적인 사람이어야합니까? 내가 이처럼 성실하지 않으면, 리팩토링을 수행하는 것이 금지됩니까? 코드를 버리고 다시 시작해야합니까?