Kotlin - YunByungKwan/Fundamental GitHub Wiki

Kotlin

Kotlin์˜ data class์™€ Java์˜ class์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์„ค๋ช…

Kotlin์˜ data class๋Š” Java class์™€ ๋‹ฌ๋ฆฌ equals(), hashCode(), toString(), copy() ๋ฉ”์†Œ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.
๋˜ ๋‹ค๋ฅธ ํŠน์ง•์œผ๋กœ๋Š” ์ƒ์†์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ , getter/setter ๋ฉ”์„œ๋“œ๋ฅผ ๋ณ„๋„๋กœ ์ •์˜ํ•˜์ง€ ์•Š์•„๋„ ๋˜์„œ ํŽธ๋ฆฌํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Kotlin์˜ ๋ฒ”์œ„ ์ง€์ • ํ•จ์ˆ˜์— ๋Œ€ํ•ด ์„ค๋ช…

Kotlin์˜ ๋ฒ”์œ„ ์ง€์ • ํ•จ์ˆ˜๋Š” apply, also, run, let, with๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
My Image

์ฝ”ํ‹€๋ฆฐ์˜ ์žฅ์ ์— ๋Œ€ํ•ด ์„ค๋ช…

  • Java์™€ ๋˜‘๊ฐ™์ด JVM ์œ„์—์„œ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Java์™€ Kotlin์„ ๊ฐ™์ด ์‚ฌ์šฉํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • Java๋ณด๋‹ค null๊ฐ’์— ๋Œ€ํ•ด์„œ ์•ˆ์ •์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค๋ฉด letํ•จ์ˆ˜์™€ safe call์„ ํ•จ๊ป˜ ์“ฐ๊ฑฐ๋‚˜ ์—˜๋น„์Šค ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์•ˆ์ •์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ๋Œ€์ž…ํ•  ๋•Œ apply() ํ•จ์ˆ˜๋ฅผ ์“ฐ๋ฉด ์ข€ ๋” ์—ฐ๊ด€์„ฑ ์žˆ๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ™•์žฅํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ์˜ˆ๋ฅผ ๋“ค๋ฉด progressBar์˜ visibility๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ข€ ๋” ๊ฐ€๋…์„ฑ ์žˆ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ˆœ์ˆ˜ ํ•จ์ˆ˜(Pure Function)์— ๋Œ€ํ•ด ์„ค๋ช…

์ˆœ์ˆ˜ ํ•จ์ˆ˜๋Š” ๋™์ผํ•œ ์ž…๋ ฅ์— ๋Œ€ํ•ด์„œ ํ•ญ์ƒ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ 
๋‹ค๋ฅธ ์™ธ๋ถ€์˜ ์š”์†Œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

์ผ๊ธ‰ ๊ฐ์ฒด(First Class Citizen)์— ๋Œ€ํ•ด ์„ค๋ช…

์ผ๊ธ‰ ๊ฐ์ฒด์˜ ์กฐ๊ฑด์€ 3๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ณ ์ฐจ ํ•จ์ˆ˜(High-Order Function)์— ๋Œ€ํ•ด ์„ค๋ช…

๊ณ ์ฐจ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜, ์ธ์ž, ๋ฐ˜ํ™˜ ๊ฐ’์— ์ ์šฉํ•œ ํ•จ์ˆ˜๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

์ฝ”ํ‹€๋ฆฐ ์ปดํŒŒ์ผ ๊ณผ์ •

My Image
์ฝ”ํ‹€๋ฆฐ ํŒŒ์ผ(.kt) -> ๋ฐ”์ดํŠธ ์ฝ”๋“œ(.class) (์ฝ”ํ‹€๋ฆฐ ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด)

์ฝ”ํ‹€๋ฆฐ class๋ฅผ ์ž๋ฐ” class๋กœ ๋ณ€ํ™˜ํ• ๋•Œ ์•ž์— ์–ด๋–ค ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™๋‚˜

finalํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™์Šต๋‹ˆ๋‹ค.

์ฝ”ํ‹€๋ฆฐ์—์„œ ์ƒ์†ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ํ‚ค์›Œ๋“œ๋Š” ๋ฌด์—‡์ธ์ง€

open ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์˜ค๋ฒ„๋ผ์ด๋“œํ•˜๊ณ  ์‹ถ์€ ๋ฉ”์„œ๋“œ๋‚˜ ํ”„๋กœํผํ‹ฐ๋„ open์„ ๋ถ™์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
(open ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•ด๋„ ๊ทธ ํด๋ž˜์Šค์˜ ํ•จ์ˆ˜๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜๋ ค๋ฉด ๊ทธ ํ•จ์ˆ˜๋„ open ๋ถ™์—ฌ์•ผ ํ•จ)

