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 메서드이다.

반응형