-
Notifications
You must be signed in to change notification settings - Fork 36
20장 abstract members
nephilim edited this page May 1, 2012
·
4 revisions
-
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가 먼저 초기화됨
- class parameter는 생성자로 건네지기 전에 평가
- abstract val은 superclass 초기화 후 평가됨
- 해결 방법
- pre-initialized field
- lazy vals
- Animal - Food 예제
- 19장 covariant설명 에서 본
ArrayStoreException과 유사한 상황 발생
- 생각해볼 필요 있음
- 서브클래스에 맞는 타입을 각각 정의해서 써야하는 상황
- Polymorphism으로 해결하려는 설계 시도 자체가 잘못
- 서브클래스에 맞는 하나의 타입을 줘야하는
- Parameterized Type과 유사
- 생성 시 전달하는 것과 클래스 정의 시점의 차이
- 19장 covariant설명 에서 본
ArrayStoreException과 유사한 상황 발생
- path: path to an object
- 주된 이유는 inner object가 outer object를 가리켜야 하기 때문
-
예시: close 메서드를 갖는 type에 대해 수행
def using[T <: {def close():Unit }] (obj:T) { obj.close }
-
다른 언어와는 달리 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을 만들어 보자: 이건 누가 할까?