139
3
장
기초를 튼튼히
은 변수 식별자로 취급하며, (클래스 이름 등) 대문자로 시작하는 토큰은 상수 식별자로 취
급한다. 이는 현재 패턴 매칭
case
식의 아주 간결한 문법 (예를 들면
val
키워드를 패턴에 사
용하지 않는다 )으로 인해 생기는 모호성을 해결하기 위한 규칙이다.
3.1.1
편의 구문
모든 연산자가 메서드라는 사실을 알고 나면, 낯설어 보이는 스칼라 코드를 이해하기가 쉬워진
다. 새 연산자를 볼 때마다 특별한 경우가 아닌지 고민할 필요가 없다.
1
.
4
절 ‘동시성 맛보기’의
액터는 비동기 메시지를 느낌표(!)를 사용해서 서로에게 보낸다. 하지만 이것도 일반적인 메서
드일 뿐이다.
이렇게 메서드 이름을 유연하게 부여할 수 있으므로, 스칼라 자체를 확장한 것처럼 자연스럽게
느껴지는 라이브러리를 만들 수 있다. 여러분은 모든 일반적인 수학 연산자를 사용할 수 있는
새로운 수 타입
numeric
type
을 제공하는 수학 라이브러리를 만들 수 있다. 액터와 똑같이 작동하
는 새로운 동시성 메시지 계층을 작성할 수도 있다. 단지 몇 가지 메서드 이름에 대한 제약 사항
만 그 가능성을 제한할 뿐이다.
CAUTION
_
여러분이 연산자 기호를 만들 수 있다고 해서 꼭 그걸 만들어야 한다는 의미는 아니다. 이상한
기호로 만들어진 연산자는 사용자들이 읽고 배우고 기억하기 어렵다는 사실을 염두에 두어야 한다. 기호 연산
자를 과도하게 사용하면 코드에서 ‘행 내부 잡음
line
noise
’이 늘어나 가독성이 떨어진다. 따라서 연산자의 기존
관례를 지키되, 어떤 연산자를 사용할지 분명하지 않은 경우에는 가급적 더 읽기 쉬운 메서드 이름으로 하라.
3.2
빈 인자 목록이 있는 메서드
스칼라는 중위 및 후위 호출이 가능할 뿐 아니라, 인자가 없는 메서드에 대해 괄호를 사용하지
않아도 되도록 유연성을 제공한다.
메서드가 아무 매개변수도 취하지 않는다면 괄호 없이 정의할 수 있다. 호출하는 쪽에서는 그런
메서드를 호출할 때 괄호를 사용하지 말아야 한다. 반대로, 정의 시 메서드에 빈 괄호가 있었다
면, 호출 시 괄호를 넣거나 생략하는 방식 중 하나를 선택할 수 있다.
140
1
부
스칼라와의 만남
예를 들어
List
.
size
에는 괄호가 없다. 따라서
List
(
1
,
2
,
3
).
size
라고 써야 한다. 만약
List
(
1
,
2
,
3
).
size
( )
를 시도한다면 오류가 발생한다.
java
.
lang
.
String
의
length
메서드는 정의에 괄호가 들어 있다 (자바에서는 항상 괄호를 넣
어야 한다). 하지만 스칼라에서는
"
hello
".
length
( )
나
"
hello
".
length
모두 사용할 수 있
다. 스칼라에서 정의한 ‘빈 괄호가 들어 있는 메서드’에도 같은 규칙을 적용한다.
정의에 빈 괄호가 있는 경우와 없는 경우의 처리 규칙에 일관성이 없는 이유는 자바와의 상호
운용성 때문이다. 스칼라에서는 정의와 사용이 일치하는 쪽을 더 선호한다. 하지만 빈 괄호가
있는 경우 더 유연하므로, 자바의 인자 없는 메서드를 호출하는 경우와 스칼라의 인자 없는 메
서드를 호출하는 경우를 일관성 있게 처리할 수 있다.
스칼라 커뮤니티의 관례는 컬렉션의 크기 연산과 같이 부수 효과
side
effects
가 없는 인자 없는 메
서드의 괄호를 생략하는 것이다. 메서드에 부수 효과가 있는 경우, 상태 변경이 일어날 수 있
으니 좀 더 주의를 기울이라는 의미에서 보통 괄호를 더하여 작게나마 ‘경계 신호’를 보낸다.
scala
나
scalac
를 실행하면서
-
Xlint
를 사용하면
I
/
O
등 부수 효과를 실행하는 메서드의 괄
호를 생략할 때마다 컴파일러가 경고를 표시한다. 이 책의
SBT
설정에는 이와 같은 플래그를
이미 반영했다.
무엇보다 괄호가 선택인지 여부에 대해 왜 그렇게 신경을 써야 할까? 괄호를 생략할 수 있으면
메서드 연쇄 호출 코드를 더 읽기 쉬운 ‘문장’처럼 보이게 할 수 있다.
//
src
/
main
/
scala
/
progscala2
/
rounding
/
no
-
dot
-
better
.
sc
def isEven
(
n
:
Int
)
=
(
n
%
2
)
==
0
List
(
1
,
2
,
3
,
4
)
filter isEven foreach println
이 코드는 다음과 같이 출력된다.
2
4
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.