다른 명령
스칼라
스칼라 개요
스칼라 설치
JDK 설치
IDE 설치
- 이클립스
- 이클립스는 마켓플레이스에서 스칼라 IDE를 설치하면 스칼라 프로젝트 생성
- Help -> Eclipse Marketplace... 를 선택하고, scala ide 를 검색, 설치
- IntelliJ
- IntelliJ 커뮤니티 버전을 처음 설치할 때, scala를 사용하도록 체크
- 기존에 설치된 IntelliJ에 스칼라 플러그인을 설치는 Preference -> Plugins를 선택하고, scala를 검색하여 설치
- 플러그인 설치후 재시작하면 프로젝트 생성에서 스칼라를 선택
- File -> New.. -> Project를 선택하고, 빌드 툴 선택. scala의 기본 빌드 툴인 sbt를 이용하는 것을 추천
함수형 프로그래밍
함수형 언어
- 함수형 언어는 함수형 프로그래밍의 패러다임을 따르는 프로그래밍 언어.
- LISP, Clojure, Erlang 등이 있고, 최근에는 함수형 언어가 아닌 C#, Java같은 객체지향언어에서도 람다 함수의 도입을 통해 함수형 프로그래밍을 지원
함수형 프로그래밍
- 함수형 프로그래밍은 프로그래밍 패러다임의 하나로 자료 처리를 수학적 함수의 계산으로 취급하고 상태 변화와 가변 데이터를 피하는 것
- 순수 함수와 보조 함수의 조합을 이용해서 로직 내에 존재하는 조건문과 반복문을 제거하여 복잡성을 없애고, 변수의 사용을 억제하여 상태 변경을 피하고자 하는 패러다임* 조건문과 반복문은 로직의 흐름을 이해하기 어렵게 하여 가독성을 해치고, 변수의 값은 누군가에 의해 언제든지 변경 될 수 있어 오류 발생의 근본 원인이 될 수 있기 때문
- 함수형 프로그래밍은 함수형 언어가 제공하는 다음의 특징을 이용
순수 함수(pure function)
- 함수의 실행이 외부에 영향을 끼치지 않는 함수.
- 외부에 영향을 미치지 않기 때문에 스레드-세이프하고, 병렬 계산이 가능
- 예시) add 함수
public int add(int a, int b) { return a + b; }
익명 함수(anonymous function)
- 전통적인 명령형 언어는 함수에 이름이 있어야 함.
- 함수형 언어는 선언부가 없는 익명 함수를 생성하여 코드 길이를 줄이고, 프로그래밍 로직에 집중
- 예시) reduce 함수 - 입력값으로 익명 함수를 제공하여 값을 처리
Arrays.asList(1,2,3).stream().reduce((a,b)-> a-b).get();
고차함수(higher-order function)
- 함수를 인수로 취하는 함수
- 함수를 입력 파라미터나 출력 값으로 처리
- 예시
Collections.sort(new ArrayList<Integer>(), (x, y) -> x >= y ? -1 : 1);
스칼라 웹 REPL
https://scastie.scala-lang.org/
- Scasite는 웹브라우저에서 사용할 수 있는 스칼라 REPL 콘솔.
- 스칼라의 버전을 선택하여 사용할 수 있기 때문에 스칼라를 설치하기 어려운 환경이라면 이 사이트를 이용하여 기본 문법 공부
IDE 스칼라 워크시트
- 스칼라 IDE는 워크시트 제공
- 워크시트는 REPL 쉘과 유사하게 사용자의 입력을 바로 보여줌
- 워크시트를 이용하면 따로 실행하지 않아도 변수의 데이터와 처리 과정을 바로 확인할 수 있기 때문에 테스트에 유용
- REPL 쉘 처럼 한줄 한줄 입력하지 않고 코드를 작성하는 것처럼 표현하면서 데이터를 확인할 수 있기 때문에 효율적 임.
Hello World
- 스칼라는 자바와 동일하게 프로그램을 실행을 위한 main() 함수 구현
- main()함수를 구현 하는 방법 두가지
- 싱글톤 객체(object)가 main 함수를 구현하는 방법
- 싱글톤 객체(object)가 App 트레잇을 상속하는 방법
- App 트레잇이 내부적으로 main() 함수를 구현해 주기 때문에, 첫번째 방법과 동작 방식의 차이는 없습니다.
- 상황에 따라 개발하기 편한 방법을 선택
def main() 함수 구현
// main 함수를 생성App 을 상속하여 실행하는 방법 object S01_HelloWorldObject { def main(args: Array[String]): Unit = { println("Hello World main") } }
App 트레잇 상속
- App 트레잇을 상속하는 방법은 extends로 App 트레잇을 상속
- 실행하고자 하는 코드를 작성하면 순차적으로 실행 됨.
object S01_HelloWorld extends App { println("Hello World") }