본문 바로가기

Kotlin4

Issue with using reflect in kotlin Class kotlin.reflect.jvm.internal.calls.CallerImpl$FieldGetter can not access a member of class 다음의 이슈에 직면하였다. 왜일까 Research 를 하였고. 아래 Reference 에 명시한 글을 읽고 나니 이해가 되었다. 아래 글의 답변을 번역해두었다. 나는 당신의 요점을보고 대부분 동의합니다. 그러나 Kotlin 리플렉션은 약간 다른 모델에서 작동합니다. 컴파일 타임에 컴파일러가 볼 수 있는 것과 최대한 유사한 프로그램 구조를 나타냅니다. 이것이 추구해야 할 올바른 목표라는 점에 대해 이의를 제기할 수 있지만 이 접근 방식에는 특정 이점이 있습니다. 예를 들어 런타임용으로 설계된 시스템(예: DI)이 컴파일 타임에 Kotli.. 2022. 10. 6.
Effective Kotlin - Minimize elements visibility Scope 을 알맞게 설정하자 Kotlin 에서는 다음 visibility modifiers 들을 갖는다. public(default) : 어디에서나 접근이 가능하다. ( 자바에서는 default 가 package-private : 패키지 내에서만 접근 가능 ) private : 클래스 내에서만 접근이 가능하다. protected : 클래스와 자식 클래스에서 접근이 가능하다. internal : 자바의 package private 같은 녀석이지만, kotlin에서 module 단위에서 접근이 가능하다. module 은 패키지와 클래스를 포함한다. 위에서 visibility modifiers 을 이용해서 알맞게 클래스를 설계하자. 2021. 10. 14.
Effective Kotlin - Respect the contract of compareTo compareTo의 상호간의 동작 관계 compareTo method 는 Any class 의 함수가 아니고, 코틀린의 오퍼레이터이며, Comparable 인터페이스에 존재한다. 어떤 오브젝트가 해당 interface 를 주입받거나, compareTo 라는 오퍼레이터 함수를 갖고 있다면, 이는 해당 오브젝트가 질서를 갖는다는 의미다. 아래의 질서를 갖는다. 반대칭 : a>= b 이고 b >= a 이면 a == b 입니다. 그러므로, compare 과 equality 사이에는 관계가 있으며, 서로 일치해야 합니다. 일관성이 있어야함. 전이 : a >= b 이고 b >= c 이면 a>=c 이다. 해당 속성이 중요한 이유는 다음 과같은 결론이 이루어지지 않을 경우, 조건 비교가 영원히 진행될 수 있기 때문입니.. 2021. 10. 7.
Effective Kotlin - Properties should represent state, not behavior 코틀린의 속성은 자바의 필드와 비슷해 보입니다. 그렇지만, 서로 다른 컨셉을 갖고 있습니다. //Kotlinproperty var name:String?=null //Javafield String name=null; 같은 방식으로 사용할지라도, 코틀린의 속성은 좀 더 많은 것을 할 수 있다. property 선언에 대한 전체 구문 var [: ] [= ] [] [] Custom Get, Set ( var ) var name: String? = null get() = field?.toUpperCase() set(value) { if(!value.isNullOrBlank()) { field = value } Custom Get ( val ) val fullName: String? get() = "$name .. 2021. 8. 19.
반응형