Kotlin Weekly

Kotlin Weekly # -383 "Kotlin 사용 주의점"

베블렌 2023. 12. 13. 09:17

12월 1주차에는 더나은 개발자가 되기 위해 Kotlin의 주의점에 관한 글입니다.

 

https://proandroiddev.com/kotlin-unknotting-from-realizing-anti-patterns-to-becoming-a-better-developer-c1dfa6c3bab6

 

Kotlin Unknotting —  From Realizing Anti-Patterns to Becoming a Better Developer

An Insightful Guide to Avoiding Common Kotlin Pitfalls and Writing Idiomatically Beautiful Code

proandroiddev.com

 

 

 

소개

Kotlin은 Java와의 상호운용성, 간결한 문법, 특히 null 가능성에 대한 강조 등으로 현대 소프트웨어 개발에서 인기 있는 언어가 되었습니다. 하지만 Kotlin을 사용하면서 개발자들이 종종 빠지는 함정들이 있습니다. 이 글에서는 그러한 함정들을 지적하고, 더 효율적이고, 가독성이 높으며, 유지 보수가 쉬운 Kotlin 코드를 작성하는 방법을 설명해줍니다.

 

내용

 

1. 널 가능성 오버로드 (Nullability Overload): Kotlin은 null에 대해 안전하게 다루지만, 너무 많은 null 검사는 코드를 복잡하게 만들 수 있습니다. 예를 들어, person?.name이 null인 경우 기본값을 제공하는 간단한 코드가 더 적합합니다.

// Instead of
val name: String? = person?.name?.let { it } ?: ""

// Use
val name = person?.name ?: "Default Name"

 

2. lateinit 남용: lateinit은 나중에 초기화를 약속하지만, 이는 런타임에 UninitializedPropertyAccessException 오류를 발생시킬 위험이 있습니다. 가능한 초기에 변수를 초기화하거나, lazy 초기화를 사용하는 것이 더 좋은 접근 방식입니다.

lateinit var lifeGoals: List<Goal> // Someday, I will initialize it...

 

3. 범위 함수 남용: 범위 함수 남용: Kotlin의 let, apply, also, run 같은 범위 함수는 각각에 맞는 사용 사례가 있습니다. let은 변환에, apply는 객체 구성에, also는 부가적인 효과에, runletapply의 조합에 사용하는 것이 좋습니다.

// 과도하게 사용한 예시
myObject.let { it.doThis() }.apply { doThat() }.also { println(it) }


// 1단계: myObject에 대한 변환 수행
val transformedObject = myObject.let { it.doThis() }

// 2단계: 상태 변경
transformedObject.apply { doThat() }

// 3단계: 현재 상태 출력
transformedObject.also { println(it) }

 

4. 성능 과잉: 큰 데이터셋을 다룰 때는 asSequence를 사용해 컬렉션 작업을 최적화합니다. 이는 여러 작업을 하나의 파이프라인으로 결합하여 성능을 향상시킵니다.

val numbers = listOf(1, 2, 3, 4, 5)
val result = numbers.asSequence()
                    .filter { it % 2 == 0 }
                    .map { it * 2 }
                    .toList()

 

* asSequence : Lazy Evaluation(지연 실)으로 중간 컬렉션 생성을 막아 최종 결과물만 받아 중간 단계에서 생성되는 임시 컬렉션의 메모리 사용을 줄이고, 전체 처리 과정에서 성능을 향상시킴

 

 

5. 가독성 및 유지 보수성: 일관된 코딩 스타일을 유지하고 복잡한 로직에 주석을 추가하여 코드를 더 쉽게 이해하고 유지보수할 수 있도록 합니다. Kotlin의 공식 스타일 가이드를 참조하는 것이 좋습니다.

 

6. 동시성 처리: 코루틴을 사용할 때는 적절한 예외 처리와 메인 스레드 차단을 방지하는 것이 중요합니다. 또한, 스레드 안전성을 가정하지 말고 명시적으로 처리하는 것이 좋습니다.

 

정리

이 글을 통해 Kotlin 개발 시 발생하기 쉬운 문제점들을 이해하고, 이를 피하여 더 효율적이고 가독성 높은 코드를 작성하는 방법을 배울 수 있습니다.

무엇보다 asSequence에 대한 정의만 알고있었는데 다시 상기시켜주는 글이였습니다.

 

 

 

 

http://kotlinweekly.net/

 

** Kotlin Weekly **

 

kotlinweekly.net