funprog / funbot

MIT License
5 stars 2 forks source link

DiceBot 클래스 case 클래스로 변경 #36

Closed jwChung closed 8 years ago

jwChung commented 8 years ago

Programming Sala (2nd)책에서 case 클래스를 사용하면 아래와 같은 이점이 있다고 설명합니다.

While there is no class body for Point, another feature of the case keyword is the compiler automatically generates several methods for us, including the familiar to String, equals, and hashCode methods in Java. The output shown for each point, e.g., Point(2.0,0.0), is the toString output. The equals and hashCode methods are difficult for most developers to implement correctly, so autogeneration is a real benefit. When we asked if p00 == p20 and p20 == p20b, Scala invoked the generated equals method. This is in contrast with Java, where == just compares references. You have to call equals explicitly to do a logical comparison. A final feature of case classes we’ll mention now is that the compiler also generates a companion object, a singleton of the same name, for each case class (in this case, object Point).

DiceBot 클래스가 이런 이점을 무시할 필요가 없다고 생각합니다. companion object 을 자동으로 만들어 주면, 아래와 같이 new 연산자 없이 사용할 수 있습니다.

// 기존
new DiceBot(new Random)

// case class 적용
DiceBot(new Random)
younggi commented 8 years ago

저는 case 클래스의 기능이 필요할 때 까지는 DiceBot에 case 클래스 적용을 미뤘으면 하는 의견이 있는데, 어떨까요...

myeesan commented 8 years ago

현재로써는 new 키워드를 제거하는 용도 외에는 case class의 필요성이 없네요. 저도 필요한 시점까지 미루면 어떨까 합니다.

jwChung commented 8 years ago

의견 감사합니다. 동의합니다. 이 이슈는 닫도록 하겠습니다. @younggi @myeesan