SlideShare a Scribd company logo
1 of 18
Download to read offline
Scala
기초
(1)
Scala
스칼라는 이 언어가 만들어진 목적에 부합하는 표현인 확장가능한 언어(SCAlable LAnguage)의 약자다.
2003년 마틴 오더스키 교수와 EPFL의 연구진은 자바 가상 머신(JVM, Java Virtual Machine) 플랫폼에서
함수형 프로그래밍과 객체지향 프로그래밍을 동시에 지원하는, 성능이 우수한 환경을 제공하기 위해 이
언어를 만들었다.
Scala 리터럴, 값, 변수 타입
- 리터럴(literal) : 숫자 5, 문자 A, 텍스트 ‘hello world’ 처럼 소스 코드에 등장하는 데이터
- 값 : 값은 불변의 타입을 갖는 저장 단위이다. 정의될 때 데이터가 할당될 수 있지만 절대 재할당될
수는 없다.
- 변수: 변수는 가변의 타입을 갖는 저장 단위다. 변수는 정의 시 데이터를 할당할 수 있으며, 언제라도
데이터를 재할당할 수도 있다.
- 타입 : 타입은 여러분이 작업하는 데이터의 종류로, 데이터 정의 또는 분류를 의미한다.
Scala
값
값(value)은 불변의, 타입을 갖는 스토리지 단위이며, 관례적으로 데이터를 저장하는 기본 적인 방법이다.
val <식별자>[: 타입] = <데이터>
ex) val x: Int = 20
값은 이름과 할당된 데이터를 모두 필요하지만, 명시적 타입이 있어야 하는 것은 아니다. 타입이 지정되지
않았다면, 스칼라 컴파일러는 할당된 데이터를 기반으로 타입을 추론한다.
Scala
변수
컴퓨터 과학에서 용어 변수(variable)는 일반적으로 값을 저장하고 그 값을 가져올 수 있도록 할당되거나
예약된 메모리 공간에 대응하는 유일한 식별자를 의미한다. 메모리 공간이 예약되어 있는 동안에는
새로운 값을 계속 할당할 수 있다. 따라서 메모리 공간의 내용은 동적이며 가변적(variable)이다.
Scala
튜플
튜플(tuple)은 둘 이상의 값을 가지는 순서가 있는 컨테이너로, 여기에 포함된 각각의 값은 서로 다른 타입을 가질 수 있다. 테이블의 단일 행을 튜플로 간주하는 관계형 데이터베이스로 작업해본 경험이 있다면 이
용어가 익숙할 것이다.
튜플은 값을 논리적으로 분류할 필요가 있고, 그렇게 분류한 값들을 하나의 응집된 단위로 표현하는 데 유용하다. 하지만 리스트와 배열과는 달리 튜플의 요소들을 반복할 수 없다. 튜플은 단지 하나 이상의 값을 담기
위한 컨테이너다.
튜플 생성
(<값 1>, <값 2>[, <값 3>...])
ex) val info = (5, “Korben”, true)
info: (Int, String, Boolean) = (5, Korben, true)
val name = info._2
name: String = Korben
val red = “red” -> “0xff0000”
red (String, String) = (red, 0xff0000)
Scala 표현식과조건문
표현식(expression)
실행 후 값을 반환하는 코드 단위를 말한다.
val <식별자>[: <타입>] = <표현식>
표현식 블록
중괄호 { } 를 사용하여 하나로 묶어 단일 표현식 블록을 만들 수 있다.
표현식 블록에 국한된 값과 변수를 포함한다.
Scala 문장
문장 (statement)
값을 반환하지 않는 표현식이다. 문장의 반환 타입은 값이 없음을 나타내는 Unit이다.
Scala 매치 표현식
매치 표현식은 단일 입력 항목을 평가하여처음으로‘일치하는(matched)’ 패턴이 실행되고 그 값이 반환되는 C와 자바의 ‘switch’문과 유사하다.
스칼라의 매치 표현식은 C와 자바의 ‘switch’문 처럼 default로 또는 와일드카드로‘모두 잡아내는(catch-all)’ 패턴을 지원한다.
반면 매치 표현식은 0개 또는 단 하나의 패턴만 매칭할 수 있으므로 여러 개의 패턴을 한번에 순서대로 매칭하는 형태의 제어 이동(fall-through)이 없다.
스칼라의 매치 표현식은 타입, 정규표현식, 숫자 범위, 데이터 구조 내용 같은 다양한 항목으로 매칭할 수 있을 만큼 놀라울 정도로 유연한 방법이다.
Scala 매치 표현식
패턴 가드를 이용한 매칭
구문:패턴 가드
case <패턴> if <부울식> => <하나 이상의 표현식>
Scala 매치 표현식
패턴 변수를 이용한 타입 매칭
case <identifier>: <type> => <one or more expressions>
패턴 변수를 명명하는 데 있어 유일한 제약사항은반드시 소문자로 시작해야 한다는 것이다.
스칼라가 다형적(polymorphic)인 타입을 지원한다는사실이 매치 표현식 사용법의 단서가 될 것이다.
Scala 루프
루프(loop)는 하나의 작업을 반복적으로수행하는 것을 나타내는 용어로, 일정 범위의 데이터를 반복하거나부울식이 false를 반환할 때까지 반복하는
것이 여기에 해당한다.
스칼라에서가장 중요한 루프 구조는 for 루프로, for-컴프리헨션(for-comprehension)이라고 한다.
for 루프는 일정 범위의 데이터를 반복하며, 반복할 때마다 표현식을 실행한다. 그리고 선택적으로그 실행문의 반환값들을컬렉션(collection)으로
돌려준다. 이 for 루프는 반복문 중첩, 필터링, 값 바인딩을 지원하는 등 맞춤 변경(customiziong)이 매우 쉽다.
<시작 정수값> [to|until] <끝 정수값> [by increment]
다음은 for 루프의 기본 정의를 나타낸다.
구문 for 루프로 반복하기
for(<식별자> <- <반복자>) [yield] [<표현식>]
yield는 선택사항이다. 표현식과 함께 yield가 쓰였다면 호출된 모든 표현식의 반환 값은 컬렉션으로반환된다.
Scala 루프
Scala 루프
반복자 가드
매치 표현식에서패턴 가드와 마찬가지로, 반복자 가드(iterator guard) 또는 필터(filter)는 반복자에 if 표현식을 추가한다.
반복자 가드를 사용하면 if 표현식이 true를 반환할 때에만 반복을 수행할 것이다.
for(<identifier> <- <iterator> if <Boolean expression) …
Scala 루프
값 바인딩
for 루프에서 일반적인 전략은 현행 반복을 기반으로 하는 표현식 블록 내에 임시 값 또는 변수를 정의하는 것이다.
스칼라에서이에 대응하는 다른 방법으로는for 루프 정의에서 값 바인딩(value binding)을 하는 것이다.
for (<식별자> <- <반복자> ; <식별자> = <표현식> ) …
Scala 루프
while과 Do/While 루프
for 루프와 함께 스칼라는 부울식이 거짓(false)을 반환할 때까지 문장을 반복하는 ‘while’과 ‘do/while’ 루프를 지원한다.
하지만 이 루프는 스칼라에서for루프만큼 보편적으로사용하지는않는데, 이 루프가 표현식이 아니며 값을 생성(yield)하는 데에는 사용할 수 없기
때문이다.
while (<부울식>) 표현식
Scala 요약
표현식 관점에서 작업하는 법을 배우는 것이 유용하고 가치 있는 기법이다.
코드를 작성할 때 표현식을 고려하고, 그 표현식을 둘러싼 애플리케이션을구조화해야한다.
표현식을 작성할 때 주의해야 할 중요한 원칙은
(1) 여러분의 코드를 표현식으로어떻게 구조화할 것인지,
(2) 어떻게 여러가지의표현식이 반환값을 유도할 것인지
(3) 그 반환값으로무엇을 할 것인지다.
표현식은 코드 구조의 기반이 되는 것 외에도 스칼라 구문의 기반이기도하다.
표현식과 표현식 블록의 기본 특성과 구문을 이해하는 것이 언어의 나머지에 대한 구문을 습득하는 핵심 요소가 될 것이다.
Scala 참고 도서
http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&barcode=9791185890791

