KotlinConf'2024 Global in South Korea - Khope

piyrw9754 13 views 190 slides Oct 29, 2025
Slide 1
Slide 1 of 190
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55
Slide 56
56
Slide 57
57
Slide 58
58
Slide 59
59
Slide 60
60
Slide 61
61
Slide 62
62
Slide 63
63
Slide 64
64
Slide 65
65
Slide 66
66
Slide 67
67
Slide 68
68
Slide 69
69
Slide 70
70
Slide 71
71
Slide 72
72
Slide 73
73
Slide 74
74
Slide 75
75
Slide 76
76
Slide 77
77
Slide 78
78
Slide 79
79
Slide 80
80
Slide 81
81
Slide 82
82
Slide 83
83
Slide 84
84
Slide 85
85
Slide 86
86
Slide 87
87
Slide 88
88
Slide 89
89
Slide 90
90
Slide 91
91
Slide 92
92
Slide 93
93
Slide 94
94
Slide 95
95
Slide 96
96
Slide 97
97
Slide 98
98
Slide 99
99
Slide 100
100
Slide 101
101
Slide 102
102
Slide 103
103
Slide 104
104
Slide 105
105
Slide 106
106
Slide 107
107
Slide 108
108
Slide 109
109
Slide 110
110
Slide 111
111
Slide 112
112
Slide 113
113
Slide 114
114
Slide 115
115
Slide 116
116
Slide 117
117
Slide 118
118
Slide 119
119
Slide 120
120
Slide 121
121
Slide 122
122
Slide 123
123
Slide 124
124
Slide 125
125
Slide 126
126
Slide 127
127
Slide 128
128
Slide 129
129
Slide 130
130
Slide 131
131
Slide 132
132
Slide 133
133
Slide 134
134
Slide 135
135
Slide 136
136
Slide 137
137
Slide 138
138
Slide 139
139
Slide 140
140
Slide 141
141
Slide 142
142
Slide 143
143
Slide 144
144
Slide 145
145
Slide 146
146
Slide 147
147
Slide 148
148
Slide 149
149
Slide 150
150
Slide 151
151
Slide 152
152
Slide 153
153
Slide 154
154
Slide 155
155
Slide 156
156
Slide 157
157
Slide 158
158
Slide 159
159
Slide 160
160
Slide 161
161
Slide 162
162
Slide 163
163
Slide 164
164
Slide 165
165
Slide 166
166
Slide 167
167
Slide 168
168
Slide 169
169
Slide 170
170
Slide 171
171
Slide 172
172
Slide 173
173
Slide 174
174
Slide 175
175
Slide 176
176
Slide 177
177
Slide 178
178
Slide 179
179
Slide 180
180
Slide 181
181
Slide 182
182
Slide 183
183
Slide 184
184
Slide 185
185
Slide 186
186
Slide 187
187
Slide 188
188
Slide 189
189
Slide 190
190

About This Presentation

project valhalla and value class


Slide Content

Project Valhalla,
Value Class
Kim Huemang
@esperar
KotlinConf’24 in South Korea

About K-hope
2006. 02. 06 (18 yo)
Email: [email protected]
School: Gwangju Software Meister Highschool
Major: Server Developer

Project Valhalla,
Value Class
Kim Huemang

Primitive Type, Reference Type

Primitive Type
int, long, float, double, boolean, byte, short, char (8가지)
stack memory에저장되는 데이터들

Primitive Type
int, long, float, double, boolean, byte, short, char (8가지)
stack memory에저장되는 데이터들
실제데이터값을저장하는 타입(정수,실수,문자,논리리터럴등)

ReferenceType
원시타입을 제외한상위타입들Java에서최상위클래스인
java.lang.Object클래스를 상속하는 모든클래스

Reference Type
원시타입을 제외한상위타입들Java에서최상위클래스인
java.lang.Object클래스를 상속하는 모든클래스
String, Array, Enum, Class, Interface …
실제객체들은 Heap 메모리에 저장,참조타입변수는Stack메모리에실제객체
주소를저장하여, 참조변수에저장된객체의주소를불러와사용하는방식

GarbageCollector

Primitive Type vs Reference Type

Primitive Type vs Reference Type
성능 유연성

JVM Type System,Problem

JVM Type System

JVM Type System
1. Primitive Type
2. Object
3. Array

Object

Object
Heap
Object
Object

Object
Heap
Object
Object
header

JVM Type System Problem !!!!

90년대초

