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 | 31 |
Tags
- SBT
- apache storm
- intellij
- Java
- Gradle
- 도메인주도설계
- DDD
- elasticsearch
- Hbase
- nginx
- hdfs
- Linux
- docker
- scala
- 스프링 배치
- 제주
- 엘라스틱서치
- Spring Boot
- Domain Driven Design
- hadoop
- Spring Batch
- Angular2
- Spring XD
- Spring
- hibernate
- Clean Code
- Storm
- elastic search
- design pattern
- spark
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