-
Notifications
You must be signed in to change notification settings - Fork 36
Fppis week 3
Brandon JeongYeol Choi edited this page Aug 12, 2013
·
2 revisions
자바와 동일한 부분
- 선언만 존재하고 구현부가 존재하지 않는 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 옵션
}자바의 메인 메소드public static void main(String[] args){...}에 해당하는 스칼라의 코드
object Hello{
def main(args: Array[String]) = println("hello world!")
}스칼라를 포함한 Object-oriented 언어는 dynamic method dispatch 를 구현한다. 이것은 호출 될 오브젝트의 메소드가 실행 시간에 결정 된다는 것이다.
오브젝트를 고차함수(higher-order function)라고 부를 수 있나?
고차함수(higher-order function)을 오브젝트라고 부를 수 있나?
스칼라는 자바와 마찬가지로 package로 네임스페이스를 구분한다.
- fully qualified name: 패키지명+클래스(오브젝트) 이름
import week3.Rational // Rational 타입만 import
import week3.{Rational, Hello} // Rational, Hello 타입만 import
import week3._ // week3.* 과 같음(wildcard import)기본적으로 import 되는 entity는,
-
scala패키지 -
java.lang패키지 -
scala.Predef싱글턴 오브젝트의 모든 멤버
www.scala-lang.org/api/current
Trait은 자바의 abstract class와 비슷하지만, 한 개 이상의 trait을 상속 받을 수 있다. 키워드 with를 활용. 클래스가 trait 하나만을 상속 받는 경우는 extends 키워드를 사용한다.
trait Planar {
def height: Int
def width: Int
def surface = height * width
}같은 super타입을 갖는 trait 들은 stackable modification을 지원한다.
- 최상위 클래스
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)
Nothing Type의 필요성
- 비정상종료에서 활용(예외)
- 빈 컬렉션을 나타내기 위함:
Seq[Noting]
예외의 타입은 Nothing이다.
def error(msg: String) = throw new Error(msg) //> error: (msg: String)Nothingif(true) 1 esle false의 타입은? => AnyVal