본문 바로가기

Data/Data Engineering

[Scala] Scala 언어 기초공부(1)

반응형

출처: https://docs.scala-lang.org/ko/tour/tour-of-scala.html

 

들어가며

투어를 환영합니다 이 투어에서는 스칼라에서 가장 자주 사용되는 기능을 요약하여 소개하며, 스칼라 초보자를 대상으로 합니다. 언어 전체를 다루는 튜토리얼이 아닌 간단히 둘러보기입니다. 자세히 다루고 싶다면, 책을 구하거나 다른 자료를 찾아보세요. 스칼라란? 스칼라는 일반적인 프로그래밍 패턴을 간결하고 우아하며 타입-세이프한 방식으로 표현할 수 있게 설계된 최신 멀티-패러다임 프로그래밍 언어입니다. 객체지향과 함수형 언어의 특징을 자연스럽게 통합합니다. 스칼

docs.scala-lang.org

 

Data Engineering을 배우는 좋은기회가 생겨 두가지 언어가 사전에 공부하면 좋다는 얘기를 듣고 기초공부를 시작

일단 Scala라는 언어를 왜사용하는지 궁금하여 찾아보았고 다음과같은 장점이 있음

- 파이썬과 같이 아주 간결한 문법

- 객체지향과 함수형 프로그래밍 모두 가능

- 자바와 호환되며 JVM위에서 실행되기 때문에 좋은 성능

- 정적 타입을 지향

- REPL Shell을 활용하여 Scripting (이건 솔직히 무슨 의미인지는 모르겠다)

또한,

스칼라는 Scalable Language로써

기존의 Hadoop 기반의 데이터 인프라는 자바 언어를 통해 MapReduce 연산 그리고 알고리즘을 구현해야했습니다. 하지만 자바는 코드가 너무 길어 생산성 그리고 가독성이 매우 떨어집니다.

스칼라는 모든 것들이 일관성있게 그리고 간결하게 구현되도록 설계되었습니다. 이를 통해 얻을 수 있는 장점은 “적은 양의 코드로 방대한 규모의 시스템을 작성할 수 있다” 는 것입니다.

연산자를 예로 들어보겠습니다. 자바에서는 ‘==’ 와 같은 비교연산자를 제공합니다. 하지만 비교연산자는 주소값을 비교하기 때문에 String과 같은 객체를 비교할 때는 equal() 메서드를 사용해서 비교해야 했습니다. 이 또한 스칼라의 Scalable과 거리가 멉니다. 스칼라에서는 모든 것이 Object이기 때문에 == 로 모든 비교가 가능합니다.

출처: https://swalloow.github.io/scala-for-bigdata

 

Swalloow Blog

{% if page.logo %}{% endif %} {% if page.navigation %} Menu {% endif %} {{ site.name }} {{ site.description }}...

swalloow.github.io

해당 링크에 Hadoop으로 단순히 word count를 하는 코드가 매우긴방면에 scala로는 단순히 5줄로 표현 할 수가 있다.

 

출력

println("Hello World!")

변수 설정

var x = 1
println(x)	# 1

# scala는 자동으로 변수 타입을 추론하지만 명시적으로 타입을 지정할 수도 있음
val x: Int = 1 + 1

블록

# {} 으로 표현식을 감싼 것을 블록이라함
println({
	val x = 1 + 1
    x + 1
}) # 3

함수

# 함수는 매개변수를 가지는 표현식
# 주어진 정수에 1을 더하는 이름없는 함수를 다음과 같이 정의 가능
(x: Int) => x + 1

# => 왼쪽에는 매개변수(parameter)목록, 오른쪽은 매개변수를 포함한 표현식

# 함수에 이름 지정가능
val addOne = (x: Int) => x + 1
println(addOne(1)) # 2

# 하나의 함수에 여러가지 매개변수 포함시
val add = (x: Int, y: Int) => x + y
println(add(1, 2)) # 3

# 매개변수가 없을수도있음
val getTheAnswer = () => 42
println(getTheAnswer()) # 42

메소드

 

# 메소드는 함수랑 비슷한거 같지만 다른점이있음
# def 키워드로 메소드를 정의하고 이름, 매개변수 목록, 반환 타입 그리고 본문이 뒤따름
def add(x: Int, y: Int): Int = x + y

# add -> 이름
# x: Int, y: Int -> 매개변수 목록
# Int -> 반환 타입
# x + y -> 본문

# 메소드는 여러 매개변수 목록을 가질 수 있음
def addThenMultiply(x: Int, y: Int)(multiplier: Int): Int = (x + y) * multiplier
println(addThenMultiply(1, 2)(3)) # 9

# 매개변수 목록을 가지지 않을 수도 있음
def name: String = System.getProperty("user.name")
println("Hello, " + name + "!")

# 메소드는 여러 줄의 표현식을 가질 수 있음
def getSquareString(input: Double): String = {
  val square = input * input
  square.toString
}
println(getSquareString(2.5)) # 6.25

# 스칼라는 return 키워드가 있지만 거의 사용하지않고 생략

 

반응형