프로그래밍 언어/Kotlin 기초

Kotlin에서 for문 안에 함수를 정의해도 괜찮을까?

뿌꾸 빵 2025. 5. 9. 15:56
728x90
반응형

나는 알고리즘 문제 풀이를 하면서 로컬 함수를 정의하는 걸 좋아한다.

게다가 Kotlin에서는 for 루프 내부에 로컬 함수를 정의할 수 있다.

이 기능은 특정 반복문 블록 내에서만 사용하는 헬퍼 함수의 스코프를 제한할 수 있어, 코드 구조상 유용한 경우가 있다.

for (item in items) {
    fun process(value: Int): Boolean {
        return value % 2 == 0
    }
    if (process(item)) { /* ... */ }
}

 


for문 안에 함수를 정의하였을 때의 장점

1. 캡슐화

반복문에서만 쓰이는 로직을 해당 블록 안에 숨김으로써, 외부 스코프를 깔끔하게 유지할 수 있다.

2. 가독성 향상

복잡한 처리를 함수로 추출하면 반복문이 간결해지고 이해하기 쉬워진다.

3. 스코프 제한

로컬 함수는 루프 바깥에서 접근할 수 없어 실수나 오용을 방지할 수 있다.


for문 안에 함수를 정의하였을 때의 단점

1. 퍼포먼스 이슈

루프를 돌 때마다 새로운 함수 인스턴스가 생성된다.

JVM 기반의 Kotlin에서는 불필요한 객체 생성이 성능에 영향을 줄 수 있다.

2. 재사용 불가

로컬 함수는 해당 루프 안에서만 사용할 수 있어, 다른 곳에서 같은 로직이 필요해도 재사용이 어렵다.

3. 테스트 불가

로컬 함수는 외부에서 접근할 수 없기 때문에 단위 테스트 작성이 불가능하다.

4. 중복 선언

루프가 여러 번 반복될수록 함수가 매번 새롭게 정의되므로, 메모리와 컴파일러 최적화 측면에서도 비효율적일 수 있다.


결론: 가능하면 루프 밖에 정의하자

가능하면 루프 밖에 정의하거나, 람다 혹은 헬퍼 클래스로 분리하는 것을 권장한다.

private fun 또는 inline 함수로 분리하면 성능 저하 없이 최적화 가능하다.

 

 

 

 

 

 

 

728x90
반응형