본문 바로가기
공부/이펙티브코틀린

아이템 32 - 추상화 규악을 지켜라

by 띵커베르 2024. 7. 4.
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

댓글