욱'S 노트

Scala - 믹스인 클래스 컴포지션 본문

Programming/Scala

Scala - 믹스인 클래스 컴포지션

devsun 2016. 11. 1. 15:23

단일 상속만을 지원하는 언어들과는 다르게 스칼라는 클래스를 재사용을 위한 다른 개념을 가지고 있다.  새로운 클래스 정의내에 클래스의 정의를 새로운 멤버 정의로 재활용할 수 있다. 이것을 믹스인-클래스 컴포지션이라고 한다.

abstract class AbsIterator {
type T
def hasNext : Boolean
def next : T
}

다음으로는 AbsIterator를 상속한 믹스인 클래스를 고려해보자. 클래스를 믹스인으로 사용될 수 있게 정의하기 위해서 trait 키워드를 활용한다. 

trait RichIterator extends AbsIterator {
def foreach(f : T => Unit) = {
while (hasNext) f(next)
}
}

다음은 String의 각 캐릭터를 이터레이션할 수 있는 구현클래스를 정의해보자.

class StringIterator (s : String) extends AbsIterator {
override type T = Char

private var i = 0

override def next: T = {
val ch = s.charAt(i)
i += 1
ch
}

override def hasNext: Boolean = i < s.length
}

마지막으로 StringIterator와 RichIterator 두가지 기능을 조합하여 하나의 클래스로 정의해보자. 이러한 기능은 단일 상속 및 인터페이스에서는 불가능하다. 스칼라에서는 믹스인-클래스 컴포지션으로 가능하다.

object StringIteratorTest extends App {
class Iter extends StringIterator("Hello world") with RichIterator
val iter = new Iter
iter foreach println
}

Iter 클래스는 StringIterator와 RichIterator를 믹스인 컴포지션하여 생성된 클래스이다. 


출처 : http://docs.scala-lang.org/tutorials/tour/mixin-class-composition

'Programming > Scala' 카테고리의 다른 글

Scala - 고차함수  (0) 2016.11.02
Scala - 익명 함수  (0) 2016.11.02
Scala - 트래잇  (0) 2016.11.01
Scala - 클래스  (0) 2016.11.01
Scala - 통합 타입  (0) 2016.11.01
Comments