Programming in Sala 책으로 스칼라 스터디하면서 정리했던 내용이다. 지금은 3판 번역본도 나왔지만, 약간 앞서서 스터디를 시작해서 2판으로 진행하고 있다.


4장

클래스

  • 클래스 정의
class ChecksumAccumulator {
    // 클래스 정의
}
  • 객체 생성 : new
new ChecksumAccumulator
  • 필드, 메소드는 멤버

필드

  • 필드 정의 : val, var
  • 인스턴스 변수라고도 함
  • 기본 접근 수준은 전체 공개
  • 비공개 필드 : private
class ChecksumAccumulator {
    private var sum = 0
}

메소드

  • 메소드 정의 : def
  • 메소드 파라미터는 val
  • 권장 스타일
    • return을 명시적으로 사용하지 않는 것 -> 메소드는 한 값을 계산하는 표현식
    • 하나의 표현식만 있으면 중괄호 생략
    • 결과식이 짧으면 def 문 줄에 함께 쓰기
class ChecksumAccumulator {
    private var sum = 0
    def add(b: Byte): Unit = sum += b
    def checksum(): Int = ~(sum & 0xFF) + 1
}
  • 결과 타입이 Unit 인 경우
    • 부수 효과를 위해 사용
    • = 생략하고 {}로 감싸는 것으로 표현 가능
    def add(b:Byte) { sum += b }

세미콜론 추론

다음 세가지 경우가 아니면 줄의 끝은 세미콜론으로 취급된다.

  1. 줄이 명령을 끝낼 수 있는 단어로 끝나지 않는다. 마침표(.)나 중위 연산자 등의 줄의 맨 끝에 있는 경우
  2. 다음 줄의 맨 앞이 문장을 시작할 수 없는 단어로 시작한다.
  3. 줄이 () 사이나 [] 사이에서 끝난다.

싱글톤 객체

  • 클래스 정의와 비슷하나 object 키워드 사용
object ChecksumAccumulator {
    // ...
}
  • 싱글톤 객체는 1급 계층
  • 파라미터를 전달할 방법 없음
  • 클래스를 확장(extend)하거나 트레이트를 믹스인(mix in) 가능
  • 자체 타입을 정의하지는 않음

동반 객체와 동반 클래스

  • 동반 객체(companion object) : 어떤 클래스 이름과 동일한 이름의 싱글톤 객체
  • 동반 클래스(companion class) : 어떤 싱글톤 객체와 동일한 이름의 클래스
  • 독립 객체(standalone object) : 동반 클래스가 없는 싱글톤 객체
  • 클래스와 동반 객체는 서로의 비공개 멤버에 접근할 수 있다.

스칼라 애플리케이션

  • 다음과 같은 main 메소드를 가진 독립 싱글톤 객체가 애플리케이션의 시작점
    • 인자 : Array[String]
    • 반환값 : Unit
object Summer {
    def main(args: Array[String]) {
        // ...
    }
}
  • 클래스 이름과 파일이름을 동일하게 만드는 것이 강제 사항은 아님.
  • 컴파일 : scalac, fsc

Application 트레이트

object FallWinterSpringSummer extends Application {
    // main 메소드 내용
}
  • scala.Application -> scala.App


+ Recent posts