์ •์  ํƒ€์ž… ์–ธ์–ด์™€ ๋™์  ํƒ€์ž… ์–ธ์–ด์— ๋Œ€ํ•ด ์„ค๋ช…

  1. ์ •์  ํƒ€์ž… ์–ธ์–ด๋ž€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ปดํŒŒ์ผ ์‹œ์ ์— ๊ฒฐ์ •ํ•˜๋Š” ์–ธ์–ด์ž…๋‹ˆ๋‹ค.(ex. c++, java)
  2. ๋™์  ํƒ€์ž… ์–ธ์–ด๋ž€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋Ÿฐํƒ€์ž„์— ๊ฒฐ์ •ํ•˜๋Š” ์–ธ์–ด์ž…๋‹ˆ๋‹ค.(ex. python, javascript)

ํƒ€์ž… ์ถ”๋ก ์— ๋Œ€ํ•ด ์„ค๋ช…

ํƒ€์ž… ์ถ”๋ก ์ด๋ž€ ๋ฌธ๋งฅ์ƒ ํƒ€์ž…์„ ์ž๋™์œผ๋กœ ์œ ์ถ”ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•˜๋ฉฐ, ๊ผญ ๋ช…์‹œ์ ์œผ๋กœ ํƒ€์ž…์„ ์ง€์ •ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

์ง€์—ฐ ์ดˆ๊ธฐํ™”์— ๋Œ€ํ•ด ์„ค๋ช…

์ง€์—ฐ ์ดˆ๊ธฐํ™”๋Š” ๊ฐ์ฒด๋ฅผ ๋‚˜์ค‘์— ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
์ฝ”ํ‹€๋ฆฐ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํด๋ž˜์Šค์˜ ํ”„๋กœํผํ‹ฐ๊ฐ€ null๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—
๊ฐ์ฒด์˜ ์ •๋ณด๋ฅผ ๋‚˜์ค‘์— ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์ฆ‰ ๋ฐ”๋กœ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์—์„œ ์ง€์—ฐ ์ดˆ๊ธฐํ™”๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์ง€์—ฐ ์ดˆ๊ธฐํ™”๋Š” lateinit๊ณผ by lazy ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
lateinit์€ var๋กœ ์„ ์–ธ๋œ ํ”„๋กœํผํ‹ฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋ฉฐ ํ”„๋กœํผํ‹ฐ์— ๋Œ€ํ•œ ๊ฒŒํ„ฐ์™€ ์„ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
lazy๋Š” val์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ ํ˜ธ์ถœ ์‹œ์ ์— by lazy{โ€ฆ} ๋ธ”๋ก ๋ถ€๋ถ„์˜ ์ดˆ๊ธฐํ™”๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  val์ด๋ฏ€๋กœ ๊ฐ’์„ ๋‹ค์‹œ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

by lazy์˜ ๋ชจ๋“œ์— ๋Œ€ํ•ด ์„ค๋ช…

by lazy๋Š” 3๊ฐ€์ง€ ๋ชจ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
SYNCHRONIZED๋Š” ๋””ํดํŠธ ์„ค์ •์ด๋ฉฐ ๋ฝ์„ ์‚ฌ์šฉํ•ด์„œ ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋งŒ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
PUBLICATION์€ ๋‹ค์ค‘์Šค๋ ˆ๋“œ๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ฒ˜์Œ ์ดˆ๊ธฐํ™”๋œ ๊ฐ’์ด ๋ฐ˜ํ™˜ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
NONE์€ ๋ฝ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ณ  ๋น ๋ฆ…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ’์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

isํ‚ค์›Œ๋“œ์— ๋Œ€ํ•ด ์„ค๋ช…

isํ‚ค์›Œ๋“œ๋Š” ํƒ€์ž…์„ ์ฒดํฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๊ณ  ํƒ€์ž… ์ฒดํฌ๊ฐ€ ๋๋‚˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ํƒ€์ž… ์บ์ŠคํŒ…์„ ํ•ด์ค๋‹ˆ๋‹ค.(์Šค๋งˆํŠธ ์บ์ŠคํŠธ)

asํ‚ค์›Œ๋“œ์— ๋Œ€ํ•ด ์„ค๋ช…

asํ‚ค์›Œ๋“œ๋Š” ์ž๋ฃŒํ˜•์„ ๋ณ€ํ™˜ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์—˜๋น„์Šค ์—ฐ์‚ฐ์ž(?:)

์—˜๋น„์Šค ์—ฐ์‚ฐ์ž๋Š” null์ผ๋•Œ์˜ ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค.
Ex) val str = s ?: "Empty" (s๊ฐ€ null์ผ๋•Œ "Empty"๋กœ ์ดˆ๊ธฐํ™”)

Safe call ์—ฐ์‚ฐ์ž(?.)

Safe call ์—ฐ์‚ฐ์ž๋Š” null์ด ์•„๋‹ ๊ฒฝ์šฐ์—๋งŒ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

์•ˆ์ „ํ•œ ์ž๋ฃŒํ˜• ๋ฐ˜ํ™˜ ์—ฐ์‚ฐ์ž(as?)

as?์—ฐ์‚ฐ์ž๋Š” ์ž๋ฃŒํ˜• ๋ณ€ํ™˜์‹œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Ex) val str: String? = 128 as String ๋Š” exception์ด ๋ฐœ์ƒํ•˜๋ฉฐ, val str: String? = 128 as? String์œผ๋กœ ํ•˜๋ฉด exception์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  null๋กœ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

