class
- java의 class와 동일하다고 보면 되나, primary 생성자는 없다.
- primary 생성자는 class Dog(legs:Int, name:String){ } 로 정의에서 끝난다.
=> legs,name은 val로 자동생성된다.
- primary생성자의 body는 class 안에 아무데나 쓰면 된다.
- overload 생성자는 def this(legs:Int)와 같은식으로 명시하면 된다.
object
- companion object와 stand_alone object 가 존재한다.
- companion object는 java의 static함수를 모아놓은 것이라고 생각하면 된다.
동일한 이름의 class가 존재한다.
- stand alone object는 독립적으로 존재하는데 보통
def main(args:Array[String]) { } 을 포함하는 용도로 사용된다.
trait
- java의 interface와 유사하다고 보면되나, implements 키워드 대신 항상 extends키워드를 쓴다.
- method를 구현할 수 있다. (java Interface도 원래는 abstract함수만 되나, 1.8부터 body구현 지원)
- 인스턴스 생성시에 with 키워드로 바로 적용이 가능하다. (복잡하겠군요.. 인스턴스마다 다른 특성을 지니겠네요)
- extends Trait 해서 함수 오버라이드 시에.. def 앞에 override 키워드 꼭 필요.
class 인스턴스의 접근성
- class Dog{ var sum=0 } 일 경우 val a = new Dog 이 안됨. 단 var a일 경우.. a.sum+=1 은 됨.
- class Dog{ private sum=0} 일 경우 val a = new Dog이 됨. s.sum +=1 이 안됨.
def의 접근성. =이 type을 의미함.
scala> def h = {"hello"} h는 hello String 리턴.
scala> def g {"hello"} g는 리턴없음. 즉 Unit리턴.
scala> def f:Unit = "hello" g와 동일.