[KOTLIN] 타입 파라미터의 섀도잉을 피하라 (이펙티브 코틀린)

2022. 7. 10. 10:51·KOTLIN
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
'KOTLIN' 카테고리의 다른 글
  • [KOTLIN] 일반적인 프로퍼티 패턴은 프로퍼티 위임으로 만들어라 (이펙티브 코틀린)
  • [KOTLIN] 제네릭 타입과 VARIANCE 한정자를 활용하라 (이펙티브 코틀린)
  • [KOTLIN] 연산자 오버로드를 할때는 의미에 맞게 사용
  • [KOTLIN] NULLABLE UNIT 을 리턴하지 말라 (이펙티브코틀린)
집한구석
집한구석
  • 집한구석
    tgyun615.info
  • 전체
    오늘
    어제
    • 카테고리 (183)
      • JAVA (38)
      • SPRING (15)
      • KOTLIN (23)
      • NETTY (1)
      • DEVOPS (3)
      • DOCKER (7)
      • KUBERNETES (2)
      • JAVASCRIPT (1)
      • SPLUNK (3)
      • ELK (7)
      • KAFKA (2)
      • GO (4)
      • ALGORITHM & DATA STRUCTURE (9)
      • IDE (5)
      • OS (16)
      • NETWORK (14)
      • GCP (2)
      • AWS (2)
      • DATABASE (10)
      • CLEANCODE (7)
      • OTHER (12)
  • 최근 글

  • 태그

    자바
    엘라스틱서치
    IntelliJ
    go
    JPA
    이펙티브코틀린
    Kafka
    이펙티브 코틀린
    프로그래머스
    코틀린
    splunk
    Elk
    docker
    ElasticSearch
    SQL
    클린코드
    Spring
    cleancode
    AWS
    java
  • 링크

    • github
    • linkedin
    • resume
  • hELLO· Designed By 정상우. v4.10.3
집한구석
[KOTLIN] 타입 파라미터의 섀도잉을 피하라 (이펙티브 코틀린)
상단으로

티스토리툴바