블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형
트레이트에 추상 멤버를 정의한다.
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 키워드를 사용한다.
스칼라에서는 추상 타입은 항상 어떤 클래스나 트레이트의 멤버이다.
trait Abstract {
type T // 항상 트레이트나 클래스의 멤버다.
def transform(x: T): T
val initial: T
var current: T
}
타입 멤버를 쉽게 생각해서 타입에 대한 별칭(alias
)이라고 생각하면 된다.
타입 멤버를 사용하는 이유?
실제 이름이 너무 길거나 의미가 불명확할 때, 더 간단하고 의도를 명확하게 전달할 수 있다.
타입 멤버의 세부 내용 > 2020/02/23 - [Language/Scala] - Scala 추상 타입 (type T)
추상 val
val initial: String // 값은 지정하지 않는다.
추상 val은 이름과 타입은 있지만 값은 지정하지 않는다.
추상 val vs 추상 메소드
추상 val
: 사용할 때마다 같은 값을 얻을 수 있다.
추상 메소드(def
): 사용할 때마다 같은 값을 가질 수 있다는 보장이 없다.
class Concrete extends Abstract {
type T = String
override def transform(x: String): String = x + x // x 에 따라 값이 달라진다.
override val initial: T = "hi" // 항상 "hi" 라는 값으로 동일하다.
override var current: String = initial
}
def
는 변할 수 있기 때문에 val
을 def
로 오버라이드 할 수 없다.
val
은 변하지 않기 때문에 def
로도 오버라이드 할 수 있다.
abstract class Fruit {
val v: String // value의 v
def m: String // method의 m
}
abstract class Apple extends Fruit {
override val v: String
override val m: String // def 를 val 로 override 가 가능하다.
}
abstract class BadApple extends Fruit {
override def v: String // 오류. val 은 def 로 오버라이드 할 수 없다.
override def m: String
}
추상 val 초기화하는 방법 > 2020/02/23 - [Language/Scala] - Scala 추상 val 초기화
추상 var
추상 val
과 마찬가지로 이름과 타입만 사용한다.
trait AbstractTime {
var hour: Int
var minute: Int
}
차이점은 Getter
와 Setter
를 만들어준다. 위 AbstractTime
은 아래 코드와 동일하다.
trait AbstractTime {
var hour: Int // Getter
var hour_=(x: Int) // Setter
var minute: Int // Getter
var minute_=(x: Int) // Setter
}
반응형
'Language > Scala' 카테고리의 다른 글
Scala의 열거형(Enumeration type) (0) | 2020.02.23 |
---|---|
Scala 추상 타입 (type T) (0) | 2020.02.23 |
Scala 추상 val 초기화 (0) | 2020.02.23 |