Java๋ก ์์ฑ๋ ์ฝ๋๋ฅผ Kotlin์ผ๋ก ์์ฑํ๋ค๊ฐ ๋ ์๋ฌธ์ผ๋ก ์์ํจ.
Java์์ Singleton ํจํด์ผ๋ก ์์ฑ๋ ํด๋์ค๋ค์, ํธ์ถ ์ instance๊ฐ ์๋์ง ํ์ธํ๊ณ , instatnce๊ฐ ์์ ๊ฒฝ์ฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ์ ์์ฃผ ๋ด์๋ค. Kotlin์์ object๋ก ์ ์ธํด ์์ฑํ๋ฉด singleton ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค๊ณ ์๊ณ ์์ด์, ์ ๋ง ํธ๋ฆฌํ๊ฒ object ํค์๋๋ฅผ ์ฐ๋ฉฐ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์์๋๋ฐ, java ์ฝ๋์์ ์์ฑํ singleton ํจํด๊ณผ ์ ๋ง ๋์ผํ๊ฒ ๋์ํ๋๊ฒ ๋ง๊ฒ ์ง?๋ผ๋ ์๋ฌธ์ด ๋ค์๋ค.
ํ์ธ ๋ค์ด๊ฐ๋ค.
๊ฒฐ๋ก > ๊ณต์๋ฌธ์ ์์ ๋ฐ๋ฅด๋ฉด ๊ทธ๋ฌํ๋ค.
๊ณต์๋ฌธ์์ ์ธ๊ธ์ ์ฐพ์๋ณธ๋ค.
https://kotlinlang.org/docs/object-declarations.html#object-declarations-overview
The initialization of an object declaration is thread-safe and done on first access.
๋ฐ๋ฒ์ญ
object ์ ์ธ์ ์ด๊ธฐํ๋ thread-safeํ๊ณ ์ฒ์ ์ ๊ทผํ ๋์ ์ด๋ค์ง๋๋ค.
done on first access ์ฒ์ ์ ๊ทผํ ๋์ ์ด๊ธฐํ๊ฐ ์ด๋ค์ง๋ค๊ณ ํ๋, Java์์ singleton ํจํด์ผ๋ก ์์ฑํ ํด๋์ค๊ฐ ์ฒ์ ํธ์ถ๋ ๋ instance์ ์ ๋ฌด๋ฅผ ํ์ธํ๊ณ ๋์ ํ์์ instance๋ฅผ ์์ฑํ๋ ๋ก์ง๊ณผ ๋์ผํ ๋ฏํ๋ค.
๋ค๋ฅธ ๋ฌธ์์์ ์ธ๊ธํ ๊ธ๋ ์ฐพ์๋ค.
https://in-kotlin.com/design-patterns/singleton/#Object_Companion_Object
The Kotlin language provides some features called Object or in combination with a class Companion Object. These declarations are designed to implement the Singleton class in Kotlin in a native way. One thing to mention is that objects are constructed in a lazy way. Also, they are never destroyed as they are available for the lifetime of the application.
๋ฐ๋ฒ์ญ
Kotlin ์ธ์ด๋ Object๋ ํด๋์ค Companion Object ์ ๊ฒฐํฉ๋ ์ผ๋ถ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํฉ๋๋ค. ์ด ์ ์ธ๋ค์ Kotlin์์ ๊ธฐ๋ณธ ๋ฐฉ์์ผ๋ก Singleton ํด๋์ค๋ฅผ ๊ตฌํํ๋๋ก ์ค๊ณ๋์ต๋๋ค. ํ ๊ฐ์ง ์ธ๊ธํ ๊ฒ์, ๊ฐ์ฒด๋ค์ด lazyํ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑ๋๋ค๋ ๊ฒ์ ๋๋ค. ๋ํ, ์ฑ์ ์๋ช ๋์ ์ฌ์ฉํ ์ ์์ด ์ ๋ ํ๊ดด๋์ง ์์ต๋๋ค.
์ ๋ฌธ์ ์์ฑ์๋ ๋์ฒ๋ผ ์๋ฌธ์ ๊ฐ์ง ์ฌ๋๋ค์ด ๋ถ๋ช ์๋ค๋ ๊ฑธ ์์๋๋ณด๋ค.
Object๋ก ์ ์ธํ singleton ๊ฐ์ฒด์ decompile ์ฝ๋๋ ๊ถ๊ธํ๋๋ฐ, ์ฐพ์๋ค.
https://gist.github.com/yenerm/3e4795f9d5b6685b96a7dc4e3de5ea15
decompile ์ฝ๋๋ฅผ ๋ณด๋, ๊ฒฐ๊ตญ์ Java๋ก ์์ฑํ๋ Singleton ํจํด ์ฝ๋๊ฐ ๋ณด์ธ๋ค.
Kotlin์ singleton ์ ์ธ, object์ ๋ํด ๊ฒ์ํ๋ฉด์, Kotlin์ object ํค์๋๋ฅผ ์ฌ์ฉํด ๋ง๋ ๊ฐ์ฒด๊ฐ synchronizedํ์ง, thread safeํ์ง ์๋ฌธ์ ๊ฐ๋ ๊ฐ๋ฐ์๋ค์ด ์์๋ค๋ ๊ฒ๋ ํ์ธํ๋ค. ๋ค๋ค ๋น์ทํ ๊ณ ๋ฏผ๊ณผ ์๊ฐ, ์๋ฌธ๋ค์ ๊ฐ์ง๊ณ ์๊ตฌ๋ ์ถ๋ค๐
https://stackoverflow.com/questions/37386116/are-kotlin-object-singletons-methods-synchronized
https://stackoverflow.com/questions/30179793/are-kotlins-singletons-thread-safe
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android] ์์คํ ๋ฐ ์ ์ด (0) | 2023.03.03 |
---|---|
[Java][Thread] Happens-before relationship (0) | 2023.03.03 |
[Network] HTTP headers (0) | 2023.03.02 |
[Android][Java][์ํธํ] MessageDigest (0) | 2023.02.28 |
[Android][View] decor view (0) | 2023.02.16 |