욱'S 노트

Scala - 트래잇 본문

Programming/Scala

Scala - 트래잇

devsun 2016. 11. 1. 14:39

트래잇은 자바에서의 인터페이스와 유사하다. 트래잇은 지원해야하는 메소드 시그니처를 명시한다. 자바 8에서처럼 스칼라는 부분적인 구현을 지원한다. 몇몇의 메소드의 기본 구현을 제공할 수 있다는 것을 의미한다. 클래스와는 반대로 생성자 파라미터를 가질 수 없다.

trait Similarity {
def isSimilar(x : Any) : Boolean
def isNotSimilar(x : Any) : Boolean = !isSimilar(x)
}

두개의 메소드를 가지고 있다. isSimilar는 구현을 제공하지 않고 있지만 isNotSimilar는 구현을 제공한다. 결과적으로 이 트래잇과 결합하는 클래스는 isSimilar에 대한 구현만 하면 된다. 트래잇은 일반적으로 mixin 클래스 컴포지션으로 클래스와 결합된다.

class Point (var x : Int, var y : Int) extends Similarity {
def move(dx : Int, dy : Int): Unit = {
x = x + dx
y = y + dy
}

override def isSimilar(obj: Any): Boolean = {
obj.isInstanceOf[Point] && obj.asInstanceOf[Point].x == x && obj.asInstanceOf[Point].y == y
}

override def toString : String =
"(" + x + "," + y + ")"
}
object Trait extends App {
val p1 = new Point(3,4);
val p2 = new Point(1,2);
val p3 = new Point(3,4);

println(p1.isSimilar(p2))
println(p1.isSimilar(p3))
}

false

true



출처 : http://docs.scala-lang.org/tutorials/tour/traits

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

Scala - 익명 함수  (0) 2016.11.02
Scala - 믹스인 클래스 컴포지션  (0) 2016.11.01
Scala - 클래스  (0) 2016.11.01
Scala - 통합 타입  (0) 2016.11.01
Scala - 소개  (0) 2016.10.21
Comments