01 Scala 기본 문법
23 Aug 2017 | Scala Introduction1. 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와 다른점
- static 키워드를 사용할수 없기에 클래스 내부에 정적 멤버나 함수 선언 불가
- setter, getter 자동 생성
- 클래스 본문이 생성자가 된다.
- 기본 생성자 인자는 클래스명 다음에 기술
- 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