Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Gradle
- spark
- elasticsearch
- SBT
- hadoop
- DDD
- hibernate
- docker
- scala
- Spring Boot
- Domain Driven Design
- 제주
- Storm
- 도메인주도설계
- 엘라스틱서치
- Spring
- Spring Batch
- intellij
- apache storm
- Linux
- 스프링 배치
- Hbase
- nginx
- elastic search
- Clean Code
- hdfs
- Java
- Angular2
- Spring XD
- design pattern
Archives
- Today
- Total
욱'S 노트
Scala - 믹스인 클래스 컴포지션 본문
단일 상속만을 지원하는 언어들과는 다르게 스칼라는 클래스를 재사용을 위한 다른 개념을 가지고 있다. 새로운 클래스 정의내에 클래스의 정의를 새로운 멤버 정의로 재활용할 수 있다. 이것을 믹스인-클래스 컴포지션이라고 한다.
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