타입을 하나의 파라미터로 받는다
class Stack[A]:
private var elements: List[A] = Nil
def push(x: A): Unit =
elements = x :: elements
def peek: A = elements.head
def pop(): A =
val currentTop = peek
elements = elements.tail
currentTop
→ 스칼라는 강타입 언어라서 해당 기능을 지원하고 있다.
→ 타입 파라미터를 [ ]로 받는다.
→[A]를 통해 타입 파라미터의 지시자로 쓴다.
이 구현은 stack클래스인데, 타입A로만 엘리먼트를 오직 받을 수 있게 된다.
실제로 쓸때는 A에다가 사용하려느 타입을 넣어줘야한다,.
val stack = Stack[Int]
stack.push(1)
stack.push(2)
println(stack.pop()) // prints 2
println(stack.pop()) // prints 1
이 스택은 인트만 받을수있다.
즉 타입이 서브타입을 가질경우 서브타입만 받을수있다.
class Fruit
class Apple extends Fruit
class Banana extends Fruit
val stack = Stack[Fruit]
val apple = Apple()
val banana = Banana()
stack.push(apple)
stack.push(banana)
스택에 char타입을 받을때, stack[int]와는 상호 호환 될 수 없다.
B=A가 같을 때만 위의 두 stack을 호환할 수 있다.
클래스 내에서 특정 타입만을 받아서 그 내에서 자유롭게 활용가능하다는 점이 핵심