-
Notifications
You must be signed in to change notification settings - Fork 7
9.4 트레이트 만들기
LazySoul edited this page Oct 23, 2016
·
3 revisions
- 트레이트의 본문이 주 생성자 역할을 하지만, 트레이트의 주 생성자에는 인자 목록이 없다. 또한 트레이트에는 보조 생성자도 정의할 수 없다.
- 트레이트는 클래스를 확장할 수도 있다. 하지만 트레이트가 부모 클래스의 생성자에 인자를 전달할 방법이 없다.
- 리터럴 값조차도 전달할 수 없다.
- 트레이트는 인자가 없는 주 생성자나 보조생성자가 있는 클래스만 확장할 수 있다.
- 클래스와 마찬가지로 트레이트의 본문은 그 트레이트를 사용하는 인스턴스가 생성될 때마다 실행된다.
// src/main/scala/progscala2/traits/trait-construction.sc
trait T1 {
println(s" in T1: x = $x")
val x=1
println(s" in T1: x = $x")
}
trait T2 {
println(s" in T2: y = $y")
val y="T2"
println(s" in T2: y = $y")
}
class Base12 {
println(s" in Base12: b = $b")
val b="Base12"
println(s" in Base12: b = $b")
}
class C12 extends Base12 with T1 with T2 {
println(s" in C12: c = $c")
val c="C12"
println(s" in C12: c = $c")
}
println(s"Creating C12:")
new C12
println(s"After Creating C12")
- C12의 기반 클래스로 Base12가 있다. 그 클래스가 먼저 평가되고, 그 다음에 T1과 T2, 마지막으로 C12의 본문이 평가된다.