https://f-lab.kr/insight/understanding-java-interfaces-and-abstract-classes?gad_source=1&gclid=Cj0KCQiAv628BhC2ARIsAIJIiK8-xl79zh1NES6sBHyomWggmReQ-Lb6SHLNdXjeys-4UYkqFCsgAqgaAovqEALw_wcB