티스토리 뷰

Programming Language/Kotlin

[Kotlin] by

SdardewValley 2022. 8. 17. 22:14
반응형

데코레이터 패턴

  데코레이터 패턴은 상속을 허용하지 않는 클래스에 새로운 기능을 추가할 때 사용하는 방법이다. 데코레이터라는 클래스를 생성하고 상속되지 않은 클래스의 인스턴스를 데코레이터의 필드에 놓는다. 그리고 기존의 요청은 인스턴스에게 전달한다. 추가하고 싶은 기능은 데코레이터 클래스에 작성을 하면 된다.

 

 

코틀린에서 제공하는 데코레이터 패턴

class CountingSet<T> (
  val innerSet: MutableCollection<T> = HashSet()
) : MutableCollection<T> by innerSet {
  var objectAdded = 0

  override fun add(element: T): Boolean {
    objectAdded++
    return innerSet.add(element)
  }

  override fun addAll(elements: Collection<T>): Boolean {
    objectAdded += elements.size
    return innerSet.addAll(elements)
  }
}

  코틀린에서는 by 키워드를 통해서 데코레이터 클래스를 쉽게 만들수 있도록 도와준다.

  필드에 기능을 추가하고 싶은 인스턴스를 놓는다. 그리고 by 뒤에 기능을 확장하고 싶은 클래스를 추가하면 된다. MutableCollection 인터페이스의 모든 기능을 구현하지는 않았다. 이렇게 구현하지 않은 기능들은 내부 컨테이너 innerSet에 위임한다.

 

fun main() {
  val set = CountingSet<Integer>()
  println(set.isEmpty())
}

  이렇게 innerSet에 위임함으로써 CountingSet에는 isEmpty를 대신 호출하는 메서드를 작성하지 않았어도 호출할 수 있다.

 

 

참고

  • Kotlin IN ACTION

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함