728x90
섀도잉
class User(val email: String) {
fun isMatchingEmail(email: String): Boolean {
...
}
...
}
- 프로퍼티와 파라미터가 같은 이름을 가지게 되어, 지역 파라미터가 외부 스코프에 있는 프로퍼티를 가리게 되는 것을 섀도잉이라 함
- 그냥 프로퍼티와 파라미터가 같은 이름을 가질 수 있음으로 정의
interface Tree
class Birch: Tree
class Spruce: Tree
class Forest<T: Tree> {
fun <T: Tree> addTree(tree: T) {
println("adding tree ...")
}
}
fun main() {
val forest = Forest<Birch>()
forest.addTree(Birch())
forest.addTree(Spruce()) //정상동작...
}
-----------------------------------------
class Forest<T: Tree> {
fun addTree(tree: T) {
println("adding tree ...")
}
}
fun main() {
val forest = Forest<Birch>()
forest.addTree(Birch())
forest.addTree(Spruce()) // error
}
-----------------------------------------
class Forest<T: Tree> {
fun <ST: Tree> addTree(tree: ST) {
println("adding tree ...")
}
// 다른 타입 파라미터에 제한을 준 경우
fun <ST: T> addTypeTree(tree: ST) {
println("adding tree ...")
}
}
- 섀도잉은 클래스 타입 파라미터와 함수타입 파라미터 사이에서도 발생을 함
- 독립적인 타입의 파라미터를 의도한 경우에는 타입 파라미터의 이름을 다르게 정의하는 것이 좋음
'KOTLIN' 카테고리의 다른 글
[KOTLIN] 일반적인 프로퍼티 패턴은 프로퍼티 위임으로 만들어라 (이펙티브 코틀린) (0) | 2022.07.13 |
---|---|
[KOTLIN] 제네릭 타입과 VARIANCE 한정자를 활용하라 (이펙티브 코틀린) (0) | 2022.07.10 |
[KOTLIN] 연산자 오버로드를 할때는 의미에 맞게 사용 (0) | 2022.07.03 |
[KOTLIN] NULLABLE UNIT 을 리턴하지 말라 (이펙티브코틀린) (0) | 2022.07.03 |
[KOTLIN] 변수의 스코프 최소화 (이펙티브코틀린) (0) | 2022.06.18 |