์์ฆ ํ์๋ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ๊ณ ์๋ค.
์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ๋ค ๋ณด๋ฉด ๋ฐฐ์ด์ ๊ฑฐ์ ๋๋ถ๋ถ์ ๋ฌธ์ ์์ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ๊ณ , HashMap๋ ์ข ์ข ์ฌ์ฉํ๋ ๊ฒ ๊ฐ์๋ค.
๊ทธ๋์ ์ด๋ฒ์ ์ฝํ๋ฆฐ์ ๋ฐฐ์ด๊ณผ HashMap์ ์ฐจ์ด์ ๋ํด ๊ฐ๋จํ ์ค๋ช ํด๋ณด๊ณ ์ ํ๋ค.
์์ผ๋ก ์ด๋ฐ ๊ฐ๋จํ ์๊ณ ๋ฆฌ์ฆ ๊ฐ๋ ์ ๋ํ ํฌ์คํ ์ด ์ฌ๋ผ์ฌ ๊ฒ ๊ฐ๋ค.
1. ๋ฐฐ์ด(Array)
๋ฐฐ์ด์ ์ฝํ๋ฆฐ์ ๊ณต๋ถํ์ง ์์ ์ฌ๋์ด๋ผ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ํ๋๋ผ๋ ๊ณต๋ถํด ๋ณธ ๊ฒฝํ์ด ์์ผ๋ฉด ๋ฐ๋ก ์ ์ ์์ ๊ฒ์ด๋ค.
๋ฐ๋ก ๋ฐ์ดํฐ์ ์งํฉ์ ๋ฐฐ์ด์ด๋ผ๊ณ ํ๋๋ฐ ์๋ฐ์ ๋ฐฐ์ด ์ ์ธ๊ณผ๋ ๋ฌ๋ฆฌ ์ฝํ๋ฆฐ์ ๋ฐฐ์ด์ ์๋นํ ํธ๋ฆฌํ๋ฉด์๋ ๋ณต์ก(?)ํ๋ค.(ํ์ ๊ธฐ์ค)
ํ์๊ฐ ์ ๋ณต์กํ๊ฒ ๋๊ผ๋๋ฉด, ์ฝ๋๋ก ์ค๋ช ํด ์ฃผ๊ฒ ๋ค.
์๋ฐ์ ๊ฒฝ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ด ๋ฐฐ์ด์ ๋ง๋ค ์ ์๋ค.
int[] intArray;
String[] stringArray;
int intArray[];
String stringArray[];
ํ์ง๋ง ์ฝํ๋ฆฐ์ ๊ฒฝ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ธํ ์ ์๋ค.
val intArray1 = intArrayOf()
val intArray2 = arrayOf<Int>()
val intArray3 = Array(3) {0}
์ฝํ๋ฆฐ๊ณผ ์๋ฐ์ List ํ์์ Array๋ง ์๋ ๊ฒ์ ์๋์ง๋ง(List ๋ฑ) ์๋ฅผ ๋ค์ด์ Array๋ก๋ง ์ค๋ช ํ๋ค.
Array๋ List์ฒ๋ผ ๋ณด๋ List์ ํธ์งํ๋ List(MutableList)๊ฐ ๋๋์ด ์๋ ๊ฒ์ด ์๋ set๊ณผ get์ ๋ชจ๋ ํ ์ ์๋ค.
val array = Array<Char>(5) { 'a' }
array[array.lastIndex] = 'b'
println("array set result: ${array.toList()}")
val get = array[array.lastIndex]
println("array get result: $get")
array[array.lastIndex] = 'b'๋ array.set(array.lastIndex, 'b')๋ฅผ ๋ณํํ ์ฝ๋์ด๊ณ
get ๋ณ์๋ array.get(array.lastIndex)๋ฅผ ๋ณํํ ์ฝ๋์ด๋ค. ์ฝํ๋ฆฐ์ค๋ฝ๊ฒ
์์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ ๊ฒ์ด๋ค.
๊ธฐ์กด์ a, a, a, a, a์ ๋ฐฐ์ด์์ ๋ง์ง๋ง a๋ฅผ b๋ก ๋ณ๊ฒฝํ๊ณ , ๋ณ๊ฒฝํ ๋ง์ง๋ง index๋ฅผ ๊ฐ์ ธ์จ ๋ชจ์ต์ด๋ค.
ํ์ง๋ง ๋จ์ ๋ ์๋๋ฐ
๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๋ฐ๊ฟ ์ ์๋ค๋ ์ ์ด๋ค!
์ฒ์์ ๋ฐฐ์ด์ ์ ์ธํ ๋ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ์ ํด์ผ ํ๋๋ฐ,
val array = Array<Char>(5) { 'a' }
๋์ค์ ์ array์ ํฌ๊ธฐ๋ฅผ ์ด๊ณผํ๋ index์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๊ฑฐ๋ ๋ถ๋ฌ์ค๋ ค๊ณ ํ๋ฉด
ArrayIndexOutOfBoundsException์ด ๋ฐ์ํ ๊ฒ์ด๋ค.
์์ ๋จ์ ํ๋๋ก๋ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ ๋์ ์ ํ์ง๊ฐ ๋ง์ด ๋จ์ด์ง ํ ๋ฐ, ๋ ๋ค๋ฅธ ๋จ์ ์ด ํ๋ ๋ ์๋ค.
์์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง Array์์ drop์ด ๋์ง ์์๋ค.
ํ์๋ ์์ array์์ 1๋ฒ์งธ์ index๋ฅผ ์ญ์ ํ๊ธฐ ์ํด drop์ ์ฌ์ฉํ๋ค.
array.drop(1)
println("array drop result: ${array.toList()}")
ํ์ง๋ง drop์ด ์ด๋ฃจ์ด์ง์ง ์์๋ค.
drop์ด ๋ ๋ชจ์ต์ print ํด์ ๋ณด์ด๊ฒ ํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ์จ์ผ๋ง ํ๋ค.
println("array drop result: ${array.drop(1).toList()}")
array.drop()์ ์ฌ์ฉํ๋ฉด ๋ฐ๋ก array์ ๋ฐ์๋๋ ๊ฒ์ด ์๋ ๋ฐ๋ก ๋ณ์๋ก ๋ง๋ค์ด ์ฃผ์ด์ผ ์ญ์ ๋ ๋ฒ์ ์ array๋ฅผ ์ฌ์ฉํ ์ ์๋ ๋ฏํ๋ค.
์์ 2๊ฐ์ ๋จ์ ์ ์ง์ ํ๋ก๊ทธ๋๋จธ์ค๋ฅผ ํ๋ฉด์ ์ฐพ์๋ธ(?) ๋จ์ ๋ค์ด๋ค.
๊ทธ๋์ ํ์๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฆฌ์คํธ์ธ MutableList๋ฅผ ์์ฃผ ์ฌ์ฉํ๋ค ใ ใ .
ํ์๊ฐ ๋ฐฐ์ด์ ์ด์ฉํด ํด๊ฒฐํ ๋ฌธ์ ๋ค(ํ๋ก๊ทธ๋๋จธ์ค)
3๋ฒ์ ์ ์ธํ ๋๋จธ์ง ๋ฌธ์ ๋ค์ 2์ฐจ์ ๋ฐฐ์ด์ ์ด์ฉํด ํ์๋ค.
1. ๊ณต์ ์ฐ์ฑ (lv 1)
https://school.programmers.co.kr/learn/courses/30/lessons/172928
2. ๋ฐํ ํ๋ฉด ์ ๋ฆฌ(lv 1)
https://school.programmers.co.kr/learn/courses/30/lessons/161990
3. ๋ง์น ํ๊ธฐ(lv 1)
https://school.programmers.co.kr/learn/courses/30/lessons/161989
2. Map(HashMap)
์ด๋ฒ์๋ Map์ ์์๋ณผ ๊ฑด๋ฐ
map์ key์ value๋ก ๋๋์ด ์์ด์ key๋ก ํน์ value๋ฅผ ์ฐพ์ ์ ์๊ณ , ํน์ key์ ์ฌ๋ฌ ๊ฐ์ value๋ฅผ ๋ฃ์ ์ ์๋ค๋ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค(key์ value๊ฐ 1:1์ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ค.).
์ฌ๊ธฐ์ HashMap๊ณผ MutableMap์ ์ฐจ์ด๋ฅผ ๊ถ๊ธํดํ๋ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์๋๋ฐ,
HashMap์ MutableMap Interface์ ์ํ๋ ๋ค์ํ Map ์ค ํ๋๋ผ๊ณ ํ๋ค. ๊ทธ๋ ๊ธฐ์ hashMap์ mutableMap์ ํ ์ข ๋ฅ๋ผ๊ณ ํ๋ค.
๊ด๋ จ ์๋ฃ ๋งํฌ: https://velog.io/@moonpiderman/Kotlin-MutableMap-vs-HashMap
๋ฐ๋ก ์์ ๋ฅผ ํตํด ํ์ธํด ๋ณด์.
key๊ฐ int์ด๊ณ value๋ int์ธ map์ ์์ฑํด ์ฃผ์๋ค.
map์ ์์ฑ ๋ฐฉ๋ฒ์ Map<Type, Type>()์ ์ด์ฉํด์๋ ์์ฑํ ์ ์์ง๋ง, ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ์ธ์ด๋ kotlin์ด๊ธฐ ๋๋ฌธ์ ์ข ์ฝํ๋ฆฐ์ค๋ฌ์ด(?) map ์์ฑ์ ํด์ฃผ๋๋ก ํ์.
val map = mapOf(0 to 0, 1 to 1, 2 to 2)
val mutableMap = mutableMapOf(0 to 0, 1 to 1, 2 to 2)
๊ธฐ๋ณธ Map์ mapOf()์ผ๋ก, MutableMap์ mutableMapOf()์ผ๋ก ์์ฑ ๊ฐ๋ฅํ๋ค.(๊ทธ๋ผ hashMap๋ ์ด๋ป๊ฒ ์์ฑํ๋์ง ๊ฐ์ด ์กํ ๊ฒ์ด๋ค.)
์ถ๋ ฅํ๋ฉด ๊ฐ๋จํ๊ฒ ์ด๋ฐ ํ์์ผ๋ก ์ถ๋ ฅ๋๋ค.
์ด์ map์ ๋ฐ์ดํฐ๋ฅผ ์์ ํด ๋ณด๊ฒ ๋ค.
์ฐธ๊ณ ๋ก ๊ธฐ๋ณธ map์ ๋ฐ์ดํฐ ์์ ๊ณผ ์์ , ์ญ์ ๊ฐ ๋ถ๊ฐ๋ฅํ ๋ถ๋ณํ์ด๊ธฐ ๋๋ฌธ์ mutableMap์ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํด ๋ณด๊ฒ ๋ค.
mutableMap[3] = 3
println("mutableMap set result: $mutableMap")
mutableMap.remove(3)
println("mutableMap remove result: $mutableMap")
mutableMap[2] = 5
println("mutableMap modify result: $mutableMap")
์ฝ๋ ์์๋๋ก ์ค๋ช ํ์๋ฉด,
- mutableMap์ key๊ฐ 3์ด๊ณ , value๊ฐ 3์ธ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ค.
- mutableMap์ key๊ฐ 3์ธ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ค.
- mutableMap์ key๊ฐ 2์ธ ๋ฐ์ดํฐ์ value๋ฅผ 5๋ก ๋ณ๊ฒฝํ๋ค.
์ด๋ค. ์คํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์๊น ํ์๊ฐ ํ ๊ฐ์ key์ ์ฌ๋ฌ ๊ฐ์ value๊ฐ ๋ค์ด๊ฐ ์ ์๋ค๊ณ ํ์๋๋ฐ, ๊ทธ๋์ ๊ธฐ์กด์ ๋ฐ์ดํฐ์ธ 2๊ฐ ์ฌ๋ผ์ง๊ณ ์๋ก์ด ๋ฐ์ดํฐ์ธ 5๋ก ๋ฎ์ด ์์์ง ๊ฒ์ ํ์ธํ ์ ์๋ค.
ํ์๊ฐ Map์ ์ด์ฉํด ํด๊ฒฐํ ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
1. ๋ฌ๋ฆฌ๊ธฐ ๊ฒฝ์ฃผ(lv 1)
https://school.programmers.co.kr/learn/courses/30/lessons/178871
์์ ๋ฌธ์ ๋ ๋ฐฐ์ด๊ณผ map์ ๋ชจ๋ ์ด์ฉํด์ ํด๊ฒฐํ ์ ์์ง๋ง, ๋ฐฐ์ด์ ์ฌ์ฉํ๋ฉด ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค.(๋ด๊ฐ ๊ทธ๋ฌ์๋ค ใ )
3. ์๊ฐ ๋ณต์ก๋
๋ฐฐ์ด๊ณผ Map์ ์๊ฐ ๋ณต์ก๋๋ฅผ ์์ฃผ ๊ฐ๋จํ ์ค๋ช ํ์๋ฉด,
๋ฐฐ์ด์์ ํน์ ๊ฐ์ ์ฐพ์ผ๋ ค๊ณ ํ ๋, O(n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
์๋ฅผ ๋ค์ด์ ๋ฐฐ์ด A์์ A[5]์ ๊ฐ์ ์ฐพ์ผ๋ ค๊ณ ํ ๋, A[5]๋ฅผ ์ฐพ๊ธฐ ์ํด A[0] -> A[1]... ์์๋๋ก ๊ฒ์ํ๊ธฐ ๋๋ฌธ์ ์๊ฐ ๋ณต์ก๋๋ O(n)์ด ๋๋ค.
๋ง์ฝ 2์ฐจ์ ๋ฐฐ์ด์์ ํน์ ๊ฐ์ ์ฐพ์ผ๋ ค๊ณ ํ๋ค๋ฉด, O(n x n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ฒ ๋ ๊ฒ์ด๋ค.
Map์์ ํน์ ๊ฐ์ ์ฐพ์ ๋์๋ O(1)์ ์๊ฐ์ ๊ฐ์ง๋๋ฐ,
Map์ key์ ์ ๊ทผํด์ value๋ฅผ ์์๋ด๊ธฐ ๋๋ฌธ์ด๋ค.
์๊ฐ ๋ณต์ก๋์ ๋ ์์ธํ ์ค๋ช ์ ๋ค์์ ๊ธ๋ค์ ๋ณด๊ณ ๊ณต๋ถํด ๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
https://bb-library.tistory.com/144
4. ์ ๋ฆฌ
- ๋ ๋ค ํน์ ์ํฉ์์ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์์ ๊ฒ ๊ฐ๋ค.
- ์๊ณ ๋ฆฌ์ฆ์ ํ ๋์๋ ๋ถ๋ณ์ฑ๋ณด๋ค ๊ฐ๋ณ์ฑ์ด ์ข์ ๊ฒ์ ์ด์ฉ ์๊ฐ ์๋ ๊ฒ ๊ฐ๋ค. ๊ฐ๋ณ์ฑ๊ณผ ๋ถ๋ณ์ฑ์ ์ฐจ์ด๋ ์ถํ๊ฒ ๊ณต๋ถํด ๋ด์ผ๊ฒ ๋ค.
- ํ์ฐธ ๋์ ๋๊ณ ์๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ค์ ํธ๋๊น ์๋ ์ ํ์ฐธ ํ ๋์ ๊ฐ์ด ๋ค ์ฌ๋ผ์ง ๊ฒ ๊ฐ๋ค. ์ด๋์ ์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ๋ ๊พธ์คํ ํด์ผ ํ๋ค๋ ๋ง์ ๋ฐ๋ก ์ดํดํ ์ ์์๋ค.
- ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ๊ณ ๋๋ฉด ์ญ์ ์ฑ์ทจ๊ฐ์ด ์ปธ๋ค. ๋ชจ๋ ํ
์คํธ ์ผ์ด์ค๋ฅผ ํต๊ณผํ์ ๋์ ์ง๋ฆฟํจ(?)์ ์์ ์๊ฐ ์๋ค.
์์ผ๋ก ์ข ์ข ์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ ํฌ์คํ ๋ ์ฌ๋ ค์ผ ํ ๊ฒ ๊ฐ๋ค.
'๐ | Kotlin > โจ | ๊ฐ๋ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kotlin] ์์(Inheritance) (0) | 2024.06.14 |
---|---|
[Kotlin] coroutine ๊ฐ๋ ์ ๋ฆฌ (0) | 2022.04.03 |