Skip to content

20장 abstract members

nephilim edited this page Jun 10, 2012 · 1 revision

20장 Abstract Type

Abstract val

  • parameterless method & val

    • def, val의 override 관계 정리

    • parameterless method는 side effect가 없다고 가정한다.

    • 참고: Intellij Scala Plugin 업데이트 내용 中

      String.length, String.hashCode, String.trim has no side effects, so it’s always completing without unnecessary, annoying parentheses.

  • trait의 초기화

    • class A extends aTrait
    • trait가 먼저 초기화됨
      1. class parameter는 생성자로 건네지기 전에 평가
      2. abstract val은 superclass 초기화 후 평가됨
    • 해결 방법
      1. pre-initialized field
      2. lazy vals

Abstract Types

  • Animal - Food 예제
    • 19장 covariant설명 에서 본 ArrayStoreException과 유사한 상황 발생
      • 생각해볼 필요 있음
    • 서브클래스에 맞는 타입을 각각 정의해서 써야하는 상황
      • Polymorphism으로 해결하려는 설계 시도 자체가 잘못
      • 서브클래스에 맞는 하나의 타입을 줘야하는
    • Parameterized Type과 유사
      • 생성 시 전달하는 것과 클래스 정의 시점의 차이

Path-depenent Type

  • path: path to an object
  • 주된 이유는 inner object가 outer object를 가리켜야 하기 때문

Structural subtyping

Enumerations

  • 다른 언어와는 달리 Scala 에서는 라이브러리로 제공됨

      object MyEnum extends Enumeration {
        val One = Value
        val Two = Value
      }
    
    • Value는 inner class의 instance를 반환
    • MyEnum.One.id == 0
  • 인자로 전달할 경우

      class LevelInfo ( val enumArg:MyEnum.Value) {
      	//...
      }
    
  • Value는 Path-dependent Type임

  • 실습 제안

    • 동서남북에 기타 내용(각도)을 같이 포함하는 enumeration을 만들어 보자: 이건 누가 할까?
Clone this wiki locally