본문 바로가기

Programming/Scala

Scala - apply 함수는 무슨 일을 하는 것일까?






Scala 언어에서 각종 라이브러리마다 공통되는 함수가 존재하는데, apply 라는 녀석이다.


apply 라는 녀석은 말 그대로 어떤 함수를 적용 시킨다는 의미인데, 자세히 이야기 하면, apply 와 함께 들어오는 인자에 대해서 어떤 함수를 적용 시킨다는 뜻이다.


가령 예를 들어서


아래와 같은 코드가 있다고 하자.



f1 은 x 와 y 두 정수를 받아서 합쳐서 그 값을 돌려주는 함수이다.


f1.apply(2,3) 을 하게 되면 이 f1 이라고 정의된 함수에 2,3 이라는 인자를 적용해서 함수의 역할을 하라는 뜻이다.

여기서 신기한 것이 우리는 자연스럽게 f1(2,3) 이라고 호출하고 싶다. 왜냐하면, f1.apply(2,3) 은 좀 자연스럽지 않기 때문이다.

여기서 f1 은 함수이지만 스칼라 언어에서 역시 객체로 인식이 된다.

그렇기 때문에 객체지향 언어에서는 당연히 object.method 형식으로 메소드가 호출 되어야 하는 것이 당연하다.

하지만 스칼라에서는 이 객체지향 언어와 함수형 언어의 gap 을 줄이기 위해 왠만한 object 클래스에 apply함수가 구현되어 있다.


표준적인 스칼라 object 클래스를 살펴보기 전에 아래와 같은 코드도 한 번 살펴보자.


그리고 List 의 apply 는 어떤 식으로 구현되어 있나 테스트를 해보자.


보는 바와 같이 List 의 apply 함수는 List 의 인스턴스를 생성하고 그 인스턴스에 1,2,3 정수를 입력하여 돌려준다.


이런 식으로 스칼라 언어에서의 apply 함수는 객체와 함수의 격차를 줄여주는 편리한 기능이라고 볼 수 있다.