Programming in scala 정리 (2)

11장부터 이어서 계속

Scala’s Hirarchy

  • Any: abstract class, 모든 타입의 부모 타입
    • ==, !=, equals, hashCode, toString: 공통 함수들
  • AnyVal: abstract class, 모든 vaule 타입의 부모 타입
    • value 타입은 비교시 값을 직접 비교함
    • value 타입은 new로 인스턴스 생성 못함
  • AnyRef: class, 모든 ref 타입의 부모 타입
    • ref 타입은 비교시 주소를 비교함
  • Null: abstract class, 모든 ref 타입의 자식 타입
  • null: object, Null의 유일한 인스턴스, value 타입에 대입 불가
  • Nothing: abstract class, 모든 타입의 자식 타입, 인스턴스 없음
  • Unit: abstract class, Vaule 타입임, 함수의 리턴이 없음을 나타냄
    • 모든 객체가 Unit으로 암시적으로 변환될 수 있으며, 이 경우 데이터가 삭제됨
  • None: object, nullable한 비어있는 값을 리턴할 때 사용됨

Value type

  • 컴파일러가 자바 바이트코드로 변환시 알아서 처리
  • 대부분 primitve로 처리해서 효율성 추구
  • 필요할 때는 java.lang.Integer로 박싱됨
    • 확장 함수를 부르거나
    • Any로 대입될때
  • 동등성은 값을 기준으로 계산됨

Traits

  • class와 거의 동일한 기능을 할 수 있음
    • 메소드, 필드 선언 등등
  • java8의 interface와 매우 유사하다.
    • 디폴트 메소드를 허용하며
    • rich interface를 추구한다.
  • 중요한 기능들
    • 다중상속: extends, with
    • 인스턴스에 붙이기 가능
    • 동적 super call 바인딩
    • Stackable
  Traits Abstract Class
multiple inheritance support not support
add to instance possible impossible
constructor parameters impossible to have possible to have
Java interoperable not interoperable interoperable
super call binding dynamic static
Stackable stackable not stackable

Packages and Imports

Assertions and Unit Testing

Case Classes and Pattern Matching

Working with Lists

Collections

Statful Objects

Type Parameterization

Abstract Member

Implicit Conversions and Parameters

Implementing Lists

For Expressions Revisited

Extractors

Annotations

Objects As Modules

Object Equality

Combining Scala and Java

Actor and Concurrency

Combinator Parsing