90년대초
산술연산 ==메모리접근

현재
산술연산 <메모리접근

현재
산술연산 <메모리접근
메모리에서 데이터를 가져오게 되면그
시간동안 cpu는연산을수천만번 정도낭비

Project Valhalla’s Goal

Project Valhalla’s Goal
평평하고 (간접참조가 x)
header가없다.

But How???

Object
Oriented
Programming

Object
Oriented
Programming

Object
Oriented
Programming
?!

Object
Oriented
Programming
Object vs Primitive

Primitive > Object
Performance

객체지향의 일관성이 깨질수있다고!!
Object
Oriented
Programming
Primitive

Generic

Generic
제네릭은 데이터타입을일반화함
클래스나 메서드에서 사용할내부데이터타입을컴파일시에 미리지정하는 방법

primitive

Wrapper Class

Wrapper Class
(Integer, Long, …. )

Lambda

Lambda
제네릭기반구현

java.util.function

IntPredicate, IntToLongFunction….

Stream도
마찬가지다 ..!
IntStream, LongStream, DoubleStream

IntStream, LongStream, DoubleStream
IntPredicate, IntToLongFunction….
성능최적화를 위한노력…

라이브러리 개발자

라이브러리 개발자
IntToLongFunction, PrimitiveIterator.OfInt()이런거더만들어야함 가면갈수록더많아지는..

성능vs 추상화

성능vs 추상화
인지부하

제네릭의 주요목표

제네릭의 주요목표
타입표현방식추상화

기본타입 vs 참조타입

기본타입 vs 참조타입
크나큰벽이되어가고
있다..

이러한문제의원인은?

동일성

동일성을 가진다는 뜻

동일성을 가진다는 뜻
객체가변할수있다

객체의필드가수정되어도
어떤객체에접근할지
명확히식별할수있어야함.

Object equality
Synchronization
System::identityHashCode
WeakReference

Project Valhalla Goal

Project Valhalla Goal
Flat한Data Type을만들자!

Project Valhalla Goal
Flat한Data Type을만들자!

Project Valhalla Goal
Flat한Data Type을만들자!
How?

클래스가 동일성을 포기!

Value Class!

Value Class!
Object header X

Value Class!
Object header X
참조를통한접근X

Value Class!
메서드,생성자,필드,캡슐화,
인터페이스 ,제네릭,어노테이션 O

Value Class!
WrapperClass대체

Primitive Type Field
하나만가진Value Class

Primitive Type Field
하나만가진Value Class
Primitve표현,객체호환성유지,
래퍼클래스의오버헤드해결

PRIMITIVE CLASS!

클래스의 표현력+기본타입의빠른동작

Code like a class, works like an int

Kotlin

Kotlin
1.5

“모든원시값과문자열값을포장해라”

“모든원시값과문자열값을포장해라”

“모든원시값과문자열값을포장해라”
1.타입안정성
2.코드가독성
3.캡슐화

1.타입안정성

1.타입안정성

1.타입안정성

1.타입안정성

1.타입안정성

1.타입안정성
컴파일타임에서 오류캐치가능

2.코드가독성

2.코드가독성
어떤타입의id가들어가야하는거지 ?

2.코드가독성

2.코드가독성
가독성+타입안정성

3.캡슐화

3.캡슐화

3.캡슐화

Kotlin Value Class

Kotlin Value Class
일반클래스와 달리캡슐화관련오버헤드가 X

Kotlin을디컴파일해서 확인해본 자바코드

Kotlin을디컴파일해서 확인해본 자바코드
Length 객체를생성하지 않고있으며,double타입으로 totalLength저장

Kotlin Value Class의특징

Kotlin Value Class의특징
1. @JvmInline어노테이션과 함께사용해야 한다.
2.자동생성메서드는 equals(), toString(), hashCode()만있다.
3.불변프로퍼티 1개만가질수있다.
4.컴파일타임===비교를허용하지 않는다.

1.@JvmInline어노테이션과 함께사용해야 한다.

1.@JvmInline어노테이션과 함께사용해야 한다.

1.@JvmInline어노테이션과 함께사용해야 한다.
어노테이션을 붙여줘야 컴파일과정에서
컴파일러가 해당어노테이션을 보고value class의
인스턴스가 런타임에 원시값혹은문자열로
저장되어야함을 알수가있다.

2.자동생성메서드는 equals(), toString(), hashCode()만있다.

2.자동생성메서드는 equals(), toString(), hashCode()만있다.
Kotlin Data Class

