Scala의 열거형 스칼라에는 경로 의존 타입 (path-dependent type)을 활용한 열거형(enumeration type)이 있다. 경로 의존 타입과 관련된 추상 타입의 상세 내용 > 2020/02/23 - [Language/Scala] - Scala 추상 타입 (type T) 스칼라의 Enumeration 을 이용한다. (패키지: scala.Enumeration) object Color extends Enumeration { // scala.Enumeration val Red = Value val Blue = Value val Green = Value } 짧게 작성하는 것도 가능하다. object Color extends Enumeration { val Red, Blue, Green = Va..
추상 타입 추상 타입을 이용하면 선언 시점에서 어떤 타입인지 알려지지 않은 타입을 참조할 수 있다. 추상타입을 사용하지 않는 아래 예제를 보면 class Food abstract class Animal { def eat(food: Food) } class Grass extends Food class Cow extends Animal { // override def eat(food: Grass) {} // 파라미터 타입이 다르기 때문에 오버라이드 할 수 없다. override def eat(food: Food) {} } 동물(Animal)은 음식(Food)을 먹는다. 소(Cow)는 풀(Grass)을 먹는다. (소는 동물을 상속받고, 풀은 음식을 상속받는다) 하지만, 파라미터가 다르기 때문에 Animal을 ..
추상 val 초기화시 문제점 아래와 같이 (추상 val을 가진) 트레이트를 인스턴스화하여면, 추상 val의 정의를 구현해야 한다. trait RationalTrait { val numerArg: Int val denomArg: Int require(denomArg != 0) } 위 예제(트레이트)는 분수를 표현하는 트레이트이다. (numerArg: 분자, denomArg: 분모) 따라서, denomArg 는 0이 될 수 없다. 만약 위 Rational 이 트레이트(Trait) 가 아닌 클래스였다면, new Rational(expr1, expr2) 와 같이 구현할 수 있다. new Rational(expr1, expr2) 실행 순서 expr1, expr2 식을 계산한다. Ratinal()을 초기화 한다. ..
트레이트에 추상 멤버를 정의한다. trait Abstract { type T def transform(x: T): T val initial: T var current: T } 타입멤버 (T), 메소드 (transform), val(initial), var(current) class Concrete extends Abstract { type T = String override def transform(x: String): String = x + x override val initial: T = "hi" override var current: String = initial } 타입 멤버 (T) 스칼라에서 추상 타입은(abstract type) 클래스나 트레이트의 멤버로 정의없이 선언만된 타입이다. type ..