Kotlin에서 불변 속성으로 안전한 코드를 작성하시겠습니까?
Kotlin으로 작성할 때 몇 가지 안전 조치를 지적하고 싶습니다. Kotlin에는 깨끗하고 안전하며 읽기 쉬운 코드를 작성할 수 있는 멋진 API가 있습니다.
Kotlin의 안전 총 중 하나는 불변 속성 val 또는 읽기-쓰기 속성 var를 정의하고 있습니다.
val num = 10
num = 5 //this is not allowed
Kotlin의 속성은 기본적으로 캡슐화됩니다. 즉, num도 읽기 전용 속성이며, 사용자 정의 getter를 가질 수 있거나 조작할 수 있는
mutableListOf()
와 같은 가변 객체를 보유할 수 있습니다.val list = mutableListOf(2,3,4)
list.add(5) //this gives us more flexibility
또는 사용자 정의 getter를 지정할 수도 있습니다.
class Rectangle(val width: Int, val height: Int) {
val area: Int
get() = this.width * this.height
}
위의 예에서 우리는 val 속성을 사용하는 경우 Kotlin이 기본적으로 우리를 보호한다는 것을 확인했습니다.
중요한 질문은 상태를 유지하는 클래스에서 왜 사용해야 하는가입니다.
이 예를 보자:
var num = 0
for(i in 0..1000) {
thread {
Thread.sleep(10)
num++
}
}
Thread.sleep(3000)
println(num)
위의 예에서 일부 스레드가 이 속성의 값을 변경하고 결국 일관된 앱을 갖지 못하기 때문에 num이 1000이 아닐 가능성이 높습니다.
코루틴도 마찬가지입니다. 값도 수정됩니다.
Kotlin의 가변성 제한:
mutableMapOf()
mutableListOf()
...기타) 변경 가능한 것보다 변경 불가능한 객체와 클래스를 선호하십시오. 그러나 이를 변경해야 하는 경우 불변 데이터 클래스를 만들고 사본을 사용하여 상태를 변경하는 것을 고려하십시오.
data class User(
val name: String,
val surname: String,
val address: String
)
그 사이에 사용자가 자신의 주소를 변경했다고 가정해 보겠습니다. 그래서 우리는 이 변경 불가능한 주소 속성을 복사하여 변경하려고 합니다.
val johny = User(
"John",
"Johnny",
"Beverly Hills 74"
)
val johnyWithNewAdress = johny.copy(adress = "Holywood 12")
가변성에 관한 또 다른 큰 실수는 불변 컬렉션을 다운캐스팅하는 것입니다. 이것은 큰 실수이며 그렇게 하지 마십시오.
예시:
val list = listOf(1,2,3,4,6)
if (list is MutableList) {
list.add(5) //DON'T DO THIS
}
//Do THIS INSTEAD
val list = listOf(1,2,3,4,6)
val newList = list.toMutableList()
newList.add(5)
여기서 우리 목록은 외부에서 수정되지 않고 대신 쉽게 수정할 수 있는 새 목록의 복사본을 만듭니다.
이 규칙에는 몇 가지 예외가 있지만 현명하게 선택했습니다. 때로는 객체가 완전히 변경 가능해야 합니다. 기준선은 가능한 한 가변성을 제한해야 한다는 것입니다.
Reference
이 문제에 관하여(Kotlin에서 불변 속성으로 안전한 코드를 작성하시겠습니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/boryans/write-safe-code-with-immutable-properties-in-kotlin-3if6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)