https://blog.stackademic.com/kotlin-guide-eliminating-protected-attributes-for-cleaner-code-2ac67a958594