Skip to content

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의 본문이 평가된다.
Clone this wiki locally