데브허브 | DEVHUB | "Every Class Should Be Sealed in C#""Every Class Should Be Sealed in C#"
- C# 클래스/레코드는 기본적으로
sealed 되어야 한다는 주장이 제기됨. 🔒
sealed는 JIT 컴파일러 최적화를 통해 미미한 성능 향상을 가져올 수 있지만, 실제 체감은 어려움. 🚀
- 성능보다는 명확한 의도(intent) 전달이
sealed의 주된 이유이며, 특히 라이브러리 개발에서 중요함. 💡
sealed는 라이브러리 사용자와의 계약을 정의하여, 클래스 확장을 의도적으로 제한함을 나타냄. 🤝
- Kotlin과 같은 최신 언어들은 기본적으로 클래스를
final 또는 sealed로 처리하며, 상속을 위해서는 명시적으로 open 키워드를 사용해야 함. 🌍
- C#의 초기 설계는 Java의 영향을 받았으나, 현재 재설계된다면
sealed가 기본값이 될 가능성이 높음. 🕰️
- 일부 C# 원 설계팀 멤버들은
sealed가 기본이 아닌 것을 C#의 실수 중 하나로 간주함. ❌
- 가장 제한적인 키워드(예:
private, internal, sealed)를 기본으로 사용하고 필요할 때 완화하는 것이 좋은 개발 관행으로 제시됨. 🛡️
- 클래스를
sealed로 변경하는 것은 호환성을 깨는 변경(breaking change) 이지만, sealed를 제거하는 것은 아님. 🚧
- 모든 클래스를
abstract가 아닌 이상 sealed로 만들고, public이 필요하지 않으면 internal 또는 private으로 설정하는 것이 권장됨. 🎯