본문 바로가기

Development/Programming

[Scala] Compound Types

자 아래에는 trait 클래스로 Cloneable 과 Resetable이 있다.


  1. trait Cloneable extends java.lang.Cloneable {
  2. override def clone(): Cloneable = {
  3. super.clone().asInstanceOf[Cloneable]
  4. }
  5. }
  6. trait Resetable {
  7. def reset: Unit
  8. }



아래의 클래스를 활용하는 함수가 있다.

  1. def cloneAndReset(obj: ?): Cloneable = {
  2. val cloned = obj.clone()
  3. obj.reset
  4. cloned
  5. }


하지만... 함수명으로 명시적으로 표현만 되어있을뿐 다른언어에 대한 제약이 없다. 그래서 문제이다. 이럴때 Compound Types를 활용하자

아래와 같이 활용하면 오직 Cloneable과 Resetable만 받을 수 있다.


  1. def cloneAndReset(obj: Cloneable with Resetable): Cloneable = {
  2. //...
  3. }


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

[Scala] Generic Classes  (0) 2014.03.28
[Scala] Sequence Comprehensions  (0) 2014.02.14
[Scala] Case Classes  (0) 2014.02.04
[Scala] 맛보기~! (2)  (0) 2014.02.03
[Scala] 맛보기~!  (0) 2014.02.03