Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Refactoring to Expressive Kotlin
Search
DavidKwon7
June 28, 2024
Technology
770
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Refactoring to Expressive Kotlin
2024.06.29
kotlinConf'24
DavidKwon7
June 28, 2024
Transcript
57 slides
Refactoring to Expressive Kotlin KotlinConf’24 권혁준
None
None
None
None
None
None
`hikariDataSource` function name refactoring → createHikariDataSource → convertToHikariDataSource → toHikariDataSource
→ hikariDataSourceFrom → hikariDataSourceFor
Naming - Naming Refactoring은 왜 필요할까?
Naming
Naming
Naming - 올바른 Naming 규칙은?
Naming - 서술적인 이름 짓기 - 명확성 - 기존에 약속된
naming 스타일에 맞추기 - 변수는 특정적인 단어, 함수는 동사 선호
this this 가 쓰이는 상황 this 의미 class 내부 class
현재 객체를 참조 확장 함수 내부 . 왼쪽에 전달 된 리시버 파라미터 참조
this
this
this
Kotlin - generics - Generics는 코드의 재사용성과 유연성을 높이기 위해
사용 - Generics를 사용함으로써 , 다양한 타입의 객체를 다룰 수 있는 코드를 작성할 수 있다. 이를 통해 타입 안정성을 유지하면서도 일반화된 코드를 작성할 수 있다.
Kotlin - generics 예제1 - Combine
Kotlin - generics 예제1 - Combine
Kotlin - generics 예제1 - Combine
Kotlin - generics 예제1 - Combine
Kotlin - generics 예제2 - Channel
Kotlin - generics 예제2 - Channel private val _viewEvent =
Channel<Event<Any>>() val viewEvent: ReceiveChannel<Event<Any>> = _viewEvent fun viewEvent(content: Any) { viewModelScope.launch(BaseCoroutine. default) { _viewEvent.send(Event(content)) } }
Kotlin - generics 예제2 - Channel private val _viewEvent =
Channel<Event<Any>>() val viewEvent: ReceiveChannel<Event<Any>> = _viewEvent fun viewEvent(content: Any) { viewModelScope.launch(BaseCoroutine. default) { _viewEvent.send(Event(content)) } }
Kotlin - generics
Kotlin - generics - 무공변성 : 기본 Generic. - out
(공변성) : 제네릭 타입 매개변수가 반환 타입으로 사용될 때 지정하며, 하위 타입으로 변환될 수 있습니다. - in(반공변성) : 제네릭 타입 매개변수가 매개변수로 사용될 때 지정하며, 상위 타입으로 변환될 수 있습니다.
Kotlin - generics out (공변성) - 타입 매개변수가 생산(produce) :
반환타입으로 사용 - 하위 타입 : 타입 매개변수는 하위 타입으로 취급 가능
Kotlin - generics out 데이터 생산(read) / 하위 타입
Kotlin - generics in (반공변성) - 타입 매개변수가 소비(consume) :
매개변수로 사용될 때 - 상위 타입 : 타입 매개변수는 상위 타입으로 취급 가능
Kotlin - generic function in 데이터 소비 / 상위 타입
Kotlin - generics where
Kotlin - generics where
Kotlin - generics where
inline function
inline function
inline function lambda function은 생성되는 시점에 무명 class 객체가 생성.
inline을 붙여주면, 방지 가능
noinline function
Scope function 객체의 범위(scope)에서 코드를 실행하거나 객체를 조작할 수 있는
편리한 방법을 제공합니다 . 주로 코드의 가독성을 높이고, 객체 지향적인 설계를 간결하게 할 수 있는 장점이 있습니다.
apply private fun hikerDataSource(): HikariDataSource { val dataSource = HikariDataSource()
dataSource.jdcUrl = jdcUrl.toString() dataSource.username = username dataSource.password = password dataSource.validate() return dataSource }
apply private fun hikerDataSource(): HikariDataSource { val dataSource = HikariDataSource().apply
{ dcUrl = jdcUrl.toString() username = username password = password } dataSource.validate() return dataSource }
apply inline fun <T> T.apply(block: T.() -> Unit): T -
객체를 초기화하거나 설정할 때 유용 - 객체를 인자로 받고, 객체 자신을 반환
with
with inline fun <T, R> with (receiver: T, block: T.()
-> R) : R { return receiver.block() } - 객체 값 접근 및 수정하는 경우 - 객체를 인자로 받고, 블록 내에서 객체 멤버에 직접 접근 가능 - this 를 사용하지 않아도 접근 가능
run 사용 예시
run inline fun <T, R> T.run(block: T.() -> R): R
{ return block() } - 지역 변수의 범위 제한 (isolate a block of code) - 객체의 함수를 호출하거나 객체 초기화 시 사용 - 블록 내에서 this 키워드를 사용하여 객체에 접근 가능 - 블록의 마지막 표현식 반환
also 사용 예시
also public inline fun <T>.also( block: (T) -> Unit ):
T - 객체를 사용하고 반환하지 않아도 되는 경우, 부가적인 작업을 수행할 때 유용. - 객체를 인자로 받고, 블록 내에서 객체를 수정 - it 을 사용하여 객체에 접근 - 객체 자신을 반환, 최종 결과에 영향을 끼치지 않음.
let 사용 예시
let public inline fun <T, R> T.let(block: (T) -> R):
R - nullable 처리 - 객체를 사용하고 그 결과를 반환해야 하는 경우 - 블록 내에서 it 키워드를 사용하여 객체에 접근 가능
let 사용 예시
Scope function Scope function 특징 반환값 let it 을 사용해서
객체 접근 블록의 결과 run this 을 사용해서 객체 접근 블록의 결과 with -객체를 인자로 받음 -this 없이 객체의 멤버에 직접 접근 가능 블록의 결과 apply this 없이 객체의 멤버에 직접 접근 가능 객체 자신 also it 키워드를 사용하여 객체 접근 객체 자신
함수 참조
함수 참조
함수 참조
감사합니다
Share your feedback to help us better understand your KotlinConf’24
Global experience! Subtitle Text
More Decks by DavidKwon7
See All by DavidKwon7
AI Agent만 써본 무지성 개발자인가요? 안드로이드편
davidkwon7
0
150
What’s new in Android 2025
davidkwon7
0
64
Android는 어떻게 화면을 그릴까?
davidkwon7
0
200
Jetpack Glance
davidkwon7
0
210
UI Test with Compose
davidkwon7
0
190
Relay_및_Compose를_사용하여_완전한_앱_빌드하기.pdf
davidkwon7
0
630
Flow 느껴보기
davidkwon7
1
220
WearOS 101
davidkwon7
0
88
Other Decks in Technology
See All in Technology
Frontier Teams — Amazon は AI で「開発のやり方」をどう変えたのか
kmotohas
0
260
AI時代の組織作り:チーム開発から「個人×AI」への移行と、持続可能な「開発資本」の築き方
ham0215
3
840
E2E Test というハーネス — AI時代の自動テスト民主化
daishukojima
2
780
SSFの現在地 ― CAEP/RISCからAI Identityへ
oidfj
0
440
Context Ontology Accelerator 入門 (業務データの意味を、AI エージェントに渡す)
inariku
PRO
3
680
Kiro IDE 入門 (画面の各部から、頼み方、任せ方、戻し方まで) | 目指せ Kiro マスター 02
inariku
PRO
4
250
おうち環境でも「なるべく止めたくない!」 ― おうち環境の機器冗長化の理想と現実
yuutosi
1
340
常時稼働エージェントの作り方(Claude公式ブログを資料化)
minorun365
PRO
10
16k
AWS Client VPNの設定でハマったポイントとその過程での気づき
amarelo_n24
0
130
Bots in Kiro Crew (One point of contact for ongoing work) | Kiro: Zero to Hero 12
inariku
PRO
1
140
Intro to Kiro (One agent, every surface) | Kiro: Zero to Hero 01
inariku
PRO
2
140
81天的 AI Agent 軟體開發團隊治理實務分享
regionbbs
0
170
Featured
See All Featured
Six Lessons from altMBA
skipperchong
29
4.6k
Done Done
chrislema
187
17k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Design in an AI World
tapps
1
390
Mind Mapping
helmedeiros
1
440
Speed Design
sergeychernyshev
33
2.2k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.3k
Paper Plane
katiecoart
PRO
6
55k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
What the history of the web can teach us about the future of AI
inesmontani
PRO
3
810
sira's awesome portfolio website redesign presentation
elsirapls
0
510