콘텐츠로 이동

2023 02 02

2023-02-02

Scala 기초 투어

Operator

  • 개요
    • 오퍼레이터는 싹다 메서드여
    • 10 + 1 => 10.+(1)
  • 만들어보기
    case class Vec(x: Double, y: Double) {
      def +(that: Vec) = Vec(this.x + that.x, this.y + that.y)
    }
    
    val vec1 = Vec(1.0, 1.0)
    val vec2 = Vec(2.0, 2.0)
    val vec3 = vec1 + vec2 // (3.0, 3.0)
    

    - and/or 등과 같은 메서드도 구현 가능하겠지?

  • 연산자 우선 순위
    • 있다는거만 기억해두자

By-name Parameter

  • 개요
    • 실사용될 때마다 평가되는 파라미터
    • by-value parameter와 대조되는 기능
    • 파라미터 타입 앞에 =>를 붙이면 됨
  • vs By-Value Parameter
    • [By-Name]
      • 필요할 때만 평가
      • 여러번 쓰이면 필요에 따라 여러번 평가
    • [By-Value]
      • 필요하지 않더라도 먼저 평가
      • 딱 한번만 평가
  • 예시
    def whileLoop(condition: => Boolean)(body: => Unit): Unit =
      if (condition) {
        body
        whileLoop(condition)(body)
      }
    
    var i = 2
    
    whileLoop(i > 0) {
      println(i)
      i -= 1
    }
    

어노테이션

  • 개요
    • 정의와 주석
  • 컴파일 경고
    • @deprecated
  • 규칙에 알맞는 코드인지 검사
    • @tailrec: 마지막 리턴이 본인 함수인지
  • 코드를 만들어주는 어노테이션
    • @inline: 실제 메서드 본문의 내용을 호출할때 바이트코드 넣어줌 (최적화)
  • 자바 어노테이션도 가능

패키지와 임포트

  • 패키지
    • 자바랑 똑같음
  • 임포트
    • 다른 패키지 코드 접근시 사용
    • 진짜 써야하는 곳에 (그니까 최상단 아니여도) 가져오게 할 수도 있음
    • java.lang, object Predef 기본으로 임포트 되어있음

Top Level Definitions in packages

  • 패키지 자체에서 공유할 수 있는 변수/함수