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
'공부 > 이펙티브코틀린' 카테고리의 다른 글
아이템 34 - 기본 생성자에 이름 있는 옵션 아규먼트를 사용하라 (0) | 2024.07.11 |
---|---|
아이템 33 - 생성자 대신 팩토리 함수를 사용하라 (0) | 2024.07.11 |
아이템 31 - 문서로 규악을 정의하라 (0) | 2024.07.02 |
아이템 30 - 요소의 가시성을 최소화하라 (0) | 2024.07.02 |
아이템 29 - 외부 API 를 랩(warp)해서 사용하라 (0) | 2024.06.23 |
댓글