524
3
기초를 넘어서
이다.
24
장에서는 리플렉션
reflection
(실행 시점 인트로스펙션
runtime
introspection
)매크로라는 문
아래에서 타입 정보에 대해 다시 살펴볼 것이다.
또한 여러분에게 기준 역할을 할 수 있도록, 자바 타입 시스템과 비슷한 점이 무엇인지 살펴볼
것이다. 차이점을 이해하면 자바 라이브러리와의 상호 운용성 측면에서도 도움이 것이다.
실제로 스칼라 타입 시스템이 복잡해진 이유 중 일부는 현재의 자바 타입 시스템의 특이한 점
때문이기도 하다. 스칼라는 자바와의 상호 운용을 위해 그런 특징을 지원해야 필요가 있다.
이제 이미 익숙해진 기능인 매개변수화한 타입
parameterized
type
부터 시작하자.
14.1
매개변수화한 타입
이미 여러 곳에서 매개변수화한 타입을 살펴봤다.
2
.
13
절 ‘추상 타입과 매개변수화한 타입’
서는 그것을 추상 타입과 비교했다.
10
.
1
매개변수화한 타입: 상속에 따른 변성에서는 상속
따른 변성에 대해 살펴봤다.
이번 절에서는 그런 내용 중 일부 내용을 다시 자세히 살펴보고, 여러분이 알아야 하는 정보를
가지 추가할 것이다.
14.1.1
변성 표기
먼저 변성 표기
variance
annotation
어떻게 작동하는지 다시 기억해보자.
List
[+
A
]
같은 표기는
List
A
라는 이름으로 표현되는 하나의 타입을 매개변수로 받는다는 의미다.
+
는 변성 표기
로, 여기서는
List
타입 매개변수에 대해 공변성임을 의미한다. 이는
String
AnyRef
브타입이기 때문에
List
[
String
]
List
[
AnyRef
]
서브타입으로 간주된다는 의미다.
비슷하게
-
변성 표기는 타입이 타입 매개변수에 대해 반공변성임을 의미한다. 이에 대한 예제
함수값
FunctionN
전달되는
N
인자 타입을 있다.
Function2
[
-
T1
,
-
T2
,
+
R
]
이라
는 타입 시그니처를 지닌
Function2
(
http
://
bit
.
ly
/
1E8xyiz
)를 생각해보자.
10
.
1
.
1
절 ‘함수
내부 들여다보기에서 함수 인자의 타입이 반공변성이어야 하는지 살펴봤다.

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.