본문 바로가기
language/Scala

[Scala] 스칼라 배우기 1. 스칼라란? 특징 및 스칼라 언어에 관한 통계

by 스파이디웹 2023. 5. 13.
728x90

이번에 이직을 하게 되면서 스파크 코드가 python이 아닌 scala로 구성되어 있기 때문에 스칼라 언어를 배울 필요성을 느껴 스칼라언어에 대해 하나씩 배우면서 적용해 나갈 계획입니다. java와 닮은 점이 많은 언어 이기 때문에 java와 비교하며 같이 공부 해 나갈 계획이고 scala를 통해 spark프로그래밍도 적용 및 pyspark와 비교 해 볼 계획입니다.

 


1. Scala란?

  • 2004년 마틴 오더스키(Martin Odersky)가 발표
  • 일반적인 프로그래밍 패턴을 간결하고 우아하며 타입-세이프한 방식으로 표현할 수 있게 설계된 최신 멀티-패러다임 프로그래밍 언어
  • 객체지향과 함수형 언어의 특징을 자연스럽게 통합한 언어(하이브리드 언어)

2. Scala 특징

1. 모든 값이 객체인 순수 객체지향 언어

  • 숫자와 함수를 포함한 모든 것이 객체
//동일한 표현식
1 + 2 * 3 / x

//오직 함수 호출로만 이루어져 있음
1.+(2.*(3)./(x))
  • 함수마저 객체

함수에 함수를 인자로 넘기거나, 함수를 변수에 저장하거나, 함수가 함수를 리턴하는 것도 가능

 

ex)

object Timer {
  def oncePerSecond(callback: () => Unit): Unit = {
    while (true) { callback(); Thread sleep 1000 }
  }
  def timeFlies(): Unit = {
    println("time flies like an arrow...")
  }
  def main(args: Array[String]): Unit = {
    oncePerSecond(timeFlies)
  }
}

이 함수는 콜백 함수를 인자로 받는다. 인자로 받는 함수의 타입은 () => Unit 인데, 이 타입은 인자를 받지 않고 아무 것도 돌려주지 않는 모든 함수를 뜻한다 (Unit 타입은 C/C++에서 void와 비슷하다). 이 프로그램의 메인 함수는 이 타이머 함수를 화면에 문장을 출력하는 간단한 콜백함수를 인자로 호출한다. 결국 이 프로그램이 하는 일은 일초에 한번씩 “time flies like an arrow”를 화면에 출력하는 것이 된다.

 

 

  • Java에서는 기본적인 타입(boolean이나 int 따위)과 참조 가능한 타입이 분리되어 있으며, 함수를 값과 동일하게 다룰 수도 없음
  • 객체의 타입과 행위는 클래스와  트레잇으로 설명
  • 클래스는 서브클래스를 만들거나, 다중 상속을 깔끔하게 대체하는 유연한 mix-in 기반 composition으로 확장 가능

2. 함수형 언어(프로그래밍)

  • 스칼라는 함수형 언어의 특징을 가지기 때문에 자바에 비하여 코드길이가 짧음
  • 겟터, 셋터, 생성자를 제거하고, 표현식을 간소화 하여 자바대비 짧은 코드로 동일한 내용을 작성

  • 순수 함수와 보조 함수의 조합을 이용해서 로직 내에 존재하는 조건문과 반복문을 제거하여 복잡성을 없애고, 변수의 사용을 억제하여 상태 변경을 피하고자 하는 패러다임
    (조건문과 반복문은 로직의 흐름을 이해하기 어렵게 하여 가독성을 해치고, 변수의 값은 누군가에 의해 언제든지 변경 될 수 있어 오류 발생의 근본적인 원인이 될 수 있기 때문)

1) 순수 함수(pure function)

  • 함수의 실행이 외부에 영향을 끼치지 않는 함수
  • 외부에 영향을 미치지 않기 때문에 스레드-세이프하고, 병렬 계산이 가능
public int add(int a, int b) {
  return a + b
}

2) 익명 함수(anonymous function)

  • 전통적인 명령형 언어는 함수에 이름이 있어야 함
  • 함수형 언어는 선언부가 없는 익명 함수를 생성하여 코드 길이를 줄이고, 프로그래밍 로직에 집중할 수 있음
Arrays.asList(1,2,3).stream().reduce((a,b)-> a-b).get() //reduce 내 (a,b)

3) 고차 함수(higher-order function)

  • 함수를 인수로 취하는 함수
  • 함수를 입력 파라미터나 출력 값으로 처리할 수 있음
Collections.sort(new ArrayList<Integer>(), (x, y) -> x >= y ? -1 : 1)

3. JVML(Java Virtual Machine Language)

  • 자바가상머신(JVM) 위에서 동작하는 언어로 scala, kotlin, Groovy가 대표적
  • 자바 가상 머신 위에서 동작하기 때문에 자바의 모든 라이브러리를 사용할 수 있음
  • 스칼라는 스칼라 컴파일러를 통해 스칼라 코드를 바이트 코드로 변환하고, 바이트 코드는 JVM 상에서 자바와 동일하게 실행


4. 바이트 코드 최적화

  • 바이트 코드를 최적화 하여하여 자바 보다 20% 정도 속도가 빠름
  • 같은 일을 하는 프로그램을 작성하여도 자바에 비해 코드도 짧고, 속도도 빠름


5. 동시성에 강함

스칼라는 변경 불가능한 Immutable 변수를 많이 가지고 있음 → 속성을 변경 불가능하게 하고, 순수 함수를 사용하여 병렬 프로그래밍 처리에 강함


3. Scala에 대한 통계

버전

컴파일 대상

유닛 테스트 프레임워크

주로 사용하는 프레임워크/라이브러리

IDE

빌드 시스템

대화형 scala 환경

scala용 도구

scala를 이용한 개발 종류

 

 

 

참조:

https://docs.scala-lang.org/ko/tutorials/scala-for-java-programmers.html#

 

자바 프로그래머를 위한 스칼라 튜토리얼

Info: JavaScript is currently disabled, code tabs will still work, but preferences will not be remembered. Michel Schinz, Philipp Haller 지음. 이희종 (heejong@gmail.com) 옮김. 시작하면서 이 문서는 Scala 언어와 그 컴파일러에 대해

docs.scala-lang.org

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

 

들어가며

Info: JavaScript is currently disabled, code tabs will still work, but preferences will not be remembered. 투어를 환영합니다 이 투어에서는 스칼라에서 가장 자주 사용되는 기능을 요약하여 소개하며, 스칼라 초보자를

docs.scala-lang.org

https://wikidocs.net/26134

 

1.스칼라?

스칼라는 2004년 마틴 오더스키(Martin Odersky)가 발표한 **객체 지향 언어의 특징과 함수형 언어의 특징을 함께 가지는 다중 패러다임 프로그래밍 언어**입니다. …

wikidocs.net

https://www.jetbrains.com/ko-kr/lp/devecosystem-2022/scala/

 

The State of Developer Ecosystem in 2022 Infographic

The State of Developer Ecosystem 2022 is a detailed report about the programming community, which covers the latest trends in languages, tools, technologies, and lifestyles of developers.

www.jetbrains.com

 

728x90

댓글