티스토리 뷰
반응형
데코레이터 패턴
데코레이터 패턴은 상속을 허용하지 않는 클래스에 새로운 기능을 추가할 때 사용하는 방법이다. 데코레이터라는 클래스를 생성하고 상속되지 않은 클래스의 인스턴스를 데코레이터의 필드에 놓는다. 그리고 기존의 요청은 인스턴스에게 전달한다. 추가하고 싶은 기능은 데코레이터 클래스에 작성을 하면 된다.
코틀린에서 제공하는 데코레이터 패턴
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
링크
TAG
- squash merge
- github
- Python
- downTo
- graphql
- 코틀린
- solidity
- string
- mysql
- DGS Framework
- hashcode
- 코딩테스트
- 확장 함수
- postman
- 네이버 2022 공채
- Basic Type
- git
- 주생성자
- java
- postman tests
- Kotlin In Action
- 1차 인터뷰
- go 특징
- Squash and merge
- python3
- Kotlin
- pm.test
- postman collection
- pm.expect
- 2차 인터뷰
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함