Hello

01 Scala 기본 문법

|

1. Scala Shell

  • PERL 방식으로 동작

2. 변수 타입과 변수 선언

  • 변수 선언
    • var : 일반 변수
    • val : 상수
  • 변수 타입
    • 변수 타입 생략 가능
    • 변수 타입은 변수명 오른쪽에 선언
    • Byte, Short, Int, Long, Float, Double, Char, Boolean, String

3. Range와 형변환

  • 사용 방법
(1 to 10 by 2).toList
  • 리스트나 배열처럼 보이지만 그냥 Range타입 이다.

4. Class, Object, Companion Object

  • Class
    • 선언 방법
      class a {...}
    
    • Java Class와 다른점
      1. static 키워드를 사용할수 없기에 클래스 내부에 정적 멤버나 함수 선언 불가
      2. setter, getter 자동 생성
      3. 클래스 본문이 생성자가 된다.
      4. 기본 생성자 인자는 클래스명 다음에 기술
  • Object
    • 싱글턴 객체
  • Companion Object
    • 해당 클래스와 똑같은 이름의 객체를 생성한 것이 Companion Object
    • java의 static이 필요한 경우 Companion Object로 대신 할 수 있음
  • 클래스 선언 예제
// 클래스 선언
class MyClass private(var name: String) {
    def sayHello(): Unit = {
        MyClass.sayHello()
    }
}
// 컴패니언 객체 선언
object MyClass {
    def sayHello(): Unit = {
        println("Hello" + new MyClass("sungmin").name)
    }
}

5. Trait, 상속

  • Trait : 자바의 추상클래스와 비슷하지만 다중상속이 허용되는 클래스
  • 상속법 : extends Trait1 with Trait2

6. Apply 함수

  • 객체 이름뒤에 괄호를 넣고 인자값을 넣으면 해당 객체의 apply 메서드 호출로 자동 변환해줌

7. Tuple, Option, Case Class

  • Tuple
    • N개의 데이터 쌍을 저장하는 자료 구조
      // 튜플 생성
      val tuple1 = (1, 2)
      val tuple2 = ("a", 1, "c")
        
      // 튜플 내용 참조
      val n1 = tuple1._2
      val n2 = tuple2._3
    
  • Option
    • N개의 데이터 쌍을 저장하는 자료 구조
    • 튜플과는 달리 값이 있거나 없거나 상관없이 null값을 사용하지 않고 공통된 타입인 Option을 사용할 수 있음
  • Case Class
    • 패턴 매치를 위해 최적화된 클래스
    • case class로 생성하면 companion object, apply, unapply, hashCode, copy, equals, toString 메서드 등이 자동 생성됨

8. Pattern Match

  • 패턴이 매치 되는지 확인하는
  • 사용법
(매치할 변수) match {
    case (...) => ...
    case (...) => ...
}

9. Package Object

  • Common과 같은 공통 클래스를 정의하지 않고도 동일 패키지에서 사용하는 변수나 메서드등을 공유 할수 있음
package org.apache.spark

package object sql {
    type Strategy = SparkStrategy
    type DataFrame = Dataset[Row]
}
  • 위와 같은 소스에서 org.apache.spark 패키지에 있는 모든 클래스에서 sql 이라는 package object에 정의된 메서드나 변수를 사용 할수 있다.

10. Type

  • 새로운 사용자 정의 타입을 선언하는 키워드

11. Import

  • 자바와 비슷하지만, static import의 경우 _를 사용해서 표기
import a.b.c._

12. Function, Method

  • Javascript 처럼 함수를 일반변수처럼 다룰 수 있음

13. Generic

  • <>를 사용하는 자바와 달리 []를 사용
  • 자바와 사용법이나 내용이 많이 다름

14. 암묵적 변환과 타입 클래스 패턴

  • 원래 클래스에는 없는 메서드를 암묵적 변환 방법을 사용해서 타입별로 다르게 구현하여 추가하는 방법
  • 스파크SQL 에서 자주 쓰는 패턴

Comments