Flutter Inline

김민진·2024년 10월 7일
0

flutter_문법

목록 보기
5/6

Flutter Inline

inline fun performOperation(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
    return operation(a, b)
}

fun main() {
    val result = performOperation(5, 3) { x, y -> x + y }
    println(result)  // 출력: 8
}

코틀린의 Inline에는 2가지의 측면이 있다.

함수 호출 최적화:

inline 함수는 컴파일 시점에 호출부에 함수의 내용이 직접 삽입됩니다.
이로 인해 함수 호출에 따른 오버헤드가 줄어들어 성능이 향상될 수 있습니다.

람다 표현식과 함께 사용:

고차 함수에 inline을 사용하면 람다 표현식의 객체 생성을 피할 수 있습니다.

우리 Flutter 에서는 두번째 측면인 '객채 생성' 에 관점을 두자

사실 Flutter 에는 Inline 이 구체적으로 존재하지 않는다.

Flutter 를 처음 접하게 되면 .map().toList()를 자주 접할 수 있다.

아님말고

처음에는 왜 toList를 붙여야 .map이 동작하지 라고 고민했으나

추후 내부 동작을 이해하게 된다면

.map()을 통해 새로운 List 객체가 생성된다라고 이해하면 좋다.

해당 방법은 아래와 같은 단점을 가지고 있다.

중간 객체 생성
메모리 사용률 상승
성능을 저하

뭐 얼마나 미비할까 싶기는 하지만 저런 성능 하나하나가 모여서 우리에게는 60프레임을 줄 수 있지 않을까?

.map 보다는

foreach 혹은 for 문을 사용하도록 하자.

누군가 옆에서 .map으로 객체반환없이 사용한다면 뒤통수를 떄려주도록 하자

----수정------

나중에 내가 쓴 글을 읽어보니

인라인과 map.toList는 무슨 연관관계가 있길래 작성한걸까?

한번 다시 찾아보자 내가 기억할 수 있도록

위의 내용을 다시 보니

함수 호출에 따른 오버헤드

라는 내용이 있다.

map.toList
map
toList

2개의 함수호출이며 이에따른 오버헤드가 발생할 수 있는것이다.

하지만 이게 인라인과 무슨 연관관계일까?

인라인을 사용하게 된다면

2개의 함수를 직접적으로 호출하지 않으므로 조금의 오버헤드를 줄일 수 있는것이다.

('vm:prefer-inline')
List<U> mapToList<T, U>(Iterable<T> items, U Function(T) mapper) {
  return items.map(mapper).toList();
}

위 의 코드처럼 말이다.

근대 컴파일러가 너무 효율적으로 동작하기에..이런걸 하나하나 다 생각하며 개발하지 않아도 될거라고는 한다.

인라인이 필요하는 경우는
1. 성능 중심
2. 라이브러리 개발자
3. 저사양 타겟

등이라고 하는데.. 접하기 쉽지 않을수도 있겟다.

profile
dart,c#,java 개발자! 잡다하게 해서 문제될게 없다!

0개의 댓글