case class
는 주로 패턴매칭을 위해 쓰임. 상세한 enum같은 거랄까?- 어떤 class의 static member는 같은 이름의 companion object을 같이 만들어서 처리.
- class A() { non-static } / object A { static definitions }
- Prefer composition over inheritance
- Trait은 composition을 구현하기 아주 용이함 (multiple inheritance case)
- trait은 어떤 객체의 성질을 표현하기 좋음
- 이 객체가 이러이러한 성질을 가진다 - 를 java의 interface보다 더 유연하게 기술할 수 있음.
- trait mixin → 성질의 composition!이다.
- interface에 비해 작성 부담이 덜하다.
- trait을 작성하면서 설계와 함께 코딩을 진행하는 느낌이랄까?
- Scala는 따로 생성자가 없고, class 정의 자체가 생성자임. ⇒ 생성자에서 함수 정의를 다 하는 꼴.
- Protobuf 자주 이용하면 좋을듯 (scalaPb)
- serialization in scala/java
- serializable class must be defined as
final
, and should only contain serializable classes- final ⇒ 그 클래스가 더이상 자식에 의해 상속될 수 없음.
- 반면, 그 클래스가 어떤 부모 클래스를 상속한다면, 부모 클래스에는 당연히 final 이 붙으면 안되겠지?
- the class should extend java.io.Serializable
- serializable class must be defined as
- Multiple constructor
- apply() function의 overloading으로 해결 link
- 자바에서 커먼 펑션 쓸거면 interface 정의 후 inheritance hierarchy를 써야되는데 매우 비효율적임. Scala에서는 바로 trait에 함수 구현해도 됨. 필요하면 override!
/
The Blog of Jinho Ko
/
Computer science
/
Programming
·
1 min read
Scala Project를 수행하며 배운 것들