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
- elasticsearch
- Domain Driven Design
- hibernate
- Spring
- DDD
- nginx
- 스프링 배치
- 제주
- docker
- Spring Boot
- Angular2
- apache storm
- Spring XD
- design pattern
- Hbase
- Java
- scala
- 엘라스틱서치
- elastic search
- Spring Batch
- Linux
- Storm
- hadoop
- spark
- SBT
- Gradle
- Clean Code
- intellij
- hdfs
- 도메인주도설계
Archives
- Today
- Total
욱'S 노트
Scala - 트래잇 본문
트래잇은 자바에서의 인터페이스와 유사하다. 트래잇은 지원해야하는 메소드 시그니처를 명시한다. 자바 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