욱'S 노트

Scala - 통합 타입 본문

Programming/Scala

Scala - 통합 타입

devsun 2016. 11. 1. 10:49

스칼라에서는 모든 타입이 객체이다. 스칼라에서는 클래스 기반으로 타입정의를 하기 때문에 모든 값은 클래스의 객체이다.

스칼라의 모든 클래스는 scala.Any의 서브클래스이다. 그리고 scala.Any를 직접적으로 상속받는 두 개의 클래스가 있는데, scala.AnyVal과 scala.AnyRef이다. 이름에서 연상되듯이 value 클래스와 reference 클래스이다. 모든 value 클래스들은 기정의되어 있으며 자바와 같은 언어의 프리미티브 타입과 유사하다. 나머지 모든 클래스는 reference 타입으로 정의된다. 만약 우리가 클래스를 정의한다면 기본적으로 레퍼런스 타입이며 scala.AnyRef의 서브 클래스가 된다. 모든 유저가 정의하는 클래스는 암묵적으로 scala.ScalaObject를 상속한다. 만약 JRE 환경에서 스칼라를 구동한다면 scala.AnyRef는 java.lang.Object와 일치한다. 

import scala.collection.mutable

object UnifiedTypes extends App {
val set = new mutable.LinkedHashSet[Any]

set += "This is a String"
set += 732
set += 'c'
set += true
set += main _

val iter:Iterator[Any] = set.iterator

while(iter.hasNext) {
println(iter.next.toString)
}
}

자바를 해봤다면 object라는 키워드가 생소할텐데 이는 싱글턴 객체임을 의미한다. 로컬변수로 LinkedHashSet을 선언하고 set에 다양한 엘리먼트들을 추가하였다. 그리고 모든 엘리먼트들의 toString 메소드를 호출하여 해당 결과를 콘솔로 출력해보았다. 위의 예제에서 자바의 프리미티브로 보이는 모든 값들이 스칼라에서는 객체임을 알 수 있다. 아래는 출력결과이다.

This is a String

732

c

true

<function1>


출처 : http://docs.scala-lang.org/tutorials/tour/unified-types

'Programming > Scala' 카테고리의 다른 글

Scala - 익명 함수  (0) 2016.11.02
Scala - 믹스인 클래스 컴포지션  (0) 2016.11.01
Scala - 트래잇  (0) 2016.11.01
Scala - 클래스  (0) 2016.11.01
Scala - 소개  (0) 2016.10.21
Comments