SlideShare a Scribd company logo
Java 프로그래머를 위한
Scala 튜토리얼
2016.08.19
KAIST iDBLab
윤상훈
이 문서는 나눔글꼴로 작성되었습니다. 설치하기
1. Scala는?
2. Hello world!
3. Java와 함께 사용하기
4. 모든 것은 객체다
5. 클래스에 대하여
6. Q&A
목차
1.1 페이지 제목
Scala는?
3 / 14
Scala는 함수형 프로그래밍과 very strong static type system을 지원하는 프로그래밍 언어이다.
• Scala의 소스코드는 Java 바이트코드로 컴파일된다.
• 따라서 JVM에서 구동된다.
• Java library 코드를 소스코드에서 바로 사용할 수 있다.
• Java의 단점을 보완하기 위한 언어.
• JVM 기반의 언어 중 단연 최고의 인기도.
• Learning curve.
• Apache Spark에서 사용.
2.1 도형 4 / 14
Hello world!
object HelloWorld {
def main(args: Array[String]) {
println("Hello, world!")
}
}
• object는 singleton class.
• Scala에는 static이라는 개념이 없다.
• static 변수 및 메서드는 전부 object에 집어 넣는다.
2.1 도형 5 / 14
Java와 함께 사용하기
import java.util.{Date, Locale}
import java.text.DateFormat
import java.text.DateFormat._
object USDate {
def main(args: Array[String]) {
val now = new Date
val df = getDateInstance(LONG, Locale.US)
// equivalent to df.format(now)
println(df format now)
}
}
• Java 코드와 함께 사용할 수 있다. (java.lang 패키지는 import 없이 사용 가능)
• import 구문에서 * 대신 _ 사용
• 하나의 매개변수를 가지는 메서드는 이항 연산자와 같이 쓸 수 있다.
2.1 도형 6 / 14
모든 것은 객체다
object Timer {
def oncePerSecond(callback: () => Unit) {
while (true) { callback(); Thread sleep 1000 }
}
def timeFlies() {
println("time flies like an arrow...")
}
def main(args: Array[String]) {
oncePerSecond(timeFlies)
}
}
• Java에서 기본 타입이었던 int나 boolean도 Scala에서는 객체다.
– 1 + 2 * 3 / x
– (1).+(((2).*(3))./(x))
• 함수마저 객체다. (함수형 프로그래밍)
• 이름 없는 함수도 만들 수 있다.
2.1 도형 7 / 14
클래스에 대하여
class Complex(real: Double, imaginary: Double) {
def re() = real
def im() = imaginary
}
• 생성자 역할을 하는 부분이 클래스 선언부에 갈 수 있다.
• 프로퍼티 기능이 있다.
• override 키워드로 상위 클래스의 메서드를 상속할 수 있다.
class Complex(real: Double, imaginary: Double) {
def re = real
def im = imaginary
override def toString() =
"" + re + (if (im < 0) "" else "+") + im + "i"
}
2.1 도형 8 / 14
케이스 클래스 그리고 패턴 매칭
abstract class Tree
case class Sum(l: Tree, r: Tree) extends Tree
case class Var(n: String) extends Tree
case class Const(v: Int) extends Tree
• 산술 표현식을 나타내는 트리를 정의하자.
• Java에서는 Tree 추상 클래스 및 Node와 Leaf에 대한 하위 클래스를 정의했을 것이다.
• Scala에서는 추상 클래스와 일반 클래스 사이에 있는 케이스 클래스를 이용할 수 있다.
• 케이스 클래스는 다음과 같은 특성을 지닌다.
– 인스턴스를 생성할 때 new 키워드를 생략할 수 있다. (new Const(5) 대신 Const(5))
– 생성자 파라미터들에 대한 getter 메서드가 자동으로 정의된다.
– equals, hashCode 메서드도 공짜로 제공된다. 생성자 파라미터 값이 같다면 같은 것으로 여긴다.
– toString 메서드에 대한 기본적 구현이 제공된다.
2.1 도형 9 / 14
케이스 클래스 그리고 패턴 매칭
type Environment = String => Int
• 주어진 환경에서 산술 표현식에 맞게 값을 계산하는 함수를 정의하자.
• 산술 표현식을 나타낼 수 있는 데이터 타입을 정의했으니 이제 그것들을 계산할 연산자들
을 정의할 차례다.
• 먼저 변수들의 값을 지정하는 환경을 선언하자.
def eval(t: Tree, env: Environment): Int = t match {
case Sum(l, r) => eval(l, env) + eval(r, env)
case Var(n) => env(n)
case Const(v) => v
}
• 왜 eval 함수를 Tree의 메서드로 정의하지 않았을까? (취향 문제)
• 멤버 함수로 정의하게 되면 새로운 데이터 타입을 추가하기 쉽지만 새로운 연산을 추가할
때마다 모든 하위 클래스의 해당 메서드를 정의해야 한다.
• 패턴 매칭을 사용하면 정반대이다.
2.1 도형 10 / 14
트레잇에 대하여
trait Ord {
def < (that: Any): Boolean
def <=(that: Any): Boolean = (this < that) || (this == that)
def > (that: Any): Boolean = !(this <= that)
def >=(that: Any): Boolean = !(this < that)
}
• Java의 interface와 비슷하다.
• interface에 로직이 있는 것이라고 생각하면 된다.
• 연산자 오버로딩이 가능하다.
2.1 도형 11 / 14
제네릭함
class Reference[T] {
private var contents: T = _
def set(value: T) { contents = value }
def get: T = contents
}
• 타입 T가 파라미터화 되어있다.
• _는 기본값을 뜻한다. (Int는 0, Boolean은 false, 객체는 null)
object IntegerReference {
def main(args: Array[String]) {
val cell = new Reference[Int]
cell.set(13)
println("Reference contains the half of " + (cell.get * 2))
}
}
1.1 페이지 제목
마치며
12 / 14
• Scala By Example
• 참조
– 자바 프로그래머를 위한 스칼라 튜토리얼
– Scala (programming language)_Wikipedia
Q&A
이 문서는 나눔글꼴로 작성되었습니다. 설치하기
감사합니다
이 문서는 나눔글꼴로 작성되었습니다. 설치하기

