~ Today I Learned ~
โ๏ธ ํ๋ก๊ทธ๋๋จธ์ค ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด (๋ฌธ์์ด ๋ด๋ฆผ์ฐจ์์ผ๋ก ๋ฐฐ์นํ๊ธฐ)
โ๏ธ ์คํ ๋ค๋๋ฐ ๊ณผ์ (ํผ๊ทธ๋งUI๋ฅผ XML๋ก ๊ตฌํ)
โ๏ธ ์ข
ํฉ๋ฐ 3์ฃผ์ฐจ ๋ค์ ์๊ฐ ์๋
(์งํ์ค) ๋ฐ์ ๊ฐ์ธ๊ณผ์ ์ถ๊ฐ ๊ตฌํ ์๋
(์๊ฐ์ด ๋จ์ผ๋ฉด) ํค์ค์คํฌ ๋ฆฌํฉํ ๋ง
(์๊ฐ์ด ๋จ์ผ๋ฉด) ๊ฐ์ธ ํ๋ก์ ํธ ์์
1. ํ๋ก๊ทธ๋๋จธ์ค ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด (๋ฌธ์์ด ๋ด๋ฆผ์ฐจ์์ผ๋ก ๋ฐฐ์นํ๊ธฐ)
- ์ ๋ ฌ์ ํ์ ๋, ์๋ ๋๋ฌธ์๋ ์๋ฌธ์๋ณด๋ค ์์ ๊ฐ์ ๊ฐ์ง๋ค.
๐กsortedWith()
fun <T> Iterable<T>.sortedWith(comparator: Comparator<in T>): List<T>
- ์ฌ์ฉ์๊ฐ ์ ๊ณตํ ๋น๊ต์(Comparator)์ ๋ฐ๋ผ ์ปฌ๋ ์ ์ ์ ๋ ฌ
- ์ ๋ ฌ๋ ์๋ก์ด ์ปฌ๋ ์ ์ ๋ฐํํ๋ฉฐ, ์๋ณธ ์ปฌ๋ ์ ์ ๋ณ๊ฒฝํ์ง ์์
- comparator: ์ ๋ ฌ์ ์ฌ์ฉ๋ ๋น๊ต์
Comparator ์ธํฐํ์ด์ค์ compare() ๋ฉ์๋๋ฅผ ๊ตฌํํ์ฌ ๋ ์์๋ฅผ ๋น๊ต
val list = listOf(3, 1, 4, 1, 5, 9)
val sortedList = list.sortedWith(Comparator { a, b -> b - a })
println(sortedList) // ์ถ๋ ฅ: [9, 5, 4, 3, 1, 1], ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
val numbers = listOf(5, 3, 8, 2, 7)
val sortedNumbers = numbers.sortedWith(Comparator { a, b -> b.compareTo(a) })
println(sortedNumbers) // ์ถ๋ ฅ: [8, 7, 5, 3, 2]
val words = listOf("apple", "banana", "orange", "kiwi")
val sortedWords = words.sortedWith(compareBy { it.length })
println(sortedWords) // ์ถ๋ ฅ: [kiwi, apple, banana, orange], ๋ฌธ์ ๊ธธ์ด์ ๋ฐ๋ฅธ ์ ๋ ฌ
data class Person(val name: String, val age: Int)
val people = listOf(Person("Alice", 30), Person("Bob", 25), Person("Charlie", 35))
val sortedPeople = people.sortedWith(compareBy<Person> { it.age }.thenBy { it.name })
println(sortedPeople)
// ์ถ๋ ฅ: [Person(name=Bob, age=25), Person(name=Alice, age=30), Person(name=Charlie, age=35)]
2. ์คํ ๋ค๋๋ฐ ๊ณผ์ (ํผ๊ทธ๋งUI๋ฅผ XML๋ก ๊ตฌํ)
๐จ ์ผ์ ์ฐ์
์์ ์๊ฐ
[US] ๋ฉ์ธํ๋ฉด์์ Sign in์ ๋๋ ์ ๋ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๊ฐ๋ค
- [1์๊ฐ][UI] ์ธํธ๋ก ํ์ด์ง UI ์ค๊ณ
- [2์๊ฐ][UI] ๋ก๊ทธ์ธ ํ์ด์ง UI ์ค๊ณ
- [1์๊ฐ] UI ์์ด์ฝ, ํ
์คํธ, ๋ฒํผ ๋ฐฐ์น ๋ฐ ๋ฐฐ์ด
- [1์๊ฐ] ์ธํํ
์คํธ ์ค์
- [0.5์๊ฐ] ์ธํ
ํธ๋ก ๊ฐ ํ์ด์ง ์ฐ๊ฒฐ
- ๊ณผ์ ์์ ์ , ์ผ์ ์ฐ์ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ์์ ์๊ฐ์ ์ฐ์ ํด๋ณด์๋ค. ์ด 3์๊ฐ 30๋ถ ์ ๋๋ฅผ ์์ํ๋ค.
์ค์ ์๊ฐ
[US] Sign in์ ๋๋ ์ ๋ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๊ฐ๋ค
- [50๋ถ][UI] ์ธํธ๋ก ํ์ด์ง UI ์ค๊ณ // ์ด์ค ๋ฒํผ ์ค๊ณ ์คํต, ํ๋์ ๋ฒํผ์ผ๋ก ์ค๊ณ
- [52๋ถ][UI] ๋ก๊ทธ์ธ ํ์ด์ง UI ์ค๊ณ // Edittext์ ์์ฒด ๋ฐฐ๊ฒฝ ์ ์ฉ
- [41๋ถ] UI ์์ด์ฝ, ํ
์คํธ, ๋ฒํผ ๋ฐฐ์น ๋ฐ ๋ฐฐ์ด
- [5๋ถ] ์ธํํ
์คํธ ์ค์
- [5๋ถ] ์ธํ
ํธ๋ก ๊ฐ ํ์ด์ง ์ฐ๊ฒฐ (5๋ถ)
- ์ค์ ๋ก 1์ฐจ ์ปค๋ฐ, ์ต์ ๊ตฌํ๊น์ง ๊ฑธ๋ฆฐ ์๊ฐ์ ์์ ๊ฐ๋ค. (์ด 2์๊ฐ 33๋ถ)
- ๋ก๊ทธ์ธ ํ์ด์ง UI๊ฐ ์๊ฐํ๋ ๊ฒ๋ณด๋ค ๋นจ๋ฆฌ ๊ฑธ๋ ธ๊ณ , ์ ์ด์ UI๊ตฌํ ๊ณผ์ ๋ผ ์กํฐ๋นํฐ๋ฅผ ์ธํ ํธ๋ก ์ฐ๊ฒฐํด์ค ์๊ณ ๊ฐ ์ ์๋ค. ๋ค๋ง ์๊ฐ๋ณด๋ค ์ธํธ๋ก ํ์ด์ง์์ '๋ ๊ฐ๊ฐ ๊ฒน์ณ์ง ๋ชจ์์ ๋ฒํผ'์ ๊ตฌํํ๋ ๊ฒ์ ๊ณ ๋ฏผํ๋ ์๊ฐ์ด ๊ธธ์๋ค. ๊ธฐ์กด ๋ฒํผ ๋ชจ์์ rotationY ์ค๋ ค๋ค๊ฐ, ๊ทธ๊ฒ๋ณด๋ค ๋ ๊ทผ๋ณธ์ ์ธ ํด๊ฒฐ์ฑ ์ ์์๊น ๊ณ ๋ฏผํ๋ ๊ฒ ๊ฐ๋ค.
๐จ 1์ฐจ ๊ตฌํ
- ์์ ๋ด์ฉ์ผ๋ก 1์ฐจ ๊น ์ปค๋ฐ์ ์๋ฃํ๋ค.
- ๋ค๋ง ์ฃผ์ด์ง ๋๋ก ์๋ฒฝํ ๊ณผ์ ๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ํด๊ฒฐํด์ผ ํ ๋ถ๋ถ์ ์๋์ ๊ฐ์๋ค.
- ๋ฒํผ ๋ ๊ฐ๊ฐ ๊ฒน์ณ์ง ๋ชจ์ ๋ฐ ๊ทธ๋ฆผ์ ๊ตฌํ
- ํ์ฌ EditText์ ์ด๋ฏธ์ง๋ฅผ background๋ก ์ฃผ์๋๋ฐ, ์
๋ ฅ ์ ์๋ถ๋ถ์ margin์ด ๋ถ์กฑํ์ฌ ํด๋น๋ถ๋ถ ํด๊ฒฐ
(EditText์ Background๋ฅผ ์ด๋ฏธ์ง๋ทฐ๋ก ๋ถ๋ฆฌํด์, ์ด๋ฏธ์ง๋ทฐ ์์ EditText๋ฅผ ๋ฃ์ด์ผ ํ ๊น ๊ณ ๋ฏผ)
- ์์ ๋ด์ฉ์ ํด๊ฒฐํ๊ธฐ ์ํด ์ถ๊ฐ์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ ์ค์ด๋ฉฐ, ๋ค ํด๊ฒฐ์ 2์ฐจ ์ปค๋ฐ ๋ฐ ํธ์ฌ๋ฅผ ํ ์๊ฐ์ด๋ค.
๐จ 2์ฐจ ๊ตฌํ
- (+ 17๋ถ) ์ธํธ๋ก ํ๋ฉด ๋ฒํผ 2๊ฐ๋ก ๋ถ๊ธฐํ๊ธฐ
- Xmlํ์ผ์ ์๋ก ๋ง๋ค์ด์ ๊ฐ Radius ๊ฐ์ ์์ ํ๋ค. (topRight, bottomRightRadius / topLeft,bottomLeftRaius)
- ๋ฒํผ์ Background๋ก ์ง์ ํ์ฌ ์ฝ๊ฒ ์๋ฃํ์๋ค.
- ์ค์ ๋ก ๋ํ ์ผํ๊ฒ ์์ ํ๊ฒ๋๋ฉด, ๋ค์ํ ํด์๋์ ๋์ํ๊ธฐ ์ํด์๋ ์๋ฌด๋๋ xml์ด svg๋ณด๋ค ๋ซ๋ค๊ณ ํ๋ค. - (+ 15๋ถ) EditText ๋ฐฐ๊ฒฝ์ ๋ง๋ ์ ์ ํ ๋ฐฉ๋ฒ ์ฐพ๊ธฐ
- ์ผ์ชฝ์ด ๋๋ฌด ๋ถ์ด์๋ ๋ฌธ์ ๋ Padding ๊ฐ์ ์ค์ ์์ฝ๊ฒ ๋ช ์ด๋ง์ ํด๊ฒฐ์ด ๊ฐ๋ฅํ๋ค.
- ํํฐ๋๊ป ์ด๋ฐ์์ผ๋ก EditText์ ๋ฐฐ๊ฒฝ์ ์ฃผ๋ ๊ฒ ํ์ ์์ ์ฐ์ด๋ ์ฌ์ญค๋ณด๋, ์ง๊ธ์ฒ๋ผ ๋ณด๊ธฐ์ ์ ๋ง๋ค์ด์ก์ผ๋ฉด ์ด๋ ๊ฒ ๋ง๋ค์ด๋ ๋๊ณ , ์ข ๋ ๋ํ ์ผํ๊ฒ ๊พธ๋ฉฐ์ผ ํ๋ฉด ๋ฆฌ๋์ด/ํ๋ ์/์ปจ์คํธ๋ ์ธํธ ๋ ์ด์์ ์์ ๋ฃ๊ธฐ๋ ํ๋ค๊ณ ํ์ จ๋ค. - ๊น 2์ฐจ ์ปค๋ฐ/ํธ์ฌ, ๋ฉํ ๋๊ป ์ง๋ฌธํ๋ ๋ฑ์ ์๊ฐ๊น์ง ํฉ์ณ์ 2์ฐจ ๊ตฌํ์ ์ด 30๋ถ ์ ๋๊ฐ ๊ฑธ๋ ธ๋ค.
- ์์ ์ฐ์ ์๊ฐ์ด 3์๊ฐ 30๋ถ, ์ค์ ๊ตฌํ์๊ฐ์ 3์๊ฐ 10๋ถ์ด ๊ฑธ๋ฆฐ ๊ณผ์ ์๋ค.
๐ก sp์ dp์ ์ฐจ์ด
- sp๋ TextView์ textSize๋ฅผ ์ง์ ํ ๋ ์ฌ์ฉ
- dp๋ ํ๋ฉด์ ๋ฐ๋ผ ์ฌ์ด์ฆ๊ฐ ๋ฌ๋ผ์ง์ง ์๊ณ ๊ณ ์ ๋ ๊ฐ
- sp๋ ์์คํ ์ ์ฌ์ด์ฆ์ ๋ฐ๋ผ TextView๊ฐ ์์์ง๊ฑฐ๋ ์ปค์ง
- dp๋ TextView์ ์ฌ์ด์ฆ๋ฅผ ๊ณ ์ ๊ฐ์ผ๋ก ์ ์ง
3. ์ข ํฉ๋ฐ 3์ฃผ์ฐจ ๋ณต์ต ์๋
- viewpager2์ fragment๋ก ํ๋ฉด์ ๊ตฌ์ฑํ๋ ์ , ์๋น์ค ์ฐ์ฐ์(?:), ์ธํ ํธ ์ฒ๋ฆฌ ๋ฑ์ ์ด์ ์ผ ์ดํดํ ์ ์์๋ค.
- ๋ค๋ง ์ฌ์ ํ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์์ด ์ฝ๊ฒ ์ดํดํ๊ธฐ ์ด๋ ต๋ค๊ณ ๋๊ปด์, ์๋ จ ์ดํ์ ๋ค์ ์๋ํด๋ณด์.
(์) const val์ ์ฌ์ฉํ๋ ์ด์ , ํด๋น ๋ฐฉ๋ฒ์์ companion object๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ฑ์ ๋ํ ์ดํด ๋ถ์กฑ
~ Trouble Shooting ~
1. XML์์์ '&' ์ฌ์ฉ ์ค๋ฅ
- & ๋ฌธ์๋ XML์์ ํน์ ๋ฌธ์๋ก ์ธ์๋๋ฏ๋ก ํด๋น ๋ฌธ์๋ฅผ ์ง์ ์ฌ์ฉํ ์ ์๋ค. ๋์ XML์์ ํน์ ๋ฌธ์๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ํด๋น ๋ฌธ์์ ์ํฐํฐ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
- &์ ์ํฐํฐ์ธ & ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
android:hint=" Username, Email & Phone Number"
2. ๋ฒํผ ์์ ์์ด ์๋ฌธ์๊ฐ ๋๋ฌธ์๋ก ํ์
- ์๋๋ก์ด๋ ์คํ๋์ค XML ํ์ผ์์ android:text ์์ฑ์ ์ง์ ํ ํ
์คํธ๋ ๋๋ฐ์ด์ค์ ๊ธฐ๋ณธ ํ
๋ง๋ ์คํ์ผ์ ๋ฐ๋ผ ๋๋ฌธ์๋ก ํ์๋ ์๋ ์๋ค. ํนํ, ์ผ๋ถ ๊ธฐ๋ณธ ํ
๋ง๋ ๋ฒํผ ํ
์คํธ๋ฅผ ๋ชจ๋ ๋๋ฌธ์๋ก ํ์ํ๋๋ก ์ค์ ๋์ด ์๋ค.
์๋ง ๋์ ๊ฒฝ์ฐ appcompat.widget.AppcompatButton์ ์ฌ์ฉํด์ ๊ทธ๋ฐ ๊ฒ ๊ฐ์๋ค. - ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๋ค. ๋ชจ๋ ๋๋ฌธ์๋ก ํ์๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค. (textAllCaps)
android:textAllCaps="false"
3. Github์์ ํด๋ก ํ ํ๋ก์ ํธ gradle ๋น๋ ์ค๋ฅ
- ๋ณดํต์ SDK ๋ฌธ์ ๊ฐ ๋ง์๋ฐ, SDK๋ฅผ ์ค์นํ๊ณ ์ผ์น์์ผ๋ ์ ์ ์๋ ์ค๋ฅ๊ฐ ๋์ณ๋ฌ๋ค. ๊ด๋ จ ๋ด์ฉ์ผ๋ก ๊ตฌ๊ธ๋ง๊ณผ ์คํ์ค๋ฒํ๋ก์ฐ ๊ฒ์์ ์ค๋ซ๋์ ํ์ง๋ง ํด๊ฒฐ๋์ง ์์๋ค.
- ๊ฒฐ๊ตญ ํ์๋ถ์ด ๊ฐ์ฌํ๊ฒ๋ ๊ฑฐ์ 30๋ถ ๊ฐ๊น์ด ๋์์ฃผ์
จ๋๋ฐ, ์๋ํ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
- ๋ค๋ฅธ ์ปดํจํฐ๋ก ์๋ ๋ฐ sdk ์ผ์น
- .idea ํด๋๋ฅผ ์ญ์ ํ๊ณ ์ด๊ธฐ
- gradle์์ Firebase๋ฅผ ๋ถ๋ฌ์ค๋ ์์ญ / ์ค๋ฅ์์ญ ์ญ์ - ๊ฒฐ๋ก ์ Firebase ์๋ฒ๋ฅผ ์ด์ฉํ ํ๋ก์ ํธ์ด๊ธฐ ๋๋ฌธ์ Firebase ํค๊ฐ(?)๋ฑ์ด ์ฝ๋๋ ํ์ผ์ ํฌํจ๋๋๋ฐ, ์ด ๋ถ๋ถ์ด Git์ ์ ๋ก๋๋์ง ์์์ ์ฌ๋ฌ ๋ถ๋ถ์ด ๋๋ฝ๋์ด์ ์๊ธด ์ผ๋ก ์์๋๋ค. ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ํ๋ก์ ํธ ์ฃผ์ธ์๊ฒ ํด๋น ํ์ผ์ ์์ฒญํ๋ ๋ฐฉ๋ฒ๋ฐ์ ์์ ๊ฒ ๊ฐ์๋ค. ์ผ๋จ์ ์ฝ๋๋ง ์ฐธ์กฐํ๊ธฐ๋ก!
~ Retrospect ~
์ค๋ ๋ค์ดํฐ๋ธ์ ํฌ๋ก์คํ๋ซํผ์ ๋ํ ์๊ธฐ๋ฅผ ์ ๊น ๋๋ ์ ์๊ฐํด๋ณผ ๊ธฐํ๊ฐ ์๊ฒผ๋๋ฐ, ํ์คํ ๋ด๋
๋์ ํฌ์
ํ ์์ฐ๊ณผ ๋
ธ๋ ฅ์ ํ๋นํ์ง ์๊ธฐ ์ํด ์์ดํ
๊ณผ BM์ ์ข ๋ ๊ณ ๋ฏผํด๋ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
๊ณ ๋ฏผ์ ์ฐจ๊ทผ์ฐจ๊ทผํ๊ณ ... ๋น์ฅ์ ๋นจ๋ฆฌ ๋ฐฐ์์ ์ค๋ฅ์์ ์ธ์์ ๋ ๋ฅ์ํ๊ฒ ํ์.