[Effective Kotlin] 아이템 23 : 타입 파라미터의 섀도잉을 피하라

0

프로퍼티와 파라미터가 같은 이름을 가지는것을 섀도잉이라 부른다.

class Forest(val name: String) {

 fun addTree(name: String){
 
 }
 
}

이러한 섀도잉 현상은 클래스 타입 파라미터와 함수 타입 파라미터 사이에서 발생한다.

interface Tree

class Birch : Tree
class Spruce : Tree

class Forest<T: Tree>{
  
  fun<T: Tree> addTree(tree: T){
  
  }
}

이렇게 코드를 작성하면, Forest 와 addTree 타입 파라미터가 독립적으로 동작한다.

val forest = Forest<Birch>()
  forest.addTree(Birch())
  forest.addTree(Spruce())
  

이러한 상을 의도 하는 경우는 거의 없을 것이다.

따라서 addTree가 클래스 파타입 파라미터인 T를 사용하게 하는것이 좋다.

만약 독립적인 타입파라미터를 의도했다면 이름을 다르게 하는것이 좋다.

class Forest<T: Tree>{
 fun <ST: T> addTree(tree: St){
  //...
 }
}

정리

타입 파라미터의 섀도잉을 피해야한다.

profile
쉽게 가르칠수 있도록 노력하자

0개의 댓글