Null๊ฐ’ ์•„๋‹˜ ๋ณด์ฆ ์—ฐ์‚ฐ์ž(!!)

!!์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด null๊ฐ’์ด ์•„๋‹˜์„ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ, null์ผ ๊ฒฝ์šฐ exception์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•ด ์„ค๋ช…

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ˆœ์ˆ˜ ํ•จ์ˆ˜(pure function)๋ฅผ ์กฐํ•ฉํ•˜๊ณ 
๊ณต์œ  ์ƒํƒœ(shared state), ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ(mutable data) ๋ฐ ๋ถ€์ž‘์šฉ(side-effects)์„ ํ”ผํ•ด์„œ
ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋ช…๋ นํ˜•(imperative)์ด ์•„๋‹Œ ์„ ์–ธํ˜•(declarative)์ด๋ฉฐ
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋Š” ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

์ฝ”ํ‹€๋ฆฐ์˜ Enum ํด๋ž˜์Šค์˜ ํŠน์ง•์— ๋Œ€ํ•ด ์„ค๋ช…

Enum ํด๋ž˜์Šค์˜ Enum ์ƒ์ˆ˜๋Š” ์ต๋ช… ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Enum ํด๋ž˜์Šค๋ผ๋ฆฌ ์ƒ์†์ด ๊ฐ€๋Šฅํ•œ์ง€?

Enum ํด๋ž˜์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ƒ์†์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ฝ”ํ‹€๋ฆฐ์˜ ์œ„์ž„(Delegation)์— ๋Œ€ํ•ด์„œ ์„ค๋ช…

์œ„์ž„์€ byํ‚ค์›Œ๋“œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์œ„์ž„์„ ์‚ฌ์šฉํ•˜๋ฉด ์œ„์ž„๋œ ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์ง„ ๋ฉค๋ฒ„๋ฅผ ์ฐธ์กฐ ์—†์ด ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์œ„์ž„์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ์ฝ”ํ‹€๋ฆฐ์€ ๋ฌด๋ถ„๋ณ„ํ•œ ์ƒ์†์„ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ final ํด๋ž˜์Šค์ด๊ธฐ ๋•Œ๋ฌธ์—
์œ„์ž„์„ ์‚ฌ์šฉํ•˜๋ฉด ์ƒ์† ์—†์ด ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•œ ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์–ด์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ฝ”ํ‹€๋ฆฐ์˜ map๊ณผ flatMap์˜ ์ฐจ์ด์ 

map๊ณผ flatMap ๋ชจ๋‘ iterableํ•œ ๋Œ€์ƒ์„ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ทธ ์›์†Œ๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋“ค์ž…๋‹ˆ๋‹ค.
์ฐจ์ด์ ์€ flatMap ํ•จ์ˆ˜๋Š” map๊ณผ ๋‹ฌ๋ฆฌ ๊ผญ iterableํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋Š” ์ ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

== ์—ฐ์‚ฐ์ž

์ฝ”ํ‹€๋ฆฐ์˜ ==๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ equals() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๊ฐ์ฒด์˜ ๋™๋“ฑ์„ฑ์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

=== ์—ฐ์‚ฐ์ž

์ฝ”ํ‹€๋ฆฐ์˜ ===์—ฐ์‚ฐ์ž๋Š” ์ž๋ฐ”์—์„œ ๊ฐ์ฒด์˜ ์ฐธ์กฐ๋ฅผ ๋น„๊ตํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” == ์—ฐ์‚ฐ์ž์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Collection

List vs MutableList

read-only์ธ์ง€ ์ฐจ์ด

ArrayList vs LinkedList

  • ArrayList
    • ๋‚ด๋ถ€์— ๋ฐฐ์—ด์„ ๋‘๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ํ•ด๋‹น ๋ฐฐ์—ด์— setํ•˜๋Š” ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.
    • ๋‚ด๋ถ€ ๋ฐฐ์—ด์˜ size๊ฐ€ ์ปค์ ธ์•ผ ํ•  ๋•Œ ๊ธฐ์กด ๋ฐฐ์—ด์„ copyํ•˜๊ณ  1.5๋ฐฐ size ๋Š˜๋ฆฐ ์ƒˆ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š”๋‹ค.
    • ๋ฐ์ดํ„ฐ ์ ‘๊ทผ O(1) (index๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ)
    • ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘๊ฐ„์— ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ, ๋’ค์˜ ๋ฐ์ดํ„ฐ๋ฅผ shiftํ•ด์•ผ ํ•˜๋ฏ€๋กœ O(N)
    • ๋‚ด๋ถ€์— ๋ฐฐ์—ด๋กœ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผํ•˜๋ฉด ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผํ•œ ์›์†Œ๋งŒ ๊ฐ€์ ธ์˜ค์ง€ ์•Š๊ณ , ์ฃผ๋ณ€์˜ ๋ธ”๋Ÿญ๋„ ์บ์‹œ๋กœ ์ฝ์–ด๋“ค์ธ๋‹ค.
  • LinkedList
โš ๏ธ **GitHub.com Fallback** โš ๏ธ