티스토리 뷰

scala

[Scala] apply 메서드

sungjine 2018. 3. 24. 11:43
반응형

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
댓글
반응형
최근에 올라온 글
Total
Today
Yesterday
글 보관함
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31