연습 문제 2.2: 함수형 스택
이 연습 문제에서는 원소를 내부에 저장하되, 후입선출 순서로 꺼낼 수 있는 데이터 타입인 스택을 작성해보자.
함수형 원칙에 따라 스택은 불변이어야 한다. 즉, 원소를 푸시하면 새 스택이 반환되고 팝하면 팝한 원소와 새 스택 인스턴스가 들어 있는 튜플(쌍)이 반환된다. 다음 예제 코드를 보라. 이 코드는 여러분의 FunStack 구현과 함께 제대로 작동해야 한다.
@Test
fun `push into the stack`(){
val stack1 = FunStack<Char>()
val stack2 = stack1.push('A')
expectThat(stack1.size()).isEqualTo(0)
expectThat(stack2.size()).isEqualTo(1)
}
@Test
fun `push push pop`(){
val (b, stack) = FunStack<Char>()
.push('A')
.push('B')
.pop()
expectThat(stack.size()).isEqualTo(1)
expectThat(b).isEqualTo('B')
}