case class 2번째 이야기.

language/scala 2013.02.06 14:17 posted by dev.bistro

http://korean-nerdism.blogspot.kr/2012/12/scala-pattern-matching-case-class.html?spref=tw 를 보고 '아차' 놓친게 있나 보다.


CaseClassExample.scala

case class ClassExample(message: String)


ClassExample.scala

class ClassExample(message: String)

두개의 파일을 작성하고,  scalac 로 class파일을 생성하였다.


결과는 총 3개의 class파일이 나온다. CaseClassExample$ 가 컴패니언 클래스의 output으로 보인다. (마치 자바의 inner class처럼 $를 달고 

            1,481 CaseClassExample$.class

            3,901 CaseClassExample.class

              642 ClassExample.class


javap의 결과는 

C:\MyProject>javap ClassExample CaseClassExample$ CaseClassExample

Compiled from "ClassExample.scala"

public class ClassExample extends java.lang.Object{

    public ClassExample(java.lang.String);

}


Compiled from "CaseClassExample.scala"

public final class CaseClassExample$ extends scala.runtime.AbstractFunction1 implements scala.Serializable{

    public static final CaseClassExample$ MODULE$;

    public static {};

    public final java.lang.String toString();

    public CaseClassExample apply(java.lang.String);

    public scala.Option unapply(CaseClassExample);

    public java.lang.Object apply(java.lang.Object);

}


Compiled from "CaseClassExample.scala"

public class CaseClassExample extends java.lang.Object implements scala.Product,scala.Serializable{

    public static scala.Function1 andThen(scala.Function1);

    public static scala.Function1 compose(scala.Function1);

    public java.lang.String message();

    public CaseClassExample copy(java.lang.String);

    public java.lang.String copy$default$1();

    public java.lang.String productPrefix();

    public int productArity();

    public java.lang.Object productElement(int);

    public scala.collection.Iterator productIterator();

    public boolean canEqual(java.lang.Object);

    public java.lang.String _1();

    public int hashCode();

    public java.lang.String toString();

    public boolean equals(java.lang.Object);

    public CaseClassExample(java.lang.String);

}



companion class file 에서는 apply, unapply 가 보이고 original class file 에서는 copy, andThen등의 몇가지 메소드가 추가적으로 보임을 알 수 있다. 

신고

'language > scala' 카테고리의 다른 글

Functional Programming Principles in Scala 끝!  (1) 2013.06.04
Scala Tuple  (0) 2013.03.12
2.10을 위한 scala-ide plugin 재설치  (0) 2013.03.12
case class 2번째 이야기.  (0) 2013.02.06
Play framework IDE, Scala Build Sublime  (0) 2013.02.06
case class  (0) 2012.07.19


티스토리 툴바