프로그래밍/Scala

스칼라의 자료구조 공부중 - 자바와의 비교.

모지사바하 2015. 8. 6. 12:56

스칼라의 단방향 연결 리스트를 보다가,


자바로 먼저 구현해봐야겠다는 생각에 자바로 초간단 단방향 연결 리스트를 구현해보았다.


package kwo2002.java;

/**
* Created by kwo2002 on 2015-08-06.
*/
public class SingleNode<E> {
private SingleNode next;
private E e;

public SingleNode(E e) {
e = this.e;
}

public SingleNode(E e, SingleNode next) {
e = this.e;
next = this.next;
}

public void appendToTail(E e) {
SingleNode<E> end = new SingleNode<>(e);
SingleNode currentNode = this;
while (currentNode.next != null) {
currentNode = currentNode.next;
}

currentNode.next = end;
}

public SingleNode deleteNode(SingleNode head, E e) {
if (head.e.equals(e)) {
return head.next;
}

SingleNode n = head;
while (head.next != null) {
if (n.next.e.equals(e)) {
n.next = n.next.next;
return head;
}
n = n.next;
}

return head;

}
}


머리가 굳었는지 막상 구현해보려니 생각이 잘 나지를 않더라..


아무튼,


이번엔 스칼라의 단방향 연결 리스트를 보았다.


package kwo2002.scala

/**
* Created by kwo2002 on 2015-08-04.
*/
sealed trait List[+A]
case object Nil extends List[Nothing]
case class Cons[+A](head: A, tail: List[A]) extends List[A]

이걸로 끝이다. 


List 에 데이터를 추가하고 싶으면 


Cons("a", Cons("b", Nil))

위와 같이 하면된다.


자바에 비해 훨씬 간결하다. 


왜그럴까?



스칼라는 함수형 프로그래밍이고 순수 함수를 지향한다.


스칼라로 배우는 함수형 프로그래밍 中 - 

순수함수는 자료를 그 자리에서 변경하거나 기타 부수 효과를 수행하는 일이 없어야 한다. 따라서 함수적 자료구조는 정의에 의해 불변이 이다.


순수함수적 특성으로 인해 스칼라의 자료구조는 간단할 수 밖에 없다. 


반면, 자바에서는 불변이가 아니다. 즉, 값이 바뀐다는 뜻이다.


그래서 node 의 next 에 값이 있는지 등을 검사하고 마지막에 값을 삽입해야하는 것이다.