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


5장

기본 타입

  • Byte / Short / Int / Long : 8 / 16 / 32 / 64 bits 부호 있는 정수(2의 보수)
  • Char : 16 bits 유니코드 문자
  • String : Char 시퀀스
  • Float / Double : 32 / 64 bits IEEE 754 단정도/배정도 부동소수점 수
  • Boolean : true / false

리터럴

정수

  • 10진 : 5, 7, ..
  • 16진 : 0x5, 0x00FF
  • Long : 35L, 31l

부동소수점

  • 1.2345
  • 1,2345e1
  • 123E45
  • Float : 1.2345F, 3e5f
  • Double(기본) : 3e5D

문자

  • 'A'
  • '\101'
  • '\u0041'

이스케이프 시퀀스(escape sequence)

  • \n : 줄바꿈(\u000A)
  • \b : 백스페이스(\u0008)
  • \t : 탭(\u0009)
  • \f : 페이지 넘김(\u000C)
  • \r : 줄 맨 앞으로(\u000D)
  • " : 큰따옴표(\u0022)
  • ' : 작은따옴표(\u0027)
  • \ : 역슬래스(\u005C)

문자열

  • "hello"
  • """Welcome ... """
  • stripMargin
println("""|Welcome to Ultamix 3000.
           |Type "HELP" for help.""".stripMargin)

심볼

  • 작은따옴표 뒤에 오는 식별자(알파벳,숫자) : 'ident
  • 'ident -> 내부에서 Symbol("ident") 호출됨
  • intern. 같은 심볼 리터럴은 동일한 객체를 참조.

불리언

  • true / false

연산자

  • 어떤 메소드든지 연산자가 될 수 있음
s.indexOf('o', 5)
s indexOf ('o', 5) // 동일함
  • 연산자는 메소드
    • 중위 연산자 : 1 + 2 == (1).+(2)
    • 전위 연산자 : -2.0 == (2.0).unary_-
    • 후위 연산자 : s toLowerCase == s.toLowerCase()

산술 연산자

  • +, -, *, /, %

관계, 논리 연산자

  • , <, >=, <=, !

  • &&, ||

비트 연산자

  • &, |, ^

객체 동일성

  • ==, != 사용하여 두 객체가 동일한지 여부를 확인
  • null을 포함한 어떤 객체라도 사용 가능
  • 내부적으로 null인지 확인하고, null 이 아닌 경우 equals 메소드를 수행함

연산자 우선순위

  • 연산자 시작하는 문자에 따라서 아래와 같은 순서로 우선 순위 판단
  1. (all other special characters)
  2. */%
  3. +-
  4. :
  5. =! <> &
  6. ˆ
  7. |
  8. (all letters)
  9. (all assignment operators)
  • 메소드가 ':'로 끝나면 오른쪽에서 왼쪽으로 연산되고, 다른 경우는 왼쪽에서 오른쪽으로 연산

리치 래퍼

  • 묵시적 변환(implicit conversion)으로 기본 타입에 더 많은 메소드를 실행 가능
0 max 5             // 5
0 min 5             // 0
-2.7 abs            // 2.7
-2.7 round          // -3L
1.5 isInfinity      // false
(1.0/0) isInfinity  // true
4 to 6              // Range(4,5,6)
"bob" capitalize    // "Bob"
"robert" drop 2     // "bert"
  • 위와 같은 메소드는 다음과 같은 레퍼 타입에 정의되어 있음
    • Byte - scala.runtime.RichByte
    • Short - scala.runtime.RichShort
    • Int - scala.runtime.RichInt
    • Char - scala.runtime.RichChar
    • Float - scala.runtime.RichFloat
    • Double - scala.runtime.RichDouble


+ Recent posts