54
1
부
스칼라와의 만남
worksheet
가 있다. 이 기능은 단순하지 않은 코드를 여러 번 수정하면서 실행해야 할 경우에 유용하
다. 넷빈즈에도 비슷한 대화식 콘솔
Interactive
Console
기능이 있다.
이들
IDE
중 하나를 사용하는 독자는
21
.
3
절 ‘
IDE
나 텍스트 편집기와 통합하기’에서 스칼라
플러그인의 정보와 워크시트 또는 대화식 콘솔 사용법을 볼 수 있다.
1.3
스칼라 맛보기
1
장의 나머지와 이어지는
2
,
3
장에 걸쳐 여러 스칼라 기능을 빠르게 살펴볼 것이다. 진행 과정
에서 어떤 일이 벌어지는지 여러분이 이해할 수 있는 정도로만 간략히 설명하겠다. 더 깊은 배경
지식을 배우려면 좀 더 기다려야 한다. 일단
1
~
3
장은 스칼라 문법 소개와 매일매일 스칼라로
어떤 코드를 작성하는지 맛보는 과정으로 생각하라.
TIP
스칼라 라이브러리에 있는 여러 타입을 이 책에서 언급할 때, 그와 관련해서 스칼라독을 자세히 살펴보는 작업
이 유용함을 알게 될 것이다. 현재 버전의 스칼라독은
http
://
bit
.
ly
/
1
u
1
pv56
에 있다. 왼쪽의 타입 목록 맨 위
에 있는 검색 필드를 이용하면 편리하다. 스칼라독은 타입 목록을 알파벳순으로 표시하는 자바독과 달리 타입
을 패키지별로 모아서 표시하기 때문에, 원하는 타입을 빠르게 검색할 수 있는 검색 창이 더 유용하다.
이 책에서는 대부분 스칼라
REPL
을 사용할 것이다. 세 가지 방법, 즉 스크립트나 ‘
main
’ 인자
없이 직접
scala
명령을 실행하거나,
SBT
console
명령을 사용하거나,
IDE
가 제공하는 워크
시트를 사용해서
REPL
을 시작할 수 있음을 다시 기억하라.
IDE
를 사용하지 않는다면 가능한
SBT
를 사용하길 권한다. 특히 여러분이 프로젝트를 수행 중
이라면 더 그렇다. 이 책에서는 대부분
SBT
를 사용하겠지만, 직접
scala
를 실행하거나
IDE
에
서 워크시트를 실행하더라도 그다음 단계는 모두 동일하다. 여러분이 실제로는
IDE
를 더 선호
한다고 해도, 커맨드 창에서
SBT
를 한번 실행해서 모양을 살펴보라. 나 자신은
IDE
를 거의 사
용하지 않지만, 그건 단지 개인 성향일 뿐이다.
셸 창에서 코드 예제의 최상위 디렉터리로 이동한 다음
sbt
를 시작하자.
>
프롬프트 상에서
console
을 입력하라. 이제부터는
sbt
나
scala
출력 중 불필요한 부분은 생략하겠다.
55
1
장
빠른 출발: 스칼라 소개
다음과 같이 코드 두 줄을
scala
>
에서 입력하라.
scala
>
val book
=
"
Programming Scala
"
book
:
java
.
lang
.
String
=
Programming Scala
scala
>
println
(
book
)
Programming Scala
첫 줄에서는
val
키워드를 사용해서 불변
immutable
변수
book
을 선언했다. 변경 가능한 데이터를
사용하는 것이 일반적인 버그의 원인 중 하나인 만큼 불변값을 사용할 것을 권장한다.
인터프리터가 출력하는 값에는
book
의 타입과 값이 들어 있다. 스칼라는 리터럴
literal
값인
"
Programming
Scala
"
로부터
book
의 타입이
java
.
lang
.
String
(
http
://
bit
.
ly
/
1wl7Bdg
)임
을 추론해낸다.
타입 정보를 보여주거나, 선언에 명시적으로 타입 정보를 추가하는 경우, 대상 이름 뒤에 콜론
(:)을 붙인 다음에 타입 표기
type
annotation
를 추가한다. 스칼라의 타입 표기 방식이 자바의 관례
를 따르지 않는 이유는 무엇일까? 스칼라에서는 타입 정보가 추론되는 경우가 많다. 따라서 코
드에서 반드시 타입을 명시할 필요는 없다. 자바의
type
item
과 비교해서
item
:
type
방식은
콜론과 타입 표기를 생략하고 그냥
item
이라고 쓴 경우의 컴파일러 구문분석의 모호함을 없애
준다.
일반적인 규칙으로, 스칼라는 자바 문법을 사용하는 경우 새로운 기능을 지원하기 어렵다는 등
의 그럴듯한 이유가 있는 경우에만 자바 문법과 다른 방식을 택한다.
TIP
REPL
에서 타입을 살펴보는 것은 특정 식
expression
에 관해 스칼라가 추론한 타입을 배울 때 매우 편리하다. 타
입 정보는
REPL
을 사용해서 탐구할 수 있는 몇 가지 요소 중 하나다.
REPL
만 사용하는 경우 길이가 긴 예제를 수정하고 다시 실행하는 과정이 번거롭다. 따라서 텍
스트 편집기나
IDE
에서 스칼라 스크립트를 작성하는 것이 편하다. 그다음에 스크립트를 실행하
거나 코드를 통째로
REPL
에 복사해 넣을 수 있다.
앞에서 실행했던
upper1
.
sc
를 다시 살펴보자.
56
1
부
스칼라와의 만남
//
src
/
main
/
scala
/
progscala2
/
introscala
/
upper1
.
sc
class Upper
{
def upper
(
strings
:
String
*):
Seq
[
String
]
=
{
strings
.
map
((
s
:
String
)
=
>
s
.
toUpperCase
())
}
}
val up
=
new Upper
println
(
up
.
upper
("
Hello
",
"
World
!"))
이 책에서 소개하는 코드 예제가 내려받은 코드 예제에 포함된 것이라면, 첫 줄의 주석에 해당
파일의 경로가 표시되어 있을 것이다. 스칼라의 주석은 자바,
C
#,
C
등과 같은 관례를 따른다.
//
주석
은 그 줄의 끝에서 끝나지만,
/*
주석
*/
은 여러 줄에 걸칠 수 있다.
또한
20
쪽 ‘코드 예제 내려받기’에서 스크립트 파일의 확장자는 .
sc
인 반면 컴파일할 코드는
.
scala
로 정했음을 기억하라. 이 방식은 이 책에서만 사용하는 것이다. 보통은 스크립트 파일
도 .
scala
확장자로 작성한다. 하지만 확장자를 .
scala
로 정하면
SBT
가 프로젝트를 빌드할 때
스크립트까지 컴파일하려 시도할 것이고, 스크립트는 컴파일할 수 없다 (잠시 후에 설명한다 ).
먼저 스크립트를 실행해보자. 그 후 코드를 자세히 설명할 것이다.
sbt
를 시작하고
console
을
실행해서 스칼라를 시작하자. 그다음에
:
load
명령을 사용해서 파일을 로드(컴파일 후 실행)
하자.
scala
>
:
load src
/
main
/
scala
/
progscala2
/
introscala
/
upper1
.
sc
Loading src
/
main
/
scala
/
progscala2
/
introscala
/
upper1
.
sc
...
defined class Upper
up
:
Upper
=
Upper
@
4ef506bf
//
자바의
Object
.
toString
을
사용한
결과
ArrayBuffer
(
HELLO
,
WORLD
!)
마지막 줄은 실제로 스크립트의
println
이 출력한 것이다. 다른 줄은
REPL
이 출력한 결과다.
그렇다면 스크립트를 컴파일할 수 없는 이유는 뭘까? 스크립트는 단순하게 쓸 수 있도록 설계되
었고, 그런 단순화 중 하나는 자바나 스칼라 코드에서와 달리 선언 (변수나 함수 )을 객체로 감쌀
필요가 없다는 것이다(객체로 감싸는 것은
JVM
의 요구 사항이다).
scala
명령은 이런 상충되
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.