Kotlin - YunByungKwan/Fundamental GitHub Wiki
Kotlin์ data class๋ Java class์ ๋ฌ๋ฆฌ equals(), hashCode(), toString(), copy() ๋ฉ์๋๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด ์ค๋๋ค.
๋ ๋ค๋ฅธ ํน์ง์ผ๋ก๋ ์์์ด ๋ถ๊ฐ๋ฅํ๊ณ , getter/setter ๋ฉ์๋๋ฅผ ๋ณ๋๋ก ์ ์ํ์ง ์์๋ ๋์ ํธ๋ฆฌํ๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
Kotlin์ ๋ฒ์ ์ง์ ํจ์๋ apply, also, run, let, with๊ฐ ์์ต๋๋ค.
- Java์ ๋๊ฐ์ด JVM ์์์ ๋์ํ๊ธฐ ๋๋ฌธ์ Java์ Kotlin์ ๊ฐ์ด ์ฌ์ฉํด๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
- Java๋ณด๋ค null๊ฐ์ ๋ํด์ ์์ ์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค๋ฉด letํจ์์ safe call์ ํจ๊ป ์ฐ๊ฑฐ๋ ์๋น์ค ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ ์์ ์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. - ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ๋์ ํ ๋ apply() ํจ์๋ฅผ ์ฐ๋ฉด ์ข ๋ ์ฐ๊ด์ฑ ์๊ฒ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
- ํ์ฅํจ์๋ฅผ ์ฌ์ฉํ ์ ์์ด์ ์๋ฅผ ๋ค๋ฉด progressBar์ visibility๋ฅผ ๋ณ๊ฒฝํ๋ ์ฝ๋๋ฅผ ์ข ๋ ๊ฐ๋ ์ฑ ์๊ฒ ์์ฑํ ์ ์์ต๋๋ค.
์์ ํจ์๋ ๋์ผํ ์
๋ ฅ์ ๋ํด์ ํญ์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๊ณ
๋ค๋ฅธ ์ธ๋ถ์ ์์๋ฅผ ๋ณ๊ฒฝํ์ง ์๋ ํจ์๋ฅผ ๋งํฉ๋๋ค.
์ผ๊ธ ๊ฐ์ฒด์ ์กฐ๊ฑด์ 3๊ฐ์ง๊ฐ ์์ต๋๋ค.
- ๋ณ์์ ํ ๋นํ ์ ์์ด์ผ ํฉ๋๋ค.
- ํจ์์ ์ธ์๋ก ์ ๋ฌ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ํจ์์ ๋ฐํ๊ฐ์ ์ฌ์ฉํ ์ ์์ด์ผ ํฉ๋๋ค.
๊ณ ์ฐจ ํจ์๋ ํจ์๋ฅผ ๋ค๋ฅธ ํจ์์ ๋งค๊ฐ ๋ณ์, ์ธ์, ๋ฐํ ๊ฐ์ ์ ์ฉํ ํจ์๋ฅผ ๋งํฉ๋๋ค.
์ฝํ๋ฆฐ ํ์ผ(.kt) -> ๋ฐ์ดํธ ์ฝ๋(.class) (์ฝํ๋ฆฐ ์ปดํ์ผ๋ฌ์ ์ํด)
finalํค์๋๊ฐ ๋ถ์ต๋๋ค.
open ํค์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ค๋ฒ๋ผ์ด๋ํ๊ณ ์ถ์ ๋ฉ์๋๋ ํ๋กํผํฐ๋ open์ ๋ถ์ฌ์ผ ํฉ๋๋ค.
(open ํด๋์ค๋ฅผ ์์ํด๋ ๊ทธ ํด๋์ค์ ํจ์๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ๋ ค๋ฉด ๊ทธ ํจ์๋ open ๋ถ์ฌ์ผ ํจ)
- ์ ์ ํ์
์ธ์ด๋ ๋ฐ์ดํฐ ํ์
์ ์ปดํ์ผ ์์ ์ ๊ฒฐ์ ํ๋ ์ธ์ด์
๋๋ค.(ex. c++, java)
- ๋์ ํ์
์ธ์ด๋ ๋ฐ์ดํฐ ํ์
์ ๋ฐํ์์ ๊ฒฐ์ ํ๋ ์ธ์ด์
๋๋ค.(ex. python, javascript)
ํ์
์ถ๋ก ์ด๋ ๋ฌธ๋งฅ์ ํ์
์ ์๋์ผ๋ก ์ ์ถํ๋ ๊ฒ์ ๋งํ๋ฉฐ, ๊ผญ ๋ช
์์ ์ผ๋ก ํ์
์ ์ง์ ํ์ง ์์๋ ๋ฉ๋๋ค.
์ง์ฐ ์ด๊ธฐํ๋ ๊ฐ์ฒด๋ฅผ ๋์ค์ ์ด๊ธฐํํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
์ฝํ๋ฆฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋์ค์ ํ๋กํผํฐ๊ฐ null๊ฐ์ ๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ์
๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ๋์ค์ ์ป์ ์ ์๋ ๊ฒฝ์ฐ ์ฆ ๋ฐ๋ก ์ด๊ธฐํํ ์ ์๋ ์ํฉ์์ ์ง์ฐ ์ด๊ธฐํ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ง์ฐ ์ด๊ธฐํ๋ lateinit๊ณผ by lazy ํค์๋๋ฅผ ํตํด์ ํ ์ ์์ต๋๋ค.
lateinit์ var๋ก ์ ์ธ๋ ํ๋กํผํฐ๋ง ๊ฐ๋ฅํ๋ฉฐ ํ๋กํผํฐ์ ๋ํ ๊ฒํฐ์ ์ธํฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
lazy๋ val์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ ํธ์ถ ์์ ์ by lazy{โฆ} ๋ธ๋ก ๋ถ๋ถ์ ์ด๊ธฐํ๋ฅผ ์งํํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ val์ด๋ฏ๋ก ๊ฐ์ ๋ค์ ๋ณ๊ฒฝํ ์ ์๋ค๋ ํน์ง์ด ์์ต๋๋ค.
by lazy๋ 3๊ฐ์ง ๋ชจ๋๊ฐ ์์ต๋๋ค.
SYNCHRONIZED๋ ๋ํดํธ ์ค์ ์ด๋ฉฐ ๋ฝ์ ์ฌ์ฉํด์ ๋จ์ผ ์ค๋ ๋๋ง์ด ์ฌ์ฉํ๋ ๊ฒ์ ๋ณด์ฅํฉ๋๋ค.
PUBLICATION์ ๋ค์ค์ค๋ ๋๊ฐ ์ ๊ทผํ ์ ์์ง๋ง, ์ฒ์ ์ด๊ธฐํ๋ ๊ฐ์ด ๋ฐํ ๊ฐ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
NONE์ ๋ฝ์ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ค์ค ์ค๋ ๋๊ฐ ์ ๊ทผํ ์ ์๊ณ ๋น ๋ฆ
๋๋ค. ํ์ง๋ง ๊ฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ ์ ์๋ค๋ ๋จ์ ์ด ์์ต๋๋ค.
isํค์๋๋ ํ์
์ ์ฒดํฌํ๋๋ฐ ์ฌ์ฉ๋๊ณ ํ์
์ฒดํฌ๊ฐ ๋๋๋ฉด
์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก ํ์
์บ์คํ
์ ํด์ค๋๋ค.(์ค๋งํธ ์บ์คํธ)
asํค์๋๋ ์๋ฃํ์ ๋ณํํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์๋น์ค ์ฐ์ฐ์๋ null์ผ๋์ ๊ฐ์ ์ง์ ํ ์ ์๋ ์ฐ์ฐ์์
๋๋ค.
Ex) val str = s ?: "Empty" (s๊ฐ null์ผ๋ "Empty"๋ก ์ด๊ธฐํ)
Safe call ์ฐ์ฐ์๋ null์ด ์๋ ๊ฒฝ์ฐ์๋ง ํจ์๋ฅผ ํธ์ถํฉ๋๋ค.
as?์ฐ์ฐ์๋ ์๋ฃํ ๋ณํ์ ๋ฐ์ํ๋ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
Ex) val str: String? = 128 as String ๋ exception์ด ๋ฐ์ํ๋ฉฐ, val str: String? = 128 as? String์ผ๋ก ํ๋ฉด exception์ด ๋ฐ์ํ์ง ์๊ณ null๋ก ์ด๊ธฐํํฉ๋๋ค.
!!์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด null๊ฐ์ด ์๋์ ๋ช
์ํ๋ ๊ฒ์ด๋ฉฐ, null์ผ ๊ฒฝ์ฐ exception์ด ๋ฐ์ํฉ๋๋ค.
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์์ ํจ์(pure function)๋ฅผ ์กฐํฉํ๊ณ
๊ณต์ ์ํ(shared state), ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ(mutable data) ๋ฐ ๋ถ์์ฉ(side-effects)์ ํผํด์
ํ๋ก๊ทธ๋๋ฐํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๋ช
๋ นํ(imperative)์ด ์๋ ์ ์ธํ(declarative)์ด๋ฉฐ
์ ํ๋ฆฌ์ผ์ด์
์ ์ํ๋ ์์ ํจ์๋ฅผ ํตํด ์ ๋ฌ๋ฉ๋๋ค.
Enum ํด๋์ค์ Enum ์์๋ ์ต๋ช
ํด๋์ค๋ฅผ ์ ์ธํ ์ ์์ต๋๋ค.
Enum ํด๋์ค๋ ์ธํฐํ์ด์ค ๊ตฌํ์ ๊ฐ๋ฅํ์ง๋ง, ์์์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
์์์ byํค์๋์ ํจ๊ป ์ฌ์ฉํฉ๋๋ค.
์์์ ์ฌ์ฉํ๋ฉด ์์๋ ํด๋์ค๊ฐ ๊ฐ์ง ๋ฉค๋ฒ๋ฅผ ์ฐธ์กฐ ์์ด ํธ์ถํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์์์ ์ฌ์ฉํ๋ ์ด์ ๋ ์ฝํ๋ฆฐ์ ๋ฌด๋ถ๋ณํ ์์์ ๋ง๊ธฐ ์ํด์ ๊ธฐ๋ณธ์ ์ผ๋ก final ํด๋์ค์ด๊ธฐ ๋๋ฌธ์
์์์ ์ฌ์ฉํ๋ฉด ์์ ์์ด ํด๋์ค๋ฅผ ์์ํ ํจ๊ณผ๋ฅผ ์ป์ ์ ์์ด์ ์ฌ์ฉ๋ฉ๋๋ค.
map๊ณผ flatMap ๋ชจ๋ iterableํ ๋์์ ์ํํ๋ฉด์ ๊ทธ ์์๋ฅผ ์กฐ์ํ ์ ์๋ ํจ์๋ค์
๋๋ค.
์ฐจ์ด์ ์ flatMap ํจ์๋ map๊ณผ ๋ฌ๋ฆฌ ๊ผญ iterableํ ๊ฐ์ ๋ฐํํด์ผ ํ๋ ์ ์ด ๋ค๋ฆ
๋๋ค.
์ฝํ๋ฆฐ์ ==๋ ๋ด๋ถ์ ์ผ๋ก equals() ๋ฉ์๋๋ฅผ ํธ์ถํด์ ๊ฐ์ฒด์ ๋๋ฑ์ฑ์ ๋น๊ตํฉ๋๋ค.
์ฝํ๋ฆฐ์ ===์ฐ์ฐ์๋ ์๋ฐ์์ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ๋น๊ตํ ๋ ์ฌ์ฉํ๋ == ์ฐ์ฐ์์ ๊ฐ์ต๋๋ค.
read-only์ธ์ง ์ฐจ์ด
- ArrayList
- ๋ด๋ถ์ ๋ฐฐ์ด์ ๋๊ณ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ฉด ํด๋น ๋ฐฐ์ด์ setํ๋ ์์ผ๋ก ์ฒ๋ฆฌํ๋ค.
- ๋ด๋ถ ๋ฐฐ์ด์ size๊ฐ ์ปค์ ธ์ผ ํ ๋ ๊ธฐ์กด ๋ฐฐ์ด์ copyํ๊ณ 1.5๋ฐฐ size ๋๋ฆฐ ์ ๋ฐฐ์ด์ ๋ง๋ค์ด ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋๋ค.
- ๋ฐ์ดํฐ ์ ๊ทผ O(1) (index๋ฅผ ํตํด ์ ๊ทผํ๊ธฐ ๋๋ฌธ)
- ๋ฐ์ดํฐ๋ฅผ ์ค๊ฐ์ ์ญ์ ํ๊ฑฐ๋ ์ถ๊ฐํ ๊ฒฝ์ฐ, ๋ค์ ๋ฐ์ดํฐ๋ฅผ shiftํด์ผ ํ๋ฏ๋ก O(N)
- ๋ด๋ถ์ ๋ฐฐ์ด๋ก ๋์ด์๊ธฐ ๋๋ฌธ์, ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฌ์ฉํ๋ค. ์ธ๋ฑ์ค๋ก ์ ๊ทผํ๋ฉด ์ธ๋ฑ์ค๋ก ์ ๊ทผํ ์์๋ง ๊ฐ์ ธ์ค์ง ์๊ณ , ์ฃผ๋ณ์ ๋ธ๋ญ๋ ์บ์๋ก ์ฝ์ด๋ค์ธ๋ค.
- LinkedList

