NMP-Study / FunctionalProgrammingInScala

2 stars 0 forks source link

[스칼라+플레이] Chapter4. 클래스 / 객체 / 트레이트 #3

Closed duckcalf closed 5 years ago

iknowchang commented 5 years ago

스칼라 scala 스터디

클래스와 객체

* 객체 생성 방법
    * 클래스를 통한 인스턴스화
    * object 예약어를 통한 객체 생성
        * 스칼라 객체는 싱글톤으로 설계되어 있음
class A
val real1=new A
val real2=new A
object B

//println(real1)
//ScalaFiddle$A@1

//println(real2)
//ScalaFiddle$A@2

//println(A)
//ScalaFiddle.scala:6: error: not found: value A

//println(B)
//ScalaFiddle$B$@1
object HelloWorld {
  def main(args: Array[String]): Unit = {
    val car=new vehicle()
    println(car.price)
    println(car.hood)

    val apple=new Fruit("apple")
    println(apple.name)

    val dummy2=new dummy2("a","b")
    println(dummy2.a)
  }
}

class vehicle() {
  var price: Int=100000
  var hood: String="expensive hood"
}

class Fruit(input: String) {
    var name=input
}

class dummy(a:String,b:String)

case class dummy2(a:String,b:String)

// $scala HelloWorld
// 100000
// expensive hood
// apple
// a
* object 를 이용해 바로 객체를 생성해 버리고 main 동작
* class에는 생성자 없이 직접 맴버 변후에 값 명시
* 구현부 없애는 것도 가능  => 무슨 쓸모? => case 붙여서 사용 가능
* 객체 이름과 클래스 이름 같을 수 있음 (동반 객체)

상속

* JAVA의 상속과 거의 동일

트레이트와 추상 클래스

object HelloWorld {
   def main(args: Array[String]) {
      val pig=new Pig
      pig.eat
      pig.shout
      pig.fly
   }

   class Pig extends Animal with Flying with Eating {
         // trait method도 구현해야하는데....?
         // HelloWorld.scala:9: error: class Pig needs to be abstract, since method eat in trait Eating of type => Unit is not define
        def eat=println("쩝쩝")
       // abstract class 미구현 method는 꼭 구현해야한다. 
       def shout=println("꿀꿀")
   }

   abstract class Animal {
       def shout
   }

   trait Flying {
       def fly = println("납니다.")
   }
   trait Eating {
       def eat
   }

}

트레이트 쌓기