More Related Content

What's hot

17 swift 프로토콜
17 swift 프로토콜17 swift 프로토콜
17 swift 프로토콜
Changwon National University
 
[D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기
[D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기[D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기
[D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기
NAVER D2
 
[새차원, 코틀린(Kotlin) 강좌] 9. Properties and Fields
 [새차원, 코틀린(Kotlin) 강좌] 9. Properties and Fields [새차원, 코틀린(Kotlin) 강좌] 9. Properties and Fields
[새차원, 코틀린(Kotlin) 강좌] 9. Properties and Fields
정연 최
 
Java 변수자료형
Java 변수자료형Java 변수자료형
Java 변수자료형
Hyosang Hong
 
Scala로의 산책
Scala로의 산책Scala로의 산책
Scala로의 산책
Youmi Bae
 
[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)
용호 최
 
Java extends
Java extendsJava extends
Java extends
Hyosang Hong
 
Scala type class pattern
Scala type class patternScala type class pattern
Scala type class pattern
Yong Joon Moon
 
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
MIN SEOK KOO
 
Java lambda
Java lambdaJava lambda
Java lambda
Hyosang Hong
 
[C++adv] STL 사용법과 주의 사항
[C++adv] STL 사용법과 주의 사항[C++adv] STL 사용법과 주의 사항
[C++adv] STL 사용법과 주의 사항MinGeun Park
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
MIN SEOK KOO
 
[H3 2012] 꽃보다 Scala
[H3 2012] 꽃보다 Scala[H3 2012] 꽃보다 Scala
[H3 2012] 꽃보다 Scala
KTH, 케이티하이텔
 
Scala self type inheritance
Scala self type inheritanceScala self type inheritance
Scala self type inheritance
Yong Joon Moon
 
Java inner class
Java inner classJava inner class
Java inner class
Hyosang Hong
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
유리 하
 
C++ stl
C++ stlC++ stl
C++ stl
은아 정
 
Python+numpy pandas 4편
Python+numpy pandas 4편Python+numpy pandas 4편
Python+numpy pandas 4편
Yong Joon Moon
 

What's hot (18)

17 swift 프로토콜
17 swift 프로토콜17 swift 프로토콜
17 swift 프로토콜
 
[D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기
[D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기[D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기
[D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기
 
[새차원, 코틀린(Kotlin) 강좌] 9. Properties and Fields
 [새차원, 코틀린(Kotlin) 강좌] 9. Properties and Fields [새차원, 코틀린(Kotlin) 강좌] 9. Properties and Fields
[새차원, 코틀린(Kotlin) 강좌] 9. Properties and Fields
 
Java 변수자료형
Java 변수자료형Java 변수자료형
Java 변수자료형
 
Scala로의 산책
Scala로의 산책Scala로의 산책
Scala로의 산책
 
[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)
 
Java extends
Java extendsJava extends
Java extends
 
Scala type class pattern
Scala type class patternScala type class pattern
Scala type class pattern
 
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
 
Java lambda
Java lambdaJava lambda
Java lambda
 
[C++adv] STL 사용법과 주의 사항
[C++adv] STL 사용법과 주의 사항[C++adv] STL 사용법과 주의 사항
[C++adv] STL 사용법과 주의 사항
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
 
[H3 2012] 꽃보다 Scala
[H3 2012] 꽃보다 Scala[H3 2012] 꽃보다 Scala
[H3 2012] 꽃보다 Scala
 
Scala self type inheritance
Scala self type inheritanceScala self type inheritance
Scala self type inheritance
 
Java inner class
Java inner classJava inner class
Java inner class
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
 
C++ stl
C++ stlC++ stl
C++ stl
 
Python+numpy pandas 4편
Python+numpy pandas 4편Python+numpy pandas 4편
Python+numpy pandas 4편
 

Similar to [세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼

자바프로그래머를 위한 스칼라
자바프로그래머를 위한 스칼라자바프로그래머를 위한 스칼라
자바프로그래머를 위한 스칼라
Jong Gook Bae
 
Scala, Scalability
Scala, ScalabilityScala, Scalability
Scala, Scalability
Dongwook Lee
 
Java collections framework
Java collections frameworkJava collections framework
Java collections framework
경주 전
 
러닝스칼라 - Scala 기초 (1)
러닝스칼라 - Scala 기초 (1)러닝스칼라 - Scala 기초 (1)
러닝스칼라 - Scala 기초 (1)
명성 정
 
C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]
C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]
C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]
leusin2
 
JDK 변천사
JDK 변천사JDK 변천사
JDK 변천사
SeungHyun Eom
 
10 swift 열거형구조체클래스
10 swift 열거형구조체클래스10 swift 열거형구조체클래스
10 swift 열거형구조체클래스
Changwon National University
 
Java(1/4)
Java(1/4)Java(1/4)
Java(1/4)
handfoot
 
Programming java day2
Programming java day2Programming java day2
Programming java day2Jaehoonyam
 
자바와 사용하기2
자바와 사용하기2자바와 사용하기2
자바와 사용하기2destinycs
 
Javascript
JavascriptJavascript
Javascript
Joshua Yoon
 
Introduction to Fork Join Framework_SYS4U I&C
Introduction to Fork Join Framework_SYS4U I&CIntroduction to Fork Join Framework_SYS4U I&C
Introduction to Fork Join Framework_SYS4U I&Csys4u
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
Yong Joon Moon
 
Java script
Java scriptJava script
Java script
영남 허
 
Smalltalk at Altlang 2008
Smalltalk at Altlang 2008Smalltalk at Altlang 2008
Smalltalk at Altlang 2008daliot
 
객체지향 프로그래밍 기본
객체지향 프로그래밍 기본객체지향 프로그래밍 기본
객체지향 프로그래밍 기본
용호 최
 
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담
Javajigi Jaesung
 
Clojure/Chapter3
Clojure/Chapter3Clojure/Chapter3
Clojure/Chapter3destinycs
 

Similar to [세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼 (20)

자바프로그래머를 위한 스칼라
자바프로그래머를 위한 스칼라자바프로그래머를 위한 스칼라
자바프로그래머를 위한 스칼라
 
Scalability
ScalabilityScalability
Scalability
 
Scala, Scalability
Scala, ScalabilityScala, Scalability
Scala, Scalability
 
Scala
ScalaScala
Scala
 
Java collections framework
Java collections frameworkJava collections framework
Java collections framework
 
러닝스칼라 - Scala 기초 (1)
러닝스칼라 - Scala 기초 (1)러닝스칼라 - Scala 기초 (1)
러닝스칼라 - Scala 기초 (1)
 
C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]
C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]
C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]
 
JDK 변천사
JDK 변천사JDK 변천사
JDK 변천사
 
10 swift 열거형구조체클래스
10 swift 열거형구조체클래스10 swift 열거형구조체클래스
10 swift 열거형구조체클래스
 
Java(1/4)
Java(1/4)Java(1/4)
Java(1/4)
 
Programming java day2
Programming java day2Programming java day2
Programming java day2
 
자바와 사용하기2
자바와 사용하기2자바와 사용하기2
자바와 사용하기2
 
Javascript
JavascriptJavascript
Javascript
 
Introduction to Fork Join Framework_SYS4U I&C
Introduction to Fork Join Framework_SYS4U I&CIntroduction to Fork Join Framework_SYS4U I&C
Introduction to Fork Join Framework_SYS4U I&C
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
 
Java script
Java scriptJava script
Java script
 
Smalltalk at Altlang 2008
Smalltalk at Altlang 2008Smalltalk at Altlang 2008
Smalltalk at Altlang 2008
 
객체지향 프로그래밍 기본
객체지향 프로그래밍 기본객체지향 프로그래밍 기본
객체지향 프로그래밍 기본
 
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담
 
Clojure/Chapter3
Clojure/Chapter3Clojure/Chapter3
Clojure/Chapter3
 

More from Sanghoon Yoon

Convolutional Neural Networks
Convolutional Neural NetworksConvolutional Neural Networks
Convolutional Neural Networks
Sanghoon Yoon
 
위치 기반 서비스 사용자의 최고의 장소 사진 선택 요인 분석
위치 기반 서비스 사용자의 최고의 장소 사진 선택 요인 분석위치 기반 서비스 사용자의 최고의 장소 사진 선택 요인 분석
위치 기반 서비스 사용자의 최고의 장소 사진 선택 요인 분석
Sanghoon Yoon
 
[논문발표] 20160801 A Sentiment-Enhanced Personalized Location Recommendation System
[논문발표] 20160801 A Sentiment-Enhanced Personalized Location Recommendation System[논문발표] 20160801 A Sentiment-Enhanced Personalized Location Recommendation System
[논문발표] 20160801 A Sentiment-Enhanced Personalized Location Recommendation System
Sanghoon Yoon
 
[논문발표] 20160725 A Random Walk Around the City: New Venue Recommendation in Lo...
[논문발표] 20160725 A Random Walk Around the City: New Venue Recommendation in Lo...[논문발표] 20160725 A Random Walk Around the City: New Venue Recommendation in Lo...
[논문발표] 20160725 A Random Walk Around the City: New Venue Recommendation in Lo...
Sanghoon Yoon
 
[세미나] 20160520 Gradle
[세미나] 20160520 Gradle[세미나] 20160520 Gradle
[세미나] 20160520 Gradle
Sanghoon Yoon
 
[논문발표] 20160404 Supporting Serendipitous Social Interaction Using Human Mobil...
[논문발표] 20160404 Supporting Serendipitous Social Interaction Using Human Mobil...[논문발표] 20160404 Supporting Serendipitous Social Interaction Using Human Mobil...
[논문발표] 20160404 Supporting Serendipitous Social Interaction Using Human Mobil...
Sanghoon Yoon
 

More from Sanghoon Yoon (6)

Convolutional Neural Networks
Convolutional Neural NetworksConvolutional Neural Networks
Convolutional Neural Networks
 
위치 기반 서비스 사용자의 최고의 장소 사진 선택 요인 분석
위치 기반 서비스 사용자의 최고의 장소 사진 선택 요인 분석위치 기반 서비스 사용자의 최고의 장소 사진 선택 요인 분석
위치 기반 서비스 사용자의 최고의 장소 사진 선택 요인 분석
 
[논문발표] 20160801 A Sentiment-Enhanced Personalized Location Recommendation System
[논문발표] 20160801 A Sentiment-Enhanced Personalized Location Recommendation System[논문발표] 20160801 A Sentiment-Enhanced Personalized Location Recommendation System
[논문발표] 20160801 A Sentiment-Enhanced Personalized Location Recommendation System
 
[논문발표] 20160725 A Random Walk Around the City: New Venue Recommendation in Lo...
[논문발표] 20160725 A Random Walk Around the City: New Venue Recommendation in Lo...[논문발표] 20160725 A Random Walk Around the City: New Venue Recommendation in Lo...
[논문발표] 20160725 A Random Walk Around the City: New Venue Recommendation in Lo...
 
[세미나] 20160520 Gradle
[세미나] 20160520 Gradle[세미나] 20160520 Gradle
[세미나] 20160520 Gradle
 
[논문발표] 20160404 Supporting Serendipitous Social Interaction Using Human Mobil...
[논문발표] 20160404 Supporting Serendipitous Social Interaction Using Human Mobil...[논문발표] 20160404 Supporting Serendipitous Social Interaction Using Human Mobil...
[논문발표] 20160404 Supporting Serendipitous Social Interaction Using Human Mobil...
 

[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼

  • 1. Java 프로그래머를 위한 Scala 튜토리얼 2016.08.19 KAIST iDBLab 윤상훈 이 문서는 나눔글꼴로 작성되었습니다. 설치하기
  • 2. 1. Scala는? 2. Hello world! 3. Java와 함께 사용하기 4. 모든 것은 객체다 5. 클래스에 대하여 6. Q&A 목차
  • 3. 1.1 페이지 제목 Scala는? 3 / 14 Scala는 함수형 프로그래밍과 very strong static type system을 지원하는 프로그래밍 언어이다. • Scala의 소스코드는 Java 바이트코드로 컴파일된다. • 따라서 JVM에서 구동된다. • Java library 코드를 소스코드에서 바로 사용할 수 있다. • Java의 단점을 보완하기 위한 언어. • JVM 기반의 언어 중 단연 최고의 인기도. • Learning curve. • Apache Spark에서 사용.
  • 4. 2.1 도형 4 / 14 Hello world! object HelloWorld { def main(args: Array[String]) { println("Hello, world!") } } • object는 singleton class. • Scala에는 static이라는 개념이 없다. • static 변수 및 메서드는 전부 object에 집어 넣는다.
  • 5. 2.1 도형 5 / 14 Java와 함께 사용하기 import java.util.{Date, Locale} import java.text.DateFormat import java.text.DateFormat._ object USDate { def main(args: Array[String]) { val now = new Date val df = getDateInstance(LONG, Locale.US) // equivalent to df.format(now) println(df format now) } } • Java 코드와 함께 사용할 수 있다. (java.lang 패키지는 import 없이 사용 가능) • import 구문에서 * 대신 _ 사용 • 하나의 매개변수를 가지는 메서드는 이항 연산자와 같이 쓸 수 있다.
  • 6. 2.1 도형 6 / 14 모든 것은 객체다 object Timer { def oncePerSecond(callback: () => Unit) { while (true) { callback(); Thread sleep 1000 } } def timeFlies() { println("time flies like an arrow...") } def main(args: Array[String]) { oncePerSecond(timeFlies) } } • Java에서 기본 타입이었던 int나 boolean도 Scala에서는 객체다. – 1 + 2 * 3 / x – (1).+(((2).*(3))./(x)) • 함수마저 객체다. (함수형 프로그래밍) • 이름 없는 함수도 만들 수 있다.
  • 7. 2.1 도형 7 / 14 클래스에 대하여 class Complex(real: Double, imaginary: Double) { def re() = real def im() = imaginary } • 생성자 역할을 하는 부분이 클래스 선언부에 갈 수 있다. • 프로퍼티 기능이 있다. • override 키워드로 상위 클래스의 메서드를 상속할 수 있다. class Complex(real: Double, imaginary: Double) { def re = real def im = imaginary override def toString() = "" + re + (if (im < 0) "" else "+") + im + "i" }
  • 8. 2.1 도형 8 / 14 케이스 클래스 그리고 패턴 매칭 abstract class Tree case class Sum(l: Tree, r: Tree) extends Tree case class Var(n: String) extends Tree case class Const(v: Int) extends Tree • 산술 표현식을 나타내는 트리를 정의하자. • Java에서는 Tree 추상 클래스 및 Node와 Leaf에 대한 하위 클래스를 정의했을 것이다. • Scala에서는 추상 클래스와 일반 클래스 사이에 있는 케이스 클래스를 이용할 수 있다. • 케이스 클래스는 다음과 같은 특성을 지닌다. – 인스턴스를 생성할 때 new 키워드를 생략할 수 있다. (new Const(5) 대신 Const(5)) – 생성자 파라미터들에 대한 getter 메서드가 자동으로 정의된다. – equals, hashCode 메서드도 공짜로 제공된다. 생성자 파라미터 값이 같다면 같은 것으로 여긴다. – toString 메서드에 대한 기본적 구현이 제공된다.
  • 9. 2.1 도형 9 / 14 케이스 클래스 그리고 패턴 매칭 type Environment = String => Int • 주어진 환경에서 산술 표현식에 맞게 값을 계산하는 함수를 정의하자. • 산술 표현식을 나타낼 수 있는 데이터 타입을 정의했으니 이제 그것들을 계산할 연산자들 을 정의할 차례다. • 먼저 변수들의 값을 지정하는 환경을 선언하자. def eval(t: Tree, env: Environment): Int = t match { case Sum(l, r) => eval(l, env) + eval(r, env) case Var(n) => env(n) case Const(v) => v } • 왜 eval 함수를 Tree의 메서드로 정의하지 않았을까? (취향 문제) • 멤버 함수로 정의하게 되면 새로운 데이터 타입을 추가하기 쉽지만 새로운 연산을 추가할 때마다 모든 하위 클래스의 해당 메서드를 정의해야 한다. • 패턴 매칭을 사용하면 정반대이다.
  • 10. 2.1 도형 10 / 14 트레잇에 대하여 trait Ord { def < (that: Any): Boolean def <=(that: Any): Boolean = (this < that) || (this == that) def > (that: Any): Boolean = !(this <= that) def >=(that: Any): Boolean = !(this < that) } • Java의 interface와 비슷하다. • interface에 로직이 있는 것이라고 생각하면 된다. • 연산자 오버로딩이 가능하다.
  • 11. 2.1 도형 11 / 14 제네릭함 class Reference[T] { private var contents: T = _ def set(value: T) { contents = value } def get: T = contents } • 타입 T가 파라미터화 되어있다. • _는 기본값을 뜻한다. (Int는 0, Boolean은 false, 객체는 null) object IntegerReference { def main(args: Array[String]) { val cell = new Reference[Int] cell.set(13) println("Reference contains the half of " + (cell.get * 2)) } }
  • 12. 1.1 페이지 제목 마치며 12 / 14 • Scala By Example • 참조 – 자바 프로그래머를 위한 스칼라 튜토리얼 – Scala (programming language)_Wikipedia
  • 13. Q&A 이 문서는 나눔글꼴로 작성되었습니다. 설치하기
  • 14. 감사합니다 이 문서는 나눔글꼴로 작성되었습니다. 설치하기