Refactoring to Expressive Kotlin
KotlinConf’24
권혁준
Slide 2
Slide 2 text
No content
Slide 3
Slide 3 text
No content
Slide 4
Slide 4 text
No content
Slide 5
Slide 5 text
No content
Slide 6
Slide 6 text
No content
Slide 7
Slide 7 text
No content
Slide 8
Slide 8 text
`hikariDataSource` function name refactoring
→ createHikariDataSource
→ convertToHikariDataSource
→ toHikariDataSource
→ hikariDataSourceFrom
→ hikariDataSourceFor
Slide 9
Slide 9 text
Naming
- Naming Refactoring은 왜 필요할까?
Slide 10
Slide 10 text
Naming
Slide 11
Slide 11 text
Naming
Slide 12
Slide 12 text
Naming
- 올바른 Naming 규칙은?
Slide 13
Slide 13 text
Naming
- 서술적인 이름 짓기
- 명확성
- 기존에 약속된 naming 스타일에 맞추기
- 변수는 특정적인 단어, 함수는 동사 선호
Slide 14
Slide 14 text
this
this 가 쓰이는 상황 this 의미
class 내부 class 현재 객체를 참조
확장 함수 내부 . 왼쪽에 전달 된 리시버 파라미터 참조
Slide 15
Slide 15 text
this
Slide 16
Slide 16 text
this
Slide 17
Slide 17 text
this
Slide 18
Slide 18 text
Kotlin - generics
- Generics는 코드의 재사용성과 유연성을 높이기 위해
사용
- Generics를 사용함으로써 , 다양한 타입의 객체를 다룰 수
있는 코드를 작성할 수 있다. 이를 통해 타입 안정성을
유지하면서도 일반화된 코드를 작성할 수 있다.
Slide 19
Slide 19 text
Kotlin - generics
예제1 - Combine
Slide 20
Slide 20 text
Kotlin - generics
예제1 - Combine
Slide 21
Slide 21 text
Kotlin - generics
예제1 - Combine
Slide 22
Slide 22 text
Kotlin - generics
예제1 - Combine
Slide 23
Slide 23 text
Kotlin - generics
예제2 - Channel
Slide 24
Slide 24 text
Kotlin - generics
예제2 - Channel
private val _viewEvent = Channel>()
val viewEvent: ReceiveChannel> = _viewEvent
fun viewEvent(content: Any) {
viewModelScope.launch(BaseCoroutine.
default) {
_viewEvent.send(Event(content))
}
}
Slide 25
Slide 25 text
Kotlin - generics
예제2 - Channel
private val _viewEvent = Channel>()
val viewEvent: ReceiveChannel> = _viewEvent
fun viewEvent(content: Any) {
viewModelScope.launch(BaseCoroutine.
default) {
_viewEvent.send(Event(content))
}
}
Slide 26
Slide 26 text
Kotlin - generics
Slide 27
Slide 27 text
Kotlin - generics
- 무공변성 : 기본 Generic.
- out (공변성) : 제네릭 타입 매개변수가 반환 타입으로
사용될 때 지정하며, 하위 타입으로 변환될 수 있습니다.
- in(반공변성) : 제네릭 타입 매개변수가 매개변수로 사용될
때 지정하며, 상위 타입으로 변환될 수 있습니다.
Slide 28
Slide 28 text
Kotlin - generics
out (공변성)
- 타입 매개변수가 생산(produce) : 반환타입으로 사용
- 하위 타입 : 타입 매개변수는 하위 타입으로 취급 가능
Slide 29
Slide 29 text
Kotlin - generics
out
데이터 생산(read) / 하위 타입
Slide 30
Slide 30 text
Kotlin - generics
in (반공변성)
- 타입 매개변수가 소비(consume) : 매개변수로 사용될 때
- 상위 타입 : 타입 매개변수는 상위 타입으로 취급 가능
Slide 31
Slide 31 text
Kotlin - generic function
in
데이터 소비 / 상위 타입
Slide 32
Slide 32 text
Kotlin - generics
where
Slide 33
Slide 33 text
Kotlin - generics
where
Slide 34
Slide 34 text
Kotlin - generics
where
Slide 35
Slide 35 text
inline function
Slide 36
Slide 36 text
inline function
Slide 37
Slide 37 text
inline function
lambda function은 생성되는 시점에 무명 class 객체가 생성.
inline을 붙여주면, 방지 가능
Slide 38
Slide 38 text
noinline function
Slide 39
Slide 39 text
Scope function
객체의 범위(scope)에서 코드를 실행하거나 객체를 조작할
수 있는 편리한 방법을 제공합니다 .
주로 코드의 가독성을 높이고, 객체 지향적인 설계를 간결하게
할 수 있는 장점이 있습니다.
apply
inline fun T.apply(block: T.() -> Unit): T
- 객체를 초기화하거나 설정할 때 유용
- 객체를 인자로 받고, 객체 자신을 반환
Slide 43
Slide 43 text
with
Slide 44
Slide 44 text
with
inline fun with (receiver: T, block: T.() -> R) : R {
return receiver.block()
}
- 객체 값 접근 및 수정하는 경우
- 객체를 인자로 받고, 블록 내에서 객체 멤버에 직접 접근
가능
- this 를 사용하지 않아도 접근 가능
Slide 45
Slide 45 text
run
사용 예시
Slide 46
Slide 46 text
run
inline fun T.run(block: T.() -> R): R {
return block()
}
- 지역 변수의 범위 제한 (isolate a block of code)
- 객체의 함수를 호출하거나 객체 초기화 시 사용
- 블록 내에서 this 키워드를 사용하여 객체에 접근 가능
- 블록의 마지막 표현식 반환
Slide 47
Slide 47 text
also
사용 예시
Slide 48
Slide 48 text
also
public inline fun .also(
block: (T) -> Unit
): T
- 객체를 사용하고 반환하지 않아도 되는 경우, 부가적인
작업을 수행할 때 유용.
- 객체를 인자로 받고, 블록 내에서 객체를 수정
- it 을 사용하여 객체에 접근
- 객체 자신을 반환, 최종 결과에 영향을 끼치지 않음.
Slide 49
Slide 49 text
let
사용 예시
Slide 50
Slide 50 text
let
public inline fun T.let(block: (T) -> R): R
- nullable 처리
- 객체를 사용하고 그 결과를 반환해야 하는 경우
- 블록 내에서 it 키워드를 사용하여 객체에 접근 가능
Slide 51
Slide 51 text
let
사용 예시
Slide 52
Slide 52 text
Scope function
Scope function 특징 반환값
let it 을 사용해서 객체 접근 블록의 결과
run this 을 사용해서 객체 접근 블록의 결과
with -객체를 인자로 받음
-this 없이 객체의 멤버에 직접 접근
가능
블록의 결과
apply this 없이 객체의 멤버에 직접 접근
가능
객체 자신
also it 키워드를 사용하여 객체 접근 객체 자신
Slide 53
Slide 53 text
함수 참조
Slide 54
Slide 54 text
함수 참조
Slide 55
Slide 55 text
함수 참조
Slide 56
Slide 56 text
감사합니다
Slide 57
Slide 57 text
Share your feedback
to help us better
understand your
KotlinConf’24
Global experience!
Subtitle Text