501
12
스칼라 컬렉션 라이브러리
창을 막는다. 한 클래스는 기본적인 값을 위한 것이며, 다른 하나는 참조(예를 들면
AnyRef
)
값을 위한 것이다. 기본 타입 버전은
8
바이트면 모든 기본 타입을 저장하기에 충분하다는 사실
활용한다.
8
바이트를 어떻게 해석할지에 대해 알려주는 ‘꼬리표’가 들어 있다.
그러므로 미니박싱은 꼬리표가 붙은 공용체
tagged
union
역할을 한다.
1
따라서 각각의 기본 타입
대한 별도의 인스턴스를 만들 필요가 없다. 참조값에 대한 클래스는 원래와 마찬가지로 작동
한다.
원래 컨테이너를 트레이트로 바꿈으로써 기존의 상속 관계는 두 클래스 인스턴스에서도 유효
하다. 예를 들어 매개변수화한 타입
class
C
[
T
]
class
D
[
T
]
있는데,
class
D
[
T
]
extends
C
[
T
]
였다고 하자. 그리고 그 둘을 모두 특화했다고 하자. 그러면 만들어진 코드는 개념적으로
다음과 비슷하다.
trait C
[
T
]
//
원래는
class C
[
T
]
class C
_
primitive
[
T
]
extends C
[
T
]
//
T
AnyVal
class C
_
anyref
[
T
]
extends C
[
T
]
//
T
AnyRef
trait D
[
T
]
extends C
[
T
]
//
원래는
class D
[
T
]
class D
_
primitive
[
T
]
extends C
_
primitive
[
T
]
with D
[
T
]
//
T
AnyVal
class D
_
anyref
[
T
]
extends C
_
anyref
[
T
]
with D
[
T
]
//
T
AnyRef
한편 성능이 필요한 경우 원한다면
@
specialized
여전히 사용할 있다. 다만 추가로 늘어나
용량에 주의하고, 앞에서 설명한 여러 설계상 단점을 염두에 두어야 한다.
12.5
마치며
이제 스칼라 컬렉션 라이브러리에 대한 공부를 마무리한다. 여기서는 변경 가능, 변경 불가능,
그리고 병렬 컬렉션 사이의 차이와, 자바 컬렉션에서 스칼라 컬렉션으로, 그리고 반대로
1
역주_ 꼬리표가붙은공용체로유명한것은
C
의
union
(다만
C
에서
union
은여러구조체가같은메모리를사용하도록묶어주는
할만하고,타입을구분하기위한태그는프로그래머가직접붙여야한다)파스칼등의가변레코드(
variant
record
)가있다.가변레코드
는타입정의시태그도함께정의하기때문에
C
와달리컴파일러가태그값을검사할수있다는장점이있다.
502
2
기본기 다지기
환하는 방법, 그리고 중요하지만 아직 완전히 해결하지는 못한
JVM
기본 타입에 대해 박싱의
부가 비용을 피하고 효율적으로 작동하는 컬렉션을 만드는 방법에 대해 정리했다.
스칼라 타입 시스템이라는 중요한 주제를 다루기 전에, 다음 장에서는 우리가 매일매일 ‘신경
쓰는주제는 아니지만 알아야 하는 내용인, 스칼라가 가시성
visibility
미세하게 다룰 있도
어떤 지원을 하는지 다룰 것이다. 스칼라는 자바의
public
,
protected
,
private
, 그리고
본인 패키지 영역 기능을 훨씬 넘어서는 제어를 제공한다.

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.