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