아이템 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는 통일되었다.
  }
}

 

당연히 섀도잉을 피하는 것이 좋다!