703
지금까지 스칼라 언어의 특징에 대해 대부분의 설명을 마쳤다. 하지만 우리가 작성한 애플리케
이션은 매우 작았다. 심지어 빅데이터를 다뤘던
18
장의 프로그램도 작았다. 이는 아주 좋은 일
이다. 코드 크기가 엄청나가 줄어든다는 것은 소프트웨어 개발에서 생길 수 있는 문제가 엄청
나게 감소한다는 뜻이다.
하지만 모든 애플리케이션이 작은 크기로 제작 가능한 것은 아니다. 이번 장에서는 대규모 애플
리케이션에서 고려해야 할 사항을 다룰 것이다. 우리가 아직 다루지 않은 몇 가지 언어와
API
기능을 다루고, 몇 가지 디자인 패턴과 관용구를 살펴본 다음, 트레이트를 모듈로 사용하거나,
객체지향과 함수형 설계 기법 사이의 균형을 잡는 방법과 같은 구조적인 접근 방식에 대해 다
룰 것이다.
23.1
그 동안 배운 내용 복습
우리가 이미 다룬 내용 중에서 작은 설계 문제를 쉽게 해결하는 데 도움이 되고, 그에 따라 애
플리케이션에 안정적인 토대를 제공할 수 있는 것을 다시 정리해보자.
함수형 컨테이너
이 책의 예제 대부분은 크기가 매우 작았다. 왜냐하면 컬렉션이나 다른 컨테이너가 제공하는
간결하면서도 강력한 콤비네이터를 사용했기 때문이다. 이들을 사용하면 코드의 양을 최소
화하면서 원하는 논리를 구현할 수 있다.
애플리케이션 설계
CHAPTER
23
704
4
부
고급 주제 및 실전 응용
타입
타입은 제약을 강제로 지키게 만든다. 이상적인 경우, 타입은 프로그램의 동작에 대해 가능한
한 많은 정보를 표현한다. 예를 들어
Option
(
http
://
bit
.
ly
/
12uGdb2
)을 사용하면
null
의
사용을 없앨 수 있다. 이 목록의 맨 뒤에 있는 오류 처리 전략 항목도 살펴보라. 매개변수화한
타입이나 추상 타입 멤버는 추상화와 코드 재사용을 위한 도구다.
2
.
13
절 ‘추상 타입과 매개
변수화한 타입’에서 본
Reader
추상화가 그 예다.
트레이트 혼합
트레이트는 모듈화와 조합 가능한 동작을 가능하게 해준다 (
3
.
14
절 ‘트레이트: 스칼라 인터
페이스와 혼합’과
9
장을 보라 ).
for
내장
for
내장은
flatMap
,
map
,
filter
/
withFilter
를 사용해서 컨테이너에 대한 작업을 수행할
수 있는 편리한
DSL
을 제공한다 (
7
장).
패턴 매칭
패턴 매칭은 처리를 위한 데이터를 빠르게 추출할 수 있게 해준다(
4
장).
암시
암시는 많은 설계 문제를 해결해준다. 준비 코드를 줄여주고, 메서드 호출에 필요한 맥락을 계
속 전달할 수 있고, 암시적 변환이 가능하며, 일부 타입에 제약을 거는 것도 가능하다 (
5
장).
미세한 가시성 제어 규칙
스칼라가 제공하는 미세한 가시성 제어는
API
의 상세한 구현을 노출하는 방식을 정확하게 제
어할 수 있게 해준다. 따라서 클라이언트가 사용해야 하는 공개적인 추상화만 외부에 노출시
킬 수 있다. 이를 위해서는 훈련이 필요하다. 하지만
API
의 개선을 더 어렵게 만드는
API
내
부와 외부의 불필요한 결합을 피할 수 있기 때문에 그런 노력을 기울일 만하다 (
13
장).
패키지 객체
미세한 가시성 제어의 대안으로는 모든 구현을 보호된 패키지 안에 넣고, 최상위 패키지 객체
에서 적합한 외부 추상화만 노출하도록 만드는 방법이 있다. 예를 들어 이름이 겹쳐서 감춰질
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.