150
1
스칼라와의 만남
println
("
first pass
:")
for
{
breedOption
<
-
dogBreeds
breed
<
-
breedOption
upcasedBreed
=
breed
.
toUpperCase
()
}
println
(
upcasedBreed
)
println
("
second pass
:")
for
{
Some
(
breed
)
<
-
dogBreeds
upcasedBreed
=
breed
.
toUpperCase
()
}
println
(
upcasedBreed
)
여러 품종을 반환하는 서비스를 호출했다고 생각해보자. 이 서비스는
Option
을 반환한다.
비스가 아무것도 제공할 수 없다면
None
을 반환하기 때문이다. 첫
for
내장의 첫 번째 식에서
뽑아낸 각 원소는
Option
이다. 그다음 줄에서는 화살표를 사용해서
Option
에 들어 있는 값을
빼낸다.
잠깐!
None
에서 객체를 뽑아내면 예외를 던지는 것이 아니었던가? 그렇다. 하지만
for
내장에
서는 이런 경우를 효과적으로 검사해서
None
처리를 건너뛴다. 이는 마치 번째 바로 앞에
if
breedOption
!=
None
명시적으로 추가한 것과 같다.
번째
for
내장은 이를 패턴 매칭사용해서 깔끔하게 만든 것이다.
Some
(
breed
)
<
-
dogBreeds
라는 식은
breedOption
Some
경우에만 성공해서 단계만에 품종명(
breed
)
뽑아낸다.
None
원소에 대한 처리가 이것 다음으로 넘어가는 일은 없다.
언제 왼쪽 화살표 (
<
-
)를 사용하고, 언제 등호 (
=
)사용해야 할까? 어떤 컬렉션이나
Option
같은 다른 컨테이너’를 대상으로 반복하면서 값을 가져와야 하는 경우에는 화살표를 사용한
다. 반복과 관계없이 값을 대입해야 하는 경우에는 등호를 사용한다. 제약 사항은
for
내장의
번째 식은 반드시 화살표를 사용한 추출·반복이어야 한다는 것이다.
대부분의 언어에서 루프를 사용할 때는
break
사용해서 루프를 벗어나거나,
continue
사용해서 다음번 반복으로 넘어갈 있다. 스칼라에는 이런 명령이 없다. 하지만 전형적인
스칼라 코드를 작성하는 경우 그런 언어 구성 요소를 사용할 필요가 거의 없다. 어떤 루프를
continue
해야 하는 경우에는 조건식을 사용하거나 재귀를 사용하면 된다. 나은 방법으로

Get 프로그래밍 스칼라: 실용적인 스칼라 활용법을 익히는 가장 확실한 실전 바이블 (2.11.x 버전 기반) now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.