case class는 일반적으로 패턴 매치, 데이터의 모델링, 간단한 클래스 형태로 사용하기 쓰인다.


case object는 serializable을 상속함으로서 파일 저장/통신에 유용하다. 




scala> object A

defined object A


scala> import java.io._

import java.io._


scala> val bos = new ByteArrayOutputStream

bos: java.io.ByteArrayOutputStream =


scala> val oos = new ObjectOutputStream(bos)

oos: java.io.ObjectOutputStream = java.io.ObjectOutputStream@2f85d223


scala> oos.writeObject(A)

java.io.NotSerializableException: A$

  at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)

  at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)

  ... 50 elided


scala> A.asInstanceOf[Serializable]
java.lang.ClassCastException: A$ cannot be cast to scala.Serializable
  ... 48 elided

scala> A
res3: A.type = A$@5354bfce


case object로 선언해본다.



scala> case object A
defined object A


scala> import java.io._

import java.io._


scala> val bos = new ByteArrayOutputStream

bos: java.io.ByteArrayOutputStream =


scala> val oos = new ObjectOutputStream(bos)

oos: java.io.ObjectOutputStream = java.io.ObjectOutputStream@2f85d223


scala> oos.writeObject(A)

에러 발생 없음

scala> A.asInstanceOf[Serializable]
res1: Serializable = A

에러 발생하지 않음

scala> A
res2: A.type = A


Posted by '김용환'
,