<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=%EC%8A%A4%EC%B9%BC%EB%9D%BC</id>
	<title>스칼라 - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=%EC%8A%A4%EC%B9%BC%EB%9D%BC"/>
	<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=%EC%8A%A4%EC%B9%BC%EB%9D%BC&amp;action=history"/>
	<updated>2026-05-18T07:37:06Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=%EC%8A%A4%EC%B9%BC%EB%9D%BC&amp;diff=439&amp;oldid=prev</id>
		<title>Devcafe: 새 문서: == 스칼라 == === 스칼라 개요 === === 스칼라 설치 === ==== JDK 설치 ==== ==== IDE 설치 ==== # 이클립스 ## 이클립스는 마켓플레이스에서 스칼라 IDE를 설치하면 스칼라 프로젝트 생성 ## Help -&gt; Eclipse Marketplace... 를 선택하고, scala ide 를 검색, 설치 # IntelliJ ## IntelliJ 커뮤니티 버전을 처음 설치할 때, scala를 사용하도록 체크  ## 기존에 설치된 IntelliJ에 스칼라 플러그인을 설치는 Pre...</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=%EC%8A%A4%EC%B9%BC%EB%9D%BC&amp;diff=439&amp;oldid=prev"/>
		<updated>2024-10-14T18:22:07Z</updated>

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