Fppis week 3 - codeport/scala GitHub Wiki
Class Hierarchy
μλ°μ λμΌν λΆλΆ
- μ μΈλ§ μ‘΄μ¬νκ³ κ΅¬νλΆκ° μ‘΄μ¬νμ§ μλ method, value, variable μ κ°μ§ ν΄λμ€λ
abstract
ν€μλλ₯Ό μ¬μ©νλ€.
abstract class Base{
def foo = 1 // ꡬνλΆκ° μ‘΄μ¬
def bar: Int // μ μΈλ§ μ‘΄μ¬
}
- base ν΄λμ€μ ꡬνλΆκ° μ‘΄μ¬νλ κ²½μ°λ λ°λμ
override
ν€μλλ₯Ό μ¬μ©νμ¬ μ¬μ μνλ€. - base ν΄λμ€μ ꡬνλΆκ° μ‘΄μ¬νμ§ μλ κ²½μ°(μ μΈλ§ μ‘΄μ¬νλ κ²½μ°)
override
ν€μλλ μ΅μ μ΄λ€.
calss Sub extends Base{
override def foo = 2 // override νμ
def bar = 3 // override μ΅μ
}
Programs
μλ°μ λ©μΈ λ©μλpublic static void main(String[] args){...}
μ ν΄λΉνλ μ€μΉΌλΌμ μ½λ
object Hello{
def main(args: Array[String]) = println("hello world!")
}
Dynamic Binding
μ€μΉΌλΌλ₯Ό ν¬ν¨ν Object-oriented μΈμ΄λ dynamic method dispatch λ₯Ό ꡬννλ€. μ΄κ²μ νΈμΆ λ μ€λΈμ νΈμ λ©μλκ° μ€ν μκ°μ κ²°μ λλ€λ κ²μ΄λ€.
μ€λΈμ νΈλ₯Ό κ³ μ°¨ν¨μ(higher-order function)λΌκ³ λΆλ₯Ό μ μλ?
κ³ μ°¨ν¨μ(higher-order function)μ μ€λΈμ νΈλΌκ³ λΆλ₯Ό μ μλ?
How Classes Are Organized
μ€μΉΌλΌλ μλ°μ λ§μ°¬κ°μ§λ‘ package
λ‘ λ€μμ€νμ΄μ€λ₯Ό ꡬλΆνλ€.
- fully qualified name: ν¨ν€μ§λͺ +ν΄λμ€(μ€λΈμ νΈ) μ΄λ¦
import
import week3.Rational // Rational νμ
λ§ import
import week3.{Rational, Hello} // Rational, Hello νμ
λ§ import
import week3._ // week3.* κ³Ό κ°μ(wildcard import)
Automatic Import
κΈ°λ³Έμ μΌλ‘ import λλ entityλ,
scala
ν¨ν€μ§java.lang
ν¨ν€μ§scala.Predef
μ±κΈν΄ μ€λΈμ νΈμ λͺ¨λ λ©€λ²
Scaladoc
www.scala-lang.org/api/current
Traits
Traitμ μλ°μ abstract classμ λΉμ·νμ§λ§, ν κ° μ΄μμ traitμ μμ λ°μ μ μλ€. ν€μλ with
λ₯Ό νμ©. ν΄λμ€κ° trait νλλ§μ μμ λ°λ κ²½μ°λ extends
ν€μλλ₯Ό μ¬μ©νλ€.
trait Planar {
def height: Int
def width: Int
def surface = height * width
}
κ°μ superνμ
μ κ°λ trait λ€μ stackable modification
μ μ§μνλ€.
Scala's Class Hierarchy
- μ΅μμ ν΄λμ€
scala.Any
AnyVal
: μλ°μ μμνμ (primitive),int
,long
,boolean
Unit
μμAnyVal
νμ μ΄λ€. (void)νμ΄κΈ° λλ¬Έ?AnyRef
: μλ°μ object νμ (λ νΌλ°μ€λ₯Ό κ°λνμ )String
,ScalaObject
,Iterable
Null
: λͺ¨λAnyRef
νμ μ μ΅νμ μλΈνμ ,null
μNull
νμ μ΄λ€.Nothing
: λͺ¨λ νμ μ μ΅νμ μλΈνμ .val z: Int = null
μ μλνμ§ μλλ€.(Int
νμ : AnyVal,Noting
νμ : AnyRef)
The Nothing Type
Nothing
Typeμ νμμ±
- λΉμ μμ’ λ£μμ νμ©(μμΈ)
- λΉ μ»¬λ μ
μ λνλ΄κΈ° μν¨:
Seq[Noting]
Exception
μμΈμ νμ μ Nothingμ΄λ€.
def error(msg: String) = throw new Error(msg) //> error: (msg: String)Nothing
Exercise
if(true) 1 esle false
μ νμ
μ? => AnyVal
Polymorphism
Cons-Lists
Nil
: λΉ λ¦¬μ€νΈλ₯Ό λνλ
Cons
: μμ(element)λ₯Ό ν¬ν¨νκ³ , λλ¨Έμ§μ 리μ€νΈλ₯Ό κ°λ¦¬ν€λ ν¬μΈν°λ₯Ό ν¬ν¨ [3][ ]
, [3][Nil]
κ³Ό κ°μ cellνν
Value Parameter
class Cons(val head: Int, val tail: IntList) extends IntList{...}
μμ±μμ val
μ μ¬μ©νλ©΄ (public) field μ²λΌ νμ© ν μ μλ€.
class Cons(_head: Int, _tail: IntList) extends IntList{
val head = _head
val tail = _tail
}
### Type Parameters
μμ Cons μμ `Int`λ‘λ§ νμ μ§λ κ²μ narrow νλ€. μ’ λ μΆμνμμΌμ, λ€μκ³Ό κ°μ΄ λ³κ²½νλ€.
```scala
trait List[T]
class Cons[T](val head: T, val tail: List[T]) extends List[T]
class Nil[T] extends List[T]