SlidePub
Home
Categories
Login
Register
Home
General
KotlinConf'2024 Global in South Korea - Khope
KotlinConf'2024 Global in South Korea - Khope
piyrw9754
13 views
190 slides
Oct 29, 2025
Slide
1
of 190
Previous
Next
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
About This Presentation
project valhalla and value class
Size:
1.57 MB
Language:
none
Added:
Oct 29, 2025
Slides:
190 pages
Slide Content
Slide 1
Project Valhalla,
Value Class
Kim Huemang
@esperar
KotlinConf’24 in South Korea
Slide 2
About K-hope
2006. 02. 06 (18 yo)
Email:
[email protected]
School: Gwangju Software Meister Highschool
Major: Server Developer
Slide 6
Project Valhalla,
Value Class
Kim Huemang
Slide 7
Primitive Type, Reference Type
Slide 8
Primitive Type
int, long, float, double, boolean, byte, short, char (8가지)
stack memory에저장되는 데이터들
Slide 9
Primitive Type
int, long, float, double, boolean, byte, short, char (8가지)
stack memory에저장되는 데이터들
실제데이터값을저장하는 타입(정수,실수,문자,논리리터럴등)
Slide 12
ReferenceType
원시타입을 제외한상위타입들Java에서최상위클래스인
java.lang.Object클래스를 상속하는 모든클래스
Slide 13
Reference Type
원시타입을 제외한상위타입들Java에서최상위클래스인
java.lang.Object클래스를 상속하는 모든클래스
String, Array, Enum, Class, Interface …
실제객체들은 Heap 메모리에 저장,참조타입변수는Stack메모리에실제객체
주소를저장하여, 참조변수에저장된객체의주소를불러와사용하는방식
Slide 17
GarbageCollector
Slide 18
Primitive Type vs Reference Type
Slide 19
Primitive Type vs Reference Type
성능 유연성
Slide 20
JVM Type System,Problem
Slide 21
JVM Type System
Slide 22
JVM Type System
1. Primitive Type
2. Object
3. Array
Slide 23
Object
Slide 24
Object
Heap
Object
Object
Slide 25
Object
Heap
Object
Object
header
Slide 29
JVM Type System Problem !!!!
Slide 30
90년대초
Slide 31
90년대초
산술연산 ==메모리접근
Slide 32
현재
산술연산 <메모리접근
Slide 33
현재
산술연산 <메모리접근
메모리에서 데이터를 가져오게 되면그
시간동안 cpu는연산을수천만번 정도낭비
Slide 34
Project Valhalla’s Goal
Slide 35
Project Valhalla’s Goal
평평하고 (간접참조가 x)
header가없다.
Slide 36
But How???
Slide 37
Object
Oriented
Programming
Slide 38
Object
Oriented
Programming
Slide 39
Object
Oriented
Programming
?!
Slide 40
Object
Oriented
Programming
Object vs Primitive
Slide 41
Primitive > Object
Performance
Slide 42
객체지향의 일관성이 깨질수있다고!!
Object
Oriented
Programming
Primitive
Slide 43
Generic
Slide 44
Generic
제네릭은 데이터타입을일반화함
클래스나 메서드에서 사용할내부데이터타입을컴파일시에 미리지정하는 방법
Slide 45
primitive
Slide 46
Wrapper Class
Slide 47
Wrapper Class
(Integer, Long, …. )
Slide 50
Lambda
Slide 51
Lambda
제네릭기반구현
Slide 52
java.util.function
Slide 53
IntPredicate, IntToLongFunction….
Slide 54
Stream도
마찬가지다 ..!
IntStream, LongStream, DoubleStream
Slide 55
IntStream, LongStream, DoubleStream
IntPredicate, IntToLongFunction….
성능최적화를 위한노력…
Slide 56
라이브러리 개발자
Slide 57
라이브러리 개발자
IntToLongFunction, PrimitiveIterator.OfInt()이런거더만들어야함 가면갈수록더많아지는..
Slide 58
성능vs 추상화
Slide 59
성능vs 추상화
인지부하
Slide 60
제네릭의 주요목표
Slide 61
제네릭의 주요목표
타입표현방식추상화
Slide 62
기본타입 vs 참조타입
Slide 63
기본타입 vs 참조타입
크나큰벽이되어가고
있다..
Slide 64
이러한문제의원인은?
Slide 66
동일성
Slide 67
동일성을 가진다는 뜻
Slide 68
동일성을 가진다는 뜻
객체가변할수있다
Slide 69
객체의필드가수정되어도
어떤객체에접근할지
명확히식별할수있어야함.
Slide 70
Object equality
Synchronization
System::identityHashCode
WeakReference
Slide 71
Project Valhalla Goal
Slide 72
Project Valhalla Goal
Flat한Data Type을만들자!
Slide 73
Project Valhalla Goal
Flat한Data Type을만들자!
Slide 74
Project Valhalla Goal
Flat한Data Type을만들자!
How?
Slide 75
클래스가 동일성을 포기!
Slide 76
Value Class!
Slide 77
Value Class!
Object header X
Slide 78
Value Class!
Object header X
참조를통한접근X
Slide 79
Value Class!
메서드,생성자,필드,캡슐화,
인터페이스 ,제네릭,어노테이션 O
Slide 80
Value Class!
WrapperClass대체
Slide 81
Primitive Type Field
하나만가진Value Class
Slide 82
Primitive Type Field
하나만가진Value Class
Primitve표현,객체호환성유지,
래퍼클래스의오버헤드해결
Slide 83
PRIMITIVE CLASS!
Slide 84
클래스의 표현력+기본타입의빠른동작
Slide 85
Code like a class, works like an int
Slide 87
Kotlin
Slide 88
Kotlin
1.5
Slide 90
“모든원시값과문자열값을포장해라”
Slide 91
“모든원시값과문자열값을포장해라”
Slide 92
“모든원시값과문자열값을포장해라”
1.타입안정성
2.코드가독성
3.캡슐화
Slide 93
1.타입안정성
Slide 94
1.타입안정성
Slide 95
1.타입안정성
Slide 96
1.타입안정성
Slide 97
1.타입안정성
Slide 98
1.타입안정성
컴파일타임에서 오류캐치가능
Slide 99
2.코드가독성
Slide 100
2.코드가독성
어떤타입의id가들어가야하는거지 ?
Slide 101
2.코드가독성
Slide 102
2.코드가독성
가독성+타입안정성
Slide 103
3.캡슐화
Slide 104
3.캡슐화
Slide 105
3.캡슐화
Slide 106
Kotlin Value Class
Slide 107
Kotlin Value Class
일반클래스와 달리캡슐화관련오버헤드가 X
Slide 112
Kotlin을디컴파일해서 확인해본 자바코드
Slide 113
Kotlin을디컴파일해서 확인해본 자바코드
Length 객체를생성하지 않고있으며,double타입으로 totalLength저장
Slide 114
Kotlin Value Class의특징
Slide 115
Kotlin Value Class의특징
1. @JvmInline어노테이션과 함께사용해야 한다.
2.자동생성메서드는 equals(), toString(), hashCode()만있다.
3.불변프로퍼티 1개만가질수있다.
4.컴파일타임===비교를허용하지 않는다.
Slide 116
1.@JvmInline어노테이션과 함께사용해야 한다.
Slide 117
1.@JvmInline어노테이션과 함께사용해야 한다.
Slide 118
1.@JvmInline어노테이션과 함께사용해야 한다.
어노테이션을 붙여줘야 컴파일과정에서
컴파일러가 해당어노테이션을 보고value class의
인스턴스가 런타임에 원시값혹은문자열로
저장되어야함을 알수가있다.
Slide 119
2.자동생성메서드는 equals(), toString(), hashCode()만있다.
Slide 120
2.자동생성메서드는 equals(), toString(), hashCode()만있다.
Kotlin Data Class
Slide 121
2.자동생성메서드는 equals(), toString(), hashCode()만있다.
Kotlin Data Class
equals, toString, hashCode+copy, componentN
Slide 122
2.자동생성메서드는 equals(), toString(), hashCode()만있다.
Kotlin Value Class
Slide 123
2.자동생성메서드는 equals(), toString(), hashCode()만있다.
Kotlin Value Class
equals, toString, hashCode+copy, componentN
Slide 124
2.자동생성메서드는 equals(), toString(), hashCode()만있다.
Slide 125
2.자동생성메서드는 equals(), toString(), hashCode()만있다.
Slide 126
2.자동생성메서드는 equals(), toString(), hashCode()만있다.
Slide 127
2.자동생성메서드는 equals(), toString(), hashCode()만있다.
Slide 128
2.자동생성메서드는 equals(), toString(), hashCode()만있다.
Slide 131
컴파일이후value class 값과메서드가 벗겨지면서
상위클래스로 스며들어야 한다.그때그메서드가 중복되는
문제가발생할수있어난수를붙여문제를해결한다 .
Slide 135
Mangling
Slide 136
Mangling
메서드명뒤에/-[a-zA-Z_]{7}/
Slide 137
3.불변(val) 프로퍼티만 가질수있다.
Slide 138
3.불변(val) 프로퍼티만 가질수있다.
Val은본질적으로 Value의약자입니다 .
객체가아닌“값”으로나타내기 위해하나의프로퍼티만 존재해야 하며
최적화를 위해서불변한값이여야 합니다.
Slide 139
4.컴파일타임에‘===‘비교를허용하지 않는다
Slide 140
4.컴파일타임에‘===‘비교를허용하지 않는다
===은레퍼런스 비교다.
Slide 141
4.컴파일타임에‘===‘비교를허용하지 않는다
===은레퍼런스 비교다.
Value class는컴파일타임에원시값이된다.
Slide 142
4.컴파일타임에‘===‘비교를허용하지 않는다
===은레퍼런스 비교다.
Value class는컴파일타임에원시값이된다.
Slide 143
성능테스트
1.객체생성속도테스트
2.값참조및연산속도테스트
3.힙메모리테스트
Slide 144
1.객체생성속도테스트
Slide 145
1.객체생성속도테스트
JMH(Java Microbenchmark Harness)
Slide 146
1.객체생성속도테스트
JMH(Java Microbenchmark Harness)
Slide 150
객체생성속도테스트–유의미한 차이가없다
Slide 151
2.값참조및연산속도테스트
Slide 152
2.값참조및연산속도테스트
Slide 153
2.값참조및연산속도테스트
Slide 154
2.값참조및연산속도테스트
Slide 155
2.값참조및연산속도테스트
값참조및연산속도테스트–유의미한 차이가없다
Slide 156
3.Heap 메모리테스트
JMX(JavaManagementeXtensions)활용
Slide 157
3.Heap 메모리테스트
JMX(JavaManagementeXtensions)활용
Slide 158
3.Heap 메모리테스트
Slide 159
3.Heap 메모리테스트
Slide 160
3.Heap 메모리테스트
Slide 161
3.Heap 메모리테스트
Slide 162
3.Heap 메모리테스트
Slide 163
3.Heap 메모리테스트
Slide 164
3.Heap 메모리테스트
Slide 165
3.Heap 메모리테스트
Slide 166
3.Heap 메모리테스트
왜차이가없지?
Slide 167
3.Heap 메모리테스트
Slide 168
3.Heap 메모리테스트
Slide 169
3.Heap 메모리테스트
List에는Primitive Type을저장할수없음.(Auto Boxing이발생함.)
Slide 170
3.Heap 메모리테스트
List에는Primitive Type을저장할수없음.(Auto Boxing이발생함.)
따라서객체생성이되고결국메모리또한큰차이가없음.
Slide 171
3.Heap 메모리테스트
따라서무작정생성으로 테스트를 진행해보겠다 .
Slide 172
3.Heap 메모리테스트
따라서무작정생성으로 테스트를 진행해보겠다 .
Slide 173
3.Heap 메모리테스트
따라서무작정생성으로 테스트를 진행해보겠다 .
Regular Class
Slide 174
3.Heap 메모리테스트
Regular Class Value Class
따라서무작정생성으로 테스트를 진행해보겠다 .
Slide 175
3.Heap 메모리테스트
Regular보다약50퍼센트의 공간만차지함
Regular Class Value Class
Slide 176
3.Heap 메모리테스트
Regular Class Value Class
bytes
Slide 177
3.Heap 메모리테스트
Regular Class Value Class
bytes
50% 절약
Slide 178
3.Heap 메모리테스트
Array vs List
Slide 179
3.Heap 메모리테스트
Array만사용하면 되나?
Slide 180
3.Heap 메모리테스트
Array만사용하면 되나?
객체메서드(X)
Slide 181
Spring에서value class활용하기
Slide 182
Spring에서value class활용하기
Slide 183
Spring에서value class활용하기
Slide 184
Spring에서value class활용하기
Slide 185
Spring에서value class활용하기
Slide 186
결론
Slide 187
결론
성능
Slide 188
결론
성능 추상화
Slide 189
GitHub Code: https://github.com/esperar/KotlinConf2024
Slide 190
Thank you
KotlinConf’24 in South Korea
Tags
kotlin
Categories
General
Download
Download Slideshow
Get the original presentation file
Quick Actions
Embed
Share
Save
Print
Full
Report
Statistics
Views
13
Slides
190
Age
34 days
Related Slideshows
22
Pray For The Peace Of Jerusalem and You Will Prosper
RodolfoMoralesMarcuc
30 views
26
Don_t_Waste_Your_Life_God.....powerpoint
chalobrido8
32 views
31
VILLASUR_FACTORS_TO_CONSIDER_IN_PLATING_SALAD_10-13.pdf
JaiJai148317
30 views
14
Fertility awareness methods for women in the society
Isaiah47
29 views
35
Chapter 5 Arithmetic Functions Computer Organisation and Architecture
RitikSharma297999
26 views
5
syakira bhasa inggris (1) (1).pptx.......
ourcommunity56
28 views
View More in This Category
Embed Slideshow
Dimensions
Width (px)
Height (px)
Start Page
Which slide to start from (1-190)
Options
Auto-play slides
Show controls
Embed Code
Copy Code
Share Slideshow
Share on Social Media
Share on Facebook
Share on Twitter
Share on LinkedIn
Share via Email
Or copy link
Copy
Report Content
Reason for reporting
*
Select a reason...
Inappropriate content
Copyright violation
Spam or misleading
Offensive or hateful
Privacy violation
Other
Slide number
Leave blank if it applies to the entire slideshow
Additional details
*
Help us understand the problem better