티스토리 뷰
반응형
apply 메서드를 선언하면 해당 객체의 인스턴스는 apply 메서드라고 명시하지 않아도 파라미터를 넣는 형식으로 사용할 수 있다.
예를 들어
class ApplyTestClass {
def apply(): Int = 1
}
라고 정의한 후에 아래와 같이 코딩하면
val applyTestClass = new ApplyTestClass()
println(applyTestClass())
1을 출력하게 된다.
소괄호가 아닌 중괄호를 사용해도 되는데 이는 파라미터가 없으면 에러가 발생한다.
val applyTestClass = new ApplyTestClass()
println(applyTestClass{}) // Too many arguments error
때문에
class ApplyTestClass {
def apply(a: Int): Int = a
}
이라고 정의한 후에 아래와 같이 코딩할 수 있고
val applyTestClass = new ApplyTestClass()
println(applyTestClass{1})
1을 출력하게 된다.
실제 사용되고 있는 예를 보자.
val list: List[Int] = List(1)
println(list(0))
위에 있는 코드는 두 개의 apply 메서드가 사용되고 있는데 하나는 첫 번째 줄의 List(1)이고 다른 하나는 두 번째 줄의 list(0)이다.
첫 번째 줄의 apply 메서드는 List의 짝 객체에 정의되어 있어 1을 가지고 리스트 객체를 생성하도록 정의한 apply 메서드이고 두 번째 줄의 apply 메서드는 리스트에서 파라미터로 들어가 있는 0번째 값을 반환하라고 정의된 apply 메서드이다.
반응형
'scala' 카테고리의 다른 글
[Scala] sealed 제어자 (0) | 2018.06.23 |
---|---|
[Scala] unapply 메서드 (0) | 2018.05.05 |
[Scala] val, var, def의 차이 (0) | 2018.02.28 |
[Scala] 동반 객체(Companion Object) (0) | 2017.12.24 |
[Scala] Option (0) | 2017.11.11 |
댓글