[Kotlin Deep Dive] 7. invoke 메소드, 전략 패턴, 인라이닝과 바이트코드

akim·2023년 1월 11일
0

Kotlin Deep Dive

목록 보기
7/9
post-thumbnail

1. invoke 메소드

함수 타입은 자바에서의 invoke 메서드를 구현하는 인터페이스라고 생각할 수 있다. 따라서 자바에서처럼 invoke 메서드를 따로 써줄 필요가 없으므로 함수 타입을 이용하면 더 짧게 코드를 쓸 수 있는 것이다.

2. 전략패턴

전략패턴은 어떤 로직에 대해 적절한 전략을 캡슐화 하여 이용하는 패턴이다.

로직을 전략에 따라 분리해두고 바꿔치기 한다면 당연히 코드 작성이 수월해질 것이다.

마치.. 알고리즘 문제를 풀 때 정렬할 때는 이 전략(코드)로, 검색할 때는 이 전략으로, 다 갖다가 조합만 하면 문제가 다 풀리는 것 같은 그런 맥락이다.

그러나 단점도 몇 가지 존재한다.

  • 객체의 수가 증가
  • 코드 복잡도 증가
  • 객체 사이의 결합도 증가

모든 디자인패턴이 그러하듯, 적절한 상황에 적절한 만큼을 잘 써야겠다.

3. 인라이닝과 바이트코드

함수를 호출하는 바이트코드 vs 함수 본문을 번역한 바이트코드

일반적인 상황에서는 함수를 호출하는 바이트코드로 컴파일한다. 이 경우 람다를 함수 인터페이스를 구현하는 무명 클래스로 감싸게 된다.

그러나 인라이닝을 하게 되면 함수 본문을 번역한 바이트코드로 컴파일되어, 본문에 의해 만들어지는 바이트코드는 그 람다를 호출하는 코드 정의의 일부분으로 간주되기 때문에 무명 클래스로 감싸지 않게 된다.

따라서 람다의 부가비용을 줄여줄 수 있게 된다.

profile
학교 다니는 개발자

0개의 댓글