2.자동생성메서드는 equals(), toString(), hashCode()만있다.
Kotlin Data Class
equals, toString, hashCode+copy, componentN

2.자동생성메서드는 equals(), toString(), hashCode()만있다.
Kotlin Value Class

2.자동생성메서드는 equals(), toString(), hashCode()만있다.
Kotlin Value Class
equals, toString, hashCode+copy, componentN

2.자동생성메서드는 equals(), toString(), hashCode()만있다.

2.자동생성메서드는 equals(), toString(), hashCode()만있다.

2.자동생성메서드는 equals(), toString(), hashCode()만있다.

2.자동생성메서드는 equals(), toString(), hashCode()만있다.

2.자동생성메서드는 equals(), toString(), hashCode()만있다.

컴파일이후value class 값과메서드가 벗겨지면서
상위클래스로 스며들어야 한다.그때그메서드가 중복되는
문제가발생할수있어난수를붙여문제를해결한다 .

Mangling

Mangling
메서드명뒤에/-[a-zA-Z_]{7}/

3.불변(val) 프로퍼티만 가질수있다.

3.불변(val) 프로퍼티만 가질수있다.
Val은본질적으로 Value의약자입니다 .
객체가아닌“값”으로나타내기 위해하나의프로퍼티만 존재해야 하며
최적화를 위해서불변한값이여야 합니다.

4.컴파일타임에‘===‘비교를허용하지 않는다

4.컴파일타임에‘===‘비교를허용하지 않는다
===은레퍼런스 비교다.

4.컴파일타임에‘===‘비교를허용하지 않는다
===은레퍼런스 비교다.
Value class는컴파일타임에원시값이된다.

4.컴파일타임에‘===‘비교를허용하지 않는다
===은레퍼런스 비교다.
Value class는컴파일타임에원시값이된다.

성능테스트
1.객체생성속도테스트
2.값참조및연산속도테스트
3.힙메모리테스트

1.객체생성속도테스트

1.객체생성속도테스트
JMH(Java Microbenchmark Harness)

1.객체생성속도테스트
JMH(Java Microbenchmark Harness)

객체생성속도테스트–유의미한 차이가없다

2.값참조및연산속도테스트

2.값참조및연산속도테스트

2.값참조및연산속도테스트

2.값참조및연산속도테스트

2.값참조및연산속도테스트
값참조및연산속도테스트–유의미한 차이가없다

3.Heap 메모리테스트
JMX(JavaManagementeXtensions)활용

3.Heap 메모리테스트
JMX(JavaManagementeXtensions)활용

3.Heap 메모리테스트

3.Heap 메모리테스트

3.Heap 메모리테스트

3.Heap 메모리테스트

3.Heap 메모리테스트

3.Heap 메모리테스트

3.Heap 메모리테스트

3.Heap 메모리테스트

3.Heap 메모리테스트
왜차이가없지?

3.Heap 메모리테스트

3.Heap 메모리테스트

3.Heap 메모리테스트
List에는Primitive Type을저장할수없음.(Auto Boxing이발생함.)

3.Heap 메모리테스트
List에는Primitive Type을저장할수없음.(Auto Boxing이발생함.)
따라서객체생성이되고결국메모리또한큰차이가없음.

3.Heap 메모리테스트
따라서무작정생성으로 테스트를 진행해보겠다 .

3.Heap 메모리테스트
따라서무작정생성으로 테스트를 진행해보겠다 .

3.Heap 메모리테스트
따라서무작정생성으로 테스트를 진행해보겠다 .
Regular Class

3.Heap 메모리테스트
Regular Class Value Class
따라서무작정생성으로 테스트를 진행해보겠다 .

3.Heap 메모리테스트
Regular보다약50퍼센트의 공간만차지함
Regular Class Value Class

3.Heap 메모리테스트
Regular Class Value Class
bytes

3.Heap 메모리테스트
Regular Class Value Class
bytes
50% 절약

3.Heap 메모리테스트
Array vs List

3.Heap 메모리테스트
Array만사용하면 되나?

3.Heap 메모리테스트
Array만사용하면 되나?
객체메서드(X)

Spring에서value class활용하기

Spring에서value class활용하기

Spring에서value class활용하기

Spring에서value class활용하기

Spring에서value class활용하기

결론

결론
성능

결론
성능 추상화

GitHub Code: https://github.com/esperar/KotlinConf2024

Thank you
KotlinConf’24 in South Korea