각각의 다른 정의가 이루어진 클래스를 하나로 합치는 방법이다.
AbsIterator 클래스를 상속 받아서 2개의 클래스가 정의가 된다.
abstract class AbsIterator {
type T
def hasNext: Boolean
def next: T
}
foreach를 구현한 클래스와
trait RichIterator extends AbsIterator {
def foreach(f: T => Unit) { while (hasNext) f(next) }
}
String을 사용하는 클래스
class StringIterator(s: String) extends AbsIterator {
type T = Char
private var i = 0
def hasNext = i < s.length()
def next = { val ch = s charAt i; i += 1; ch }
}
위의 2개의 클래스를 Java에서는 합쳐서 사용하기는 불가능하다 왜냐하면 같은 클래스를 상속 받은 상태이기 때문이다. 개인적인 생각으로는 다중 상속의 위험성 때문에 단일 상속만 지원하는 언어가 많은데 잘 사용만 하면 편하기 떄문에 Scala에서는 이렇게 해결한 것 같다.
아래는 2개의 클래스를 합치는 코드이다.
object StringIteratorTest {
def main(args: Array[String]) {
class Iter extends StringIterator("aaaaaa") with RichIterator
val iter = new Iter
iter foreach println
}
}
'Development > Programming' 카테고리의 다른 글
[Scala] Nested Functions (0) | 2015.02.16 |
---|---|
[Java Design Pattern] Design Patterns in Java Tutorial (0) | 2015.02.10 |
[Scala] Implicit Parameters (0) | 2015.02.03 |
[Java Design Patten] Thread Specific Storage 패턴 (0) | 2014.11.26 |
[Java Design Patten] Two-Phase Termination 패턴 (0) | 2014.10.08 |