아이템 23 - 타입 파라미터의 섀도잉을 피하라
ds_chanin
·2023. 5. 14. 19:13
아래는 프로퍼티와 파라미터가 같은 이름을 가지는 섀도잉을 나타낸다.
이 경우 함수 내에서 섀도잉으로 인해 프로퍼티를 가르키게 된다.
class Forest(val tree: Tree) { // (1)
fun addTree(tree: Tree) { // (2)
println(tree) // (3) -> (1)을 바라본다.
}
}
제네릭에 대한 이해가 부족할 때 아래와 같이 사용하여 섀도잉이 되면 원치않은 방향으로 파라미터가 사용될 수 있다.
class Forest<T: Tree> { // (1)
fun <T: Tree> addTree(tree: T) { // (2)
// 여기서 tree의 T(2)는 T(1)와 서로 다른 타입이기 때문이다.
// 이름을 바꾸던가 하나만 사용하도록 하자.
}
}
class Forest<T: Tree> { // (1)
fun addTree(tree: T) { // (2)
// 이제 T는 통일되었다.
}
}
당연히 섀도잉을 피하는 것이 좋다!
'스터디 > 이펙티브코틀린' 카테고리의 다른 글
아이템 30 - 요소의 가시성을 최소화화라 (0) | 2023.06.12 |
---|---|
아이템 24 - 제네릭 타입과 variance 한정자를 활용하라 (0) | 2023.05.14 |
아이템 21 - 일반적인 프로퍼티 패턴은 프로퍼티 위임으로 만들어라 (0) | 2023.05.14 |
아이템 19 - knowledge를 반복하여 사용하지 말라 (0) | 2023.05.03 |
아이템 17 - 이름 있는 아규먼트를 사용하라 (0) | 2023.04.27 |