공부/이펙티브코틀린
아이템 32 - 추상화 규악을 지켜라
띵커베르
2024. 7. 4. 19:47
728x90
- 추상화 규악(Abstraction Contract)은 코드의 특정 부분(함수, 클래스, 인터페이스 등)이 다른 부분과 상호작용하는 방식에 대한 명확한 약속입니다. 이는 코드의 명확성, 예측 가능성, 유지 보수성을 향상시킵니다.
- 규칙을 지켜야 하는 이유
- 일관성 유지: 예측 가능한 방식으로 작동하도록 하여 다른 개발자들이 이해하고 사용할 수 있게한다
- 유지 보수성 향상: 규악을 지키면 코드를 변경할 때 영향을 받는 부분을 쉽게 예측할 수 있어 유지보수가 용이해 진다.
- 클래스를 상속하거나 다른 라이브러리의 인터페이스를 구현할 때는 규악을 반드시 지켜야 합니다.
규약을 지키지않을 경우 아래와 같이 잘못된 값이 나올 수 있다
class Item32 {
@Test
fun p_203_Test() {
val set = mutableSetOf(Item32_Id(1))
set.add(Item32_Id(1))
set.add(Item32_Id(1))
println("set.size: ${set.size}") // 3
}
}
/**
* equals 메서드는 오버라이드되었지만, hashCode 메서드는 오버라이드되지 않았습니다.
* Set은 중복 요소를 허용하지 않지만, 중복 여부를 판단하기 위해 equals와 hashCode를 모두 사용합니다.
*/
class Item32_Id(val id: Int) {
override fun equals(other: Any?): Boolean {
return other is Item32_Id && other.id == id
}
// override fun hashCode(): Int {
// return id
// }
}
- hashCode 까지 override 한다면 정상적으로 1 값이 나온다.
프로그램을 안정적으로 유지하고 싶다면, 규악을 잘 지키자.
728x90