함수 타입은 자바에서의 invoke
메서드를 구현하는 인터페이스라고 생각할 수 있다. 따라서 자바에서처럼 invoke
메서드를 따로 써줄 필요가 없으므로 함수 타입을 이용하면 더 짧게 코드를 쓸 수 있는 것이다.
전략패턴은 어떤 로직에 대해 적절한 전략을
캡슐화
하여 이용하는 패턴이다.
로직을 전략에 따라 분리해두고 바꿔치기 한다면 당연히 코드 작성이 수월해질 것이다.
마치.. 알고리즘 문제를 풀 때 정렬할 때는 이 전략(코드)로, 검색할 때는 이 전략으로, 다 갖다가 조합만 하면 문제가 다 풀리는 것 같은 그런 맥락이다.
그러나 단점도 몇 가지 존재한다.
모든 디자인패턴이 그러하듯, 적절한 상황에 적절한 만큼을 잘 써야겠다.
함수를 호출하는 바이트코드 vs 함수 본문을 번역한 바이트코드
일반적인 상황에서는 함수를 호출하는 바이트코드로 컴파일한다. 이 경우 람다를 함수 인터페이스를 구현하는 무명 클래스로 감싸게 된다.
그러나 인라이닝을 하게 되면 함수 본문을 번역한 바이트코드로 컴파일되어, 본문에 의해 만들어지는 바이트코드는 그 람다를 호출하는 코드 정의의 일부분으로 간주되기 때문에 무명 클래스로 감싸지 않게 된다.
따라서 람다의 부가비용을 줄여줄 수 있게 된다.