More Related Content

What's hot

Start IoT with JavaScript - 4.객체1
Start IoT with JavaScript - 4.객체1Start IoT with JavaScript - 4.객체1
Start IoT with JavaScript - 4.객체1Park Jonggun
 
자바8강의 0강. java8 overview
자바8강의 0강. java8 overview자바8강의 0강. java8 overview
자바8강의 0강. java8 overviewSejong Park
 
Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Park Jonggun
 
Start IoT with JavaScript - 2.연산자
Start IoT with JavaScript - 2.연산자Start IoT with JavaScript - 2.연산자
Start IoT with JavaScript - 2.연산자Park Jonggun
 
Lambda 란 무엇인가
Lambda 란 무엇인가Lambda 란 무엇인가
Lambda 란 무엇인가Vong Sik Kong
 
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩해강
 
Java8 & Lambda
Java8 & LambdaJava8 & Lambda
Java8 & Lambda기현 황
 
Java 8 api :: lambda 이용하기
Java 8 api :: lambda 이용하기Java 8 api :: lambda 이용하기
Java 8 api :: lambda 이용하기rupert kim
 
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)MIN SEOK KOO
 
Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Park Jonggun
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)MIN SEOK KOO
 
자바8 람다 나머지 공개
자바8 람다 나머지 공개자바8 람다 나머지 공개
자바8 람다 나머지 공개Sungchul Park
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개beom kyun choi
 
나에 첫번째 자바8 람다식 지앤선
나에 첫번째 자바8 람다식   지앤선나에 첫번째 자바8 람다식   지앤선
나에 첫번째 자바8 람다식 지앤선daewon jeong
 
(망작)이것이 자바다 Chap.16 스트림&병렬처리 Stream&parallel processing(java)
(망작)이것이 자바다 Chap.16 스트림&병렬처리 Stream&parallel processing(java)(망작)이것이 자바다 Chap.16 스트림&병렬처리 Stream&parallel processing(java)
(망작)이것이 자바다 Chap.16 스트림&병렬처리 Stream&parallel processing(java)MIN SEOK KOO
 
Java 자료구조 비교 (Java1.6 기준)
Java 자료구조 비교 (Java1.6 기준)Java 자료구조 비교 (Java1.6 기준)
Java 자료구조 비교 (Java1.6 기준)혜웅 박
 

What's hot (19)

Start IoT with JavaScript - 4.객체1
Start IoT with JavaScript - 4.객체1Start IoT with JavaScript - 4.객체1
Start IoT with JavaScript - 4.객체1
 
자바8강의 0강. java8 overview
자바8강의 0강. java8 overview자바8강의 0강. java8 overview
자바8강의 0강. java8 overview
 
Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수
 
Start IoT with JavaScript - 2.연산자
Start IoT with JavaScript - 2.연산자Start IoT with JavaScript - 2.연산자
Start IoT with JavaScript - 2.연산자
 
Lambda 란 무엇인가
Lambda 란 무엇인가Lambda 란 무엇인가
Lambda 란 무엇인가
 
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
 
Java8 & Lambda
Java8 & LambdaJava8 & Lambda
Java8 & Lambda
 
Java 8 api :: lambda 이용하기
Java 8 api :: lambda 이용하기Java 8 api :: lambda 이용하기
Java 8 api :: lambda 이용하기
 
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
 
Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
 
자바8 람다 나머지 공개
자바8 람다 나머지 공개자바8 람다 나머지 공개
자바8 람다 나머지 공개
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개
 
STL study (skyLab)
STL study (skyLab)STL study (skyLab)
STL study (skyLab)
 
Java8 람다
Java8 람다Java8 람다
Java8 람다
 
9 swift 클로저1
9 swift 클로저19 swift 클로저1
9 swift 클로저1
 
나에 첫번째 자바8 람다식 지앤선
나에 첫번째 자바8 람다식   지앤선나에 첫번째 자바8 람다식   지앤선
나에 첫번째 자바8 람다식 지앤선
 
(망작)이것이 자바다 Chap.16 스트림&병렬처리 Stream&parallel processing(java)
(망작)이것이 자바다 Chap.16 스트림&병렬처리 Stream&parallel processing(java)(망작)이것이 자바다 Chap.16 스트림&병렬처리 Stream&parallel processing(java)
(망작)이것이 자바다 Chap.16 스트림&병렬처리 Stream&parallel processing(java)
 
Java 자료구조 비교 (Java1.6 기준)
Java 자료구조 비교 (Java1.6 기준)Java 자료구조 비교 (Java1.6 기준)
Java 자료구조 비교 (Java1.6 기준)
 

Similar to 러닝스칼라 - Scala 기초 (1)

[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼
[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼
[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼Sanghoon Yoon
 
자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조중선 곽
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304Yong Joon Moon
 
Scala, Scalability
Scala, ScalabilityScala, Scalability
Scala, ScalabilityDongwook Lee
 
자바프로그래머를 위한 스칼라
자바프로그래머를 위한 스칼라자바프로그래머를 위한 스칼라
자바프로그래머를 위한 스칼라Jong Gook Bae
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130Yong Joon Moon
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)Sung-hoon Ma
 
파이썬 기본 문법
파이썬 기본 문법파이썬 기본 문법
파이썬 기본 문법SeongHyun Ahn
 
[Swift] Generics
[Swift] Generics[Swift] Generics
[Swift] GenericsBill Kim
 
Programming java day2
Programming java day2Programming java day2
Programming java day2Jaehoonyam
 
Why what how kotlin
Why what how kotlinWhy what how kotlin
Why what how kotlinSewonKo
 
Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버Jaejin Yun
 
JavaInAction 자바 8
JavaInAction 자바 8JavaInAction 자바 8
JavaInAction 자바 8NBT Inc.
 
C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]
C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]
C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]leusin2
 

Similar to 러닝스칼라 - Scala 기초 (1) (20)

Scala variable
Scala variableScala variable
Scala variable
 
[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼
[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼
[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼
 
자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
 
Scala, Scalability
Scala, ScalabilityScala, Scalability
Scala, Scalability
 
Scalability
ScalabilityScalability
Scalability
 
자바프로그래머를 위한 스칼라
자바프로그래머를 위한 스칼라자바프로그래머를 위한 스칼라
자바프로그래머를 위한 스칼라
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130
 
Javascript
JavascriptJavascript
Javascript
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)
 
Scala
ScalaScala
Scala
 
파이썬 기본 문법
파이썬 기본 문법파이썬 기본 문법
파이썬 기본 문법
 
[Swift] Generics
[Swift] Generics[Swift] Generics
[Swift] Generics
 
Haskell study 6
Haskell study 6Haskell study 6
Haskell study 6
 
Programming java day2
Programming java day2Programming java day2
Programming java day2
 
Why what how kotlin
Why what how kotlinWhy what how kotlin
Why what how kotlin
 
[ES6] 12. Array
[ES6] 12. Array[ES6] 12. Array
[ES6] 12. Array
 
Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버
 
JavaInAction 자바 8
JavaInAction 자바 8JavaInAction 자바 8
JavaInAction 자바 8
 
C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]
C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]
C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]
 

러닝스칼라 - Scala 기초 (1)

  • 2. Scala 스칼라는 이 언어가 만들어진 목적에 부합하는 표현인 확장가능한 언어(SCAlable LAnguage)의 약자다. 2003년 마틴 오더스키 교수와 EPFL의 연구진은 자바 가상 머신(JVM, Java Virtual Machine) 플랫폼에서 함수형 프로그래밍과 객체지향 프로그래밍을 동시에 지원하는, 성능이 우수한 환경을 제공하기 위해 이 언어를 만들었다.
  • 3. Scala 리터럴, 값, 변수 타입 - 리터럴(literal) : 숫자 5, 문자 A, 텍스트 ‘hello world’ 처럼 소스 코드에 등장하는 데이터 - 값 : 값은 불변의 타입을 갖는 저장 단위이다. 정의될 때 데이터가 할당될 수 있지만 절대 재할당될 수는 없다. - 변수: 변수는 가변의 타입을 갖는 저장 단위다. 변수는 정의 시 데이터를 할당할 수 있으며, 언제라도 데이터를 재할당할 수도 있다. - 타입 : 타입은 여러분이 작업하는 데이터의 종류로, 데이터 정의 또는 분류를 의미한다.
  • 4. Scala 값 값(value)은 불변의, 타입을 갖는 스토리지 단위이며, 관례적으로 데이터를 저장하는 기본 적인 방법이다. val <식별자>[: 타입] = <데이터> ex) val x: Int = 20 값은 이름과 할당된 데이터를 모두 필요하지만, 명시적 타입이 있어야 하는 것은 아니다. 타입이 지정되지 않았다면, 스칼라 컴파일러는 할당된 데이터를 기반으로 타입을 추론한다.
  • 5. Scala 변수 컴퓨터 과학에서 용어 변수(variable)는 일반적으로 값을 저장하고 그 값을 가져올 수 있도록 할당되거나 예약된 메모리 공간에 대응하는 유일한 식별자를 의미한다. 메모리 공간이 예약되어 있는 동안에는 새로운 값을 계속 할당할 수 있다. 따라서 메모리 공간의 내용은 동적이며 가변적(variable)이다.
  • 6. Scala 튜플 튜플(tuple)은 둘 이상의 값을 가지는 순서가 있는 컨테이너로, 여기에 포함된 각각의 값은 서로 다른 타입을 가질 수 있다. 테이블의 단일 행을 튜플로 간주하는 관계형 데이터베이스로 작업해본 경험이 있다면 이 용어가 익숙할 것이다. 튜플은 값을 논리적으로 분류할 필요가 있고, 그렇게 분류한 값들을 하나의 응집된 단위로 표현하는 데 유용하다. 하지만 리스트와 배열과는 달리 튜플의 요소들을 반복할 수 없다. 튜플은 단지 하나 이상의 값을 담기 위한 컨테이너다. 튜플 생성 (<값 1>, <값 2>[, <값 3>...]) ex) val info = (5, “Korben”, true) info: (Int, String, Boolean) = (5, Korben, true) val name = info._2 name: String = Korben val red = “red” -> “0xff0000” red (String, String) = (red, 0xff0000)
  • 7. Scala 표현식과조건문 표현식(expression) 실행 후 값을 반환하는 코드 단위를 말한다. val <식별자>[: <타입>] = <표현식> 표현식 블록 중괄호 { } 를 사용하여 하나로 묶어 단일 표현식 블록을 만들 수 있다. 표현식 블록에 국한된 값과 변수를 포함한다.
  • 8. Scala 문장 문장 (statement) 값을 반환하지 않는 표현식이다. 문장의 반환 타입은 값이 없음을 나타내는 Unit이다.
  • 9. Scala 매치 표현식 매치 표현식은 단일 입력 항목을 평가하여처음으로‘일치하는(matched)’ 패턴이 실행되고 그 값이 반환되는 C와 자바의 ‘switch’문과 유사하다. 스칼라의 매치 표현식은 C와 자바의 ‘switch’문 처럼 default로 또는 와일드카드로‘모두 잡아내는(catch-all)’ 패턴을 지원한다. 반면 매치 표현식은 0개 또는 단 하나의 패턴만 매칭할 수 있으므로 여러 개의 패턴을 한번에 순서대로 매칭하는 형태의 제어 이동(fall-through)이 없다. 스칼라의 매치 표현식은 타입, 정규표현식, 숫자 범위, 데이터 구조 내용 같은 다양한 항목으로 매칭할 수 있을 만큼 놀라울 정도로 유연한 방법이다.
  • 10. Scala 매치 표현식 패턴 가드를 이용한 매칭 구문:패턴 가드 case <패턴> if <부울식> => <하나 이상의 표현식>
  • 11. Scala 매치 표현식 패턴 변수를 이용한 타입 매칭 case <identifier>: <type> => <one or more expressions> 패턴 변수를 명명하는 데 있어 유일한 제약사항은반드시 소문자로 시작해야 한다는 것이다. 스칼라가 다형적(polymorphic)인 타입을 지원한다는사실이 매치 표현식 사용법의 단서가 될 것이다.
  • 12. Scala 루프 루프(loop)는 하나의 작업을 반복적으로수행하는 것을 나타내는 용어로, 일정 범위의 데이터를 반복하거나부울식이 false를 반환할 때까지 반복하는 것이 여기에 해당한다. 스칼라에서가장 중요한 루프 구조는 for 루프로, for-컴프리헨션(for-comprehension)이라고 한다. for 루프는 일정 범위의 데이터를 반복하며, 반복할 때마다 표현식을 실행한다. 그리고 선택적으로그 실행문의 반환값들을컬렉션(collection)으로 돌려준다. 이 for 루프는 반복문 중첩, 필터링, 값 바인딩을 지원하는 등 맞춤 변경(customiziong)이 매우 쉽다. <시작 정수값> [to|until] <끝 정수값> [by increment] 다음은 for 루프의 기본 정의를 나타낸다. 구문 for 루프로 반복하기 for(<식별자> <- <반복자>) [yield] [<표현식>] yield는 선택사항이다. 표현식과 함께 yield가 쓰였다면 호출된 모든 표현식의 반환 값은 컬렉션으로반환된다.
  • 14. Scala 루프 반복자 가드 매치 표현식에서패턴 가드와 마찬가지로, 반복자 가드(iterator guard) 또는 필터(filter)는 반복자에 if 표현식을 추가한다. 반복자 가드를 사용하면 if 표현식이 true를 반환할 때에만 반복을 수행할 것이다. for(<identifier> <- <iterator> if <Boolean expression) …
  • 15. Scala 루프 값 바인딩 for 루프에서 일반적인 전략은 현행 반복을 기반으로 하는 표현식 블록 내에 임시 값 또는 변수를 정의하는 것이다. 스칼라에서이에 대응하는 다른 방법으로는for 루프 정의에서 값 바인딩(value binding)을 하는 것이다. for (<식별자> <- <반복자> ; <식별자> = <표현식> ) …
  • 16. Scala 루프 while과 Do/While 루프 for 루프와 함께 스칼라는 부울식이 거짓(false)을 반환할 때까지 문장을 반복하는 ‘while’과 ‘do/while’ 루프를 지원한다. 하지만 이 루프는 스칼라에서for루프만큼 보편적으로사용하지는않는데, 이 루프가 표현식이 아니며 값을 생성(yield)하는 데에는 사용할 수 없기 때문이다. while (<부울식>) 표현식
  • 17. Scala 요약 표현식 관점에서 작업하는 법을 배우는 것이 유용하고 가치 있는 기법이다. 코드를 작성할 때 표현식을 고려하고, 그 표현식을 둘러싼 애플리케이션을구조화해야한다. 표현식을 작성할 때 주의해야 할 중요한 원칙은 (1) 여러분의 코드를 표현식으로어떻게 구조화할 것인지, (2) 어떻게 여러가지의표현식이 반환값을 유도할 것인지 (3) 그 반환값으로무엇을 할 것인지다. 표현식은 코드 구조의 기반이 되는 것 외에도 스칼라 구문의 기반이기도하다. 표현식과 표현식 블록의 기본 특성과 구문을 이해하는 것이 언어의 나머지에 대한 구문을 습득하는 핵심 요소가 될 것이다.