본문 바로가기
반응형

Kotlin184

[Kotlin] inline 사용법 (1) - 왜 inline function, class, property를 사용하는 걸까? 이번 포스팅에선 inline을 왜 사용하는지, 어떻게 사용하는지 알아보려고 한다. 이번 포스팅에서 전부 설명하겠지만, 이전 포스팅에 Kotlin 공식 문서에 있는 inline function, class, property 소개 글을 번역해 놓은 것이 있으니 한 번 보는 것도 좋다. inline이란? "Inline"이라는 용어는 프로그래밍에서 사용되는 개념으로, 주로 함수나 코드 블록을 호출하는 위치에 해당 함수 또는 코드 블록의 본문이 복사되어 실행되는 것을 의미합니다. 이렇게 하면 함수 호출의 오버헤드를 줄이고 성능을 향상시킬 수 있습니다. 일반적으로 함수를 호출하면 현재 실행 플로우는 호출된 함수로 이동하고, 해당 함수의 작업이 완료된 후에 호출한 곳으로 돌아옵니다. 이 과정에서 함수 호출의 추가적인.. 2023. 8. 13.
[Kotlin] Kotlin 공식 문서 번역 - 인라인 value 클래스 (Inline value classes) 인라인 value 클래스 (Inline value classes) 비즈니스 로직에서는 종종 어떤 유형 주위에 래퍼를 생성해야 할 필요가 있습니다. 그러나 이로 인해 추가적인 힙 할당으로 인한 런타임 오버헤드가 발생합니다. 게다가 래핑된 유형이 기본 유형인 경우 성능 저하가 심각해집니다. 왜냐하면 기본 유형은 일반적으로 런타임에 의해 강력하게 최적화되지만, 해당 래퍼는 특별한 처리를 받지 못하기 때문입니다. 이러한 문제를 해결하기 위해 Kotlin은 특별한 종류의 클래스를 소개합니다. 이 클래스는 인라인 클래스라고 불리며, 값 기반 클래스의 하위 집합입니다. 이들은 식별성이 없고 값만을 보유할 수 있습니다. 인라인 클래스를 선언하려면 클래스 이름 앞에 value 수정자를 사용하십시오: value class.. 2023. 8. 12.
[Kotlin] Kotlin 공식 문서 번역 - 인라인 함수 (Inline functions) 인라인 함수 (Inline functions) 고차 함수를 사용하면 특정 런타임 오버헤드가 발생합니다. 각 함수는 객체이며, 클로저를 캡처합니다. 클로저는 함수 본문에서 접근할 수 있는 변수의 범위입니다. 메모리 할당(함수 객체 및 클래스 모두)과 가상 호출은 런타임 오버헤드를 도입합니다. 하지만 많은 경우에 이러한 종류의 오버헤드는 람다 표현식을 인라인화하여 제거할 수 있습니다. 아래에 표시된 함수는 이러한 상황의 좋은 예시입니다. lock() 함수는 호출 위치에서 쉽게 인라인화될 수 있습니다. 다음과 같은 경우를 고려해보세요: lock(l) { foo() } 매개변수에 대한 함수 객체를 생성하고 호출을 생성하는 대신, 컴파일러는 다음과 같은 코드를 생성할 수 있습니다: l.lock() try { fo.. 2023. 8. 12.
[Kotlin] Kotlin 공식 문서 번역 - 고차 함수와 람다 (High-order functions and lambdas) 고차 함수와 람다 (High-order functions and lambdas) 코틀린 함수는 퍼스트 클래스 함수로, 변수와 데이터 구조에 저장되며 다른 고차 함수로 전달되고 전달될 수 있습니다. 함수에 대해 다른 비 함수 값에 가능한 모든 작업을 수행할 수 있습니다. 이를 용이하게 하기 위해 정적으로 타입이 지정된 프로그래밍 언어인 Kotlin은 함수를 나타내기 위한 함수 타입 패밀리를 사용하며, 람다 표현식과 같은 특수한 언어 구조를 제공합니다. 고차 함수 (Higher-order functions) 고차 함수는 함수를 매개변수로 받거나 함수를 반환하는 함수입니다. 컬렉션에 대한 함수형 프로그래밍 관용구인 폴드(fold)는 고차 함수의 좋은 예입니다. 초기 누산기 값과 결합 함수를 받아 현재 누산기 .. 2023. 8. 12.
[Kotlin] Extensions 사용법 총 정리 (1) - Extensions란? 이번 포스팅에선 Kotlin의 Extensions에 대해 알아보려고 한다. Extensions라고 쓴 이유는 Extension Functions (확장 함수), Extension Properties (확장 프로퍼티) 총 2가지 종류가 있기 때문이다. 코틀린 공식 문서에서 소개하는 Extensions를 번역해서 소개하려고 한다. Extensions Kotlin은 확장(extension)이라는 특별한 선언을 통해 클래스나 인터페이스에 새로운 기능을 추가할 수 있는 기능을 제공합니다. 이를 통해 클래스를 상속받거나 Decorator와 같은 디자인 패턴을 사용하지 않고도 기능을 확장할 수 있습니다. 예를 들어, 수정할 수 없는 제3자 라이브러리의 클래스에 대해 새로운 함수를 작성할 수 있습니다. 이러한 함수들은.. 2023. 6. 18.
[Kotlin] Sealed Class, Interface 사용법 (1) - Sealed Class, Interface란? 이번 포스팅에선 코틀린 공식 문서에서 sealed class와 interface를 설명한 것을 번역해보려고 한다. 요즘 sealed class와 interface에 관심이 생겨서 정리하게 됐다. 이전에 포스팅한 Exception 대신 Sealed Class를 사용하자 글도 시간있으면 한 번 보는 걸 추천한다. Sealed classes and interfaces sealed class와 interface는 상속에 대한 더 많은 제어를 제공하는 제한된 클래스 계층을 나타냅니다. sealed class의 모든 직접 하위 클래스는 컴파일 시간에 알려져 있습니다. 다른 하위 클래스는 모듈 및 패키지 외부에 나타날 수 없습니다. 예를 들어, 제3자 클라이언트는 당신의 sealed class를 자신의 코드에서 확장.. 2023. 6. 12.
[Kotlin] 공식 코틀린 코딩 컨벤션 소개 이번 포스팅에선 코틀린 공식 홈페이지에서 소개하고 있는 코틀린 코딩 컨벤션을 정리하려고 한다. 단순 번역하는 것도 있지만 상세한 설명을 추가해보려고 한다. 가보자! 코틀린 코딩 컨벤션 일반적으로 알려진 쉽게 따라갈 수 있는 코딩 규칙은 Kotlin을 사용하는 프로젝트에 필수적입니다. Kotlin 프로젝트에서 코드 스타일과 코드 구성에 대한 가이드라인을 제공합니다. IDE에서 스타일 구성하기 (Configure style in IDE) Kotlin에 대해 가장 인기 있는 두 개의 IDE 인 IntelliJ IDEA와 Android Studio는 코드 스타일에 대한 강력한 지원을 제공합니다. 이들을 구성하여 지정된 코드 스타일과 일관되게 코드를 자동으로 포맷할 수 있습니다. - 스타일 가이드 적용하기 Set.. 2023. 6. 6.
[Kotlin] MockK 사용법 (4) - Mock 객체 선언 해제(unmockkObject, unmockkStatic, unmockkConstructor, unmockkAll) 이번 포스팅에선 mock 객체를 해제하는 방법에 대해 알아보겠다. mock 객체 해제(= unmock)란? mock 객체를 해제한다는 건 mock 객체 이전 일반 객체로 돌려놓는다는 의미다. unmock은 언제 사용해야 할까? 이전 포스팅에서 소개한 mockkObject, mockkStatic, mockkConstructor를 스터빙하면 테스트 전체에 영향이 가기 때문에 각 테스트가 끝나면 unmock을 해줘야 한다. 아래 테스트를 보자. 전부 통과해야 하는 테스트다. // LocalDate.now(): 2023-05-17 @Test fun testMockkStatic1() { mockkStatic(LocalDate::class) every { LocalDate.now() } returns LocalDa.. 2023. 5. 17.
[Kotlin] MockK 사용법 (3) - Mock 객체 선언 방법 (mockkClass, mockkObject, mockkStatic, mockkConstructor) 이번 포스팅에선 이전 포스팅에서 끝내지 못한 Mock 객체 선언 방법을 이어서 정리하려고 한다. mockkClass 클래스를 기반으로 mock 객체를 만들 때 사용한다. mockk는 제네릭을 사용하는 반면 mockkClass는 Class를 사용한다. // mockkClass private val userService = mockkClass(UserService::class) // mockk private val userService = mockk() 사용방법은 mockk와 동일하다. @Test fun mockkTest() { val userService = mockkClass(UserService::class) every { userService.getUser() } returns null assertN.. 2023. 5. 15.
반응형