728x90
- 작은 인터페이스는 배우기 쉽고 유지하기 쉽다
- 보이는 요소 자체가 적다면, 유지보수하고 테스트할 것이 적다
- 변경을 가할 때는 기존의 것을 숨기는 것보다 새로운 것을 노출하는 것이 쉽다.
해당 코드는 delegate 를 사용하여 MutableSet 인터페이스를 구현한 클래스
MutableSet 인터페이스의 구현을 내부 MutableSet 인 innerSet 에 위임함
elementsAdded 의 setter 를 private 로 설정하여 외부에서 수정할 수 없도록 함
private var _elementsAdded: Int = 0
val elementsAdded: Int
get() = _elementsAdded
식으로도 가능하겠지만 아래의 코드가 더 깔끔해보인다.
class CounterSet<T>(
private val innerSet: MutableSet<T> = mutableSetOf()
) : MutableSet<T> by innerSet {
var elementsAdded: Int = 0
private set
override fun add(element: T): Boolean {
elementsAdded++
return innerSet.add(element)
}
override fun addAll(elements: Collection<T>): Boolean {
elementsAdded += elements.size
return innerSet.addAll(elements)
}
}
- 가시성과 관련된 제한은 한번 정해지면 변경하기 어렵다.
- 프로퍼티를 외부에서 변경할 수 있다면 클래스는 자신의 상태를 보장할 수 없다.
- 구체 접근자의 가시성을 제한해 모든 프로퍼티를 캡슐화 하는것이 좋다.
- 제한될수록 클래스의 변경을 쉽게 추적할 수 있으며, 더 쉽게 이해할 수 있고, 배울 수 있다.
728x90
'공부 > 이펙티브코틀린' 카테고리의 다른 글
아이템 32 - 추상화 규악을 지켜라 (0) | 2024.07.04 |
---|---|
아이템 31 - 문서로 규악을 정의하라 (0) | 2024.07.02 |
아이템 29 - 외부 API 를 랩(warp)해서 사용하라 (0) | 2024.06.23 |
아이템 28 - API 안정성을 확인하 (0) | 2024.06.23 |
아이템 27 - 변화로부터 코드를 보호하려면 추상화를 사용하라 (0) | 2024.06.21 |
댓글