~ Today I Learned ~
โ๏ธ ํ๋ก๊ทธ๋๋จธ์ค ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด (ํธ๋ํฐ ๋ฒํธ ๊ฐ๋ฆฌ๊ธฐ)
gitignore์ ๋ํด ์์๋ณด๊ธฐ
(์งํ์ค) ์ฝํ๋ฆฐ ๋ฌธ๋ฒ ๋๋ ๋ฐ๊น์ง ๊ณต๋ถ ๋ฐ ๋ณต์ต
(์ฃผ๋ง๊น์ง ์งํ์ค) ํค์ค์คํฌ ๊ณผ์ Lv5 ๊น์ง ๋์
1. ํ๋ก๊ทธ๋๋จธ์ค ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด (ํธ๋ํฐ ๋ฒํธ ๊ฐ๋ฆฌ๊ธฐ)
- ๋ค์ํ ํจ์ ๋ฐ ๋ฌธ๋ฒ์ ๊ฐ๋ ์ ๋๋์ ๋ณด๋ ์๊ฐ์ด ๋์๋ค.
- split("")๋ฅผ ์ฌ์ฉํ ๋ ์ ์์ , for๋ฌธ์ ๋น๋กฏํ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ ๊ฐ๋ , ๋ฐฐ์ด์ ์ด๊ธฐํ์ joinToString()์ ๊ฐ๋ ๋ ๋ณต์ตํ๋ค.
๐ก String์ ๋ฐ๋ก withIndex() ๋ lastIndex()๋ฅผ ์ด๋ป๊ฒ ์ฐ๋ ๊ฑธ๊น?
- String์ Array๋ List ํํ๊ฐ ์๋๋ฐ ์ ๋ฐ๋ก ์ธ๋ฑ์ค๊ฐ์ ์ฐพ์ ์ ์๋์ง ๊ถ๊ธํ๋ค.
- ๋ฌธ์์ด(String)์ ๋ด๋ถ์ ์ผ๋ก ๋ฌธ์(Char)์ ๋ฐฐ์ด๋ก ํํ๋๋ค๊ณ ํ๋ค.
๋ฐ๋ผ์ ๊ฐ ๋ฌธ์๋ ํด๋น ๋ฌธ์์ด์์์ ์์น๋ฅผ ๋ํ๋ด๋ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ ๊ฒ - ์ด๋ ์ฝํ๋ฆฐ ๋ฟ๋ง ์๋๋ผ, Java, Python, C#, JS ๋ชจ๋ ๋์ผํ๋ค๊ณ ํ๋ค.
- ๋ฐ๋ผ์, ๊ตณ์ด ๋ฐฐ์ด๋ก ๋ณํํด์ ๋ฌธ์ ๋ฅผ ํ ์ด์ ๊ฐ ์์๋ค.
๐ก padStart(length: Int, padChar: Char): String
- ๋ฌธ์์ด์ ์์ ๋ถ๋ถ์ ์ง์ ๋ ๊ธธ์ด๋งํผ์ ๋ฌธ์(padChar)๋ฅผ ์ถ๊ฐํ์ฌ ์ฃผ์ด์ง ๊ธธ์ด์ ๋ง์ถ๋ ์ญํ
- ๋น ๋ฌธ์์ด ""์ ํจ๋ฉ์ด ์ถ๊ฐ๋ ์์น (์ด๋ค ๋ฌธ์์ด์ด ์ค๋๋ผ๋ ๊ฒฐ๊ณผ์๋ ์ํฅ์ ์ฃผ์ง ์๊ธฐ์ ""์ ์ฌ์ฉํ๋ ๊ฒ ์ผ๋ฐ์ )
- "".padStart(phone_number.length - 4, '*') ๋ ์ ํ๋ฒํธ ๊ธธ์ด์์ ๋ง์ง๋ง 4์๋ฆฌ๋ฅผ ์ ์ธํ ๋งํผ *๋ฅผ ์ถ๊ฐํ ๋ฌธ์์ด ์์ฑ
๐ก takeLast(n: Int): String
- ๋ฌธ์์ด์ ๋ง์ง๋ง n๊ฐ์ ๋ฌธ์๋ฅผ ๋ฐํ
- ์ด ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์์๋ phone_number.takeLast(4)๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฒํธ์ ๋ง์ง๋ง 4์๋ฆฌ๋ฅผ ์ถ์ถ
๐กphone_number.withIndex()
- ๋ฌธ์์ด phone_number์ ๊ฐ ๋ฌธ์์ ํด๋น ๋ฌธ์์ ์ธ๋ฑ์ค๋ฅผ ์ํํ ์ ์๋ ๋ฐ๋ณต์(iterator)๋ฅผ ๋ฐํ
- ์ด ๋ฐ๋ณต์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฌธ์(์๋ฆฌ๋ฉํธ)์ ํด๋น ์ธ๋ฑ์ค๋ฅผ ๋์์ ๊ฐ์ ธ์ฌ ์ ์์
- for ((i, c) in phone_number.withIndex()) { ... }
- phone_number์ ๊ฐ ๋ฌธ์(c)์ ํด๋น ๋ฌธ์์ ์ธ๋ฑ์ค(i)๋ฅผ ๊ฐ์ ธ์์ ๋ฐ๋ณต์ ์ผ๋ก ์ฒ๋ฆฌ
- ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ์ฌ ์ ํ๋ฒํธ์ ๊ฐ ๋ฌธ์์ ํด๋น ์ธ๋ฑ์ค์ ์ ๊ทผ
๐ก.lastIndex
- ๋ฐฐ์ด๋ช .lastIndex ๋ฅผ ์ ๋ ฅํ๋ฉด ๋ฐฐ์ด์ ๋ง์ง๋ง ์ธ๋ฑ์ค๋ฅผ ๊ตฌํจ
๐ก.slice()
- slice(indices: IntRange): CharSequence
- ๋ฌธ์์ด์์ ์ง์ ๋ ๋ฒ์์ ๋ฌธ์๋ค์ ์ถ์ถํ์ฌ ์๋ก์ด CharSequence(์ผ๋ฐ์ ์ผ๋ก String)๋ก ๋ฐํ
- ์ธ๋ฑ์ค ๋ฒ์๋ IntRange๋ก ์ง์
- slice() ํจ์๋ ์๋ณธ ์ปฌ๋ ์ ์ ๋ณ๊ฒฝํ์ง ์๊ณ ์๋ก์ด ์ปฌ๋ ์ ์ ๋ฐํ (์๋ณธ ์ปฌ๋ ์ ์ ๊ทธ๋๋ก ์ ์ง) - phone_number.slice(last - 3..last): last - 3 .. last๋ ๋ง์ง๋ง 4์๋ฆฌ์ ์ธ๋ฑ์ค ๋ฒ์๋ฅผ ๋ํ๋ธ๋ค.
๐ก.substring()
- substring(startIndex: Int): ์์ ์ธ๋ฑ์ค๋ถํฐ ๋ฌธ์์ด์ ๋๊น์ง์ ๋ถ๋ถ ๋ฌธ์์ด์ ๋ฐํ
substring(startIndex: Int, endIndex: Int): ์์ ์ธ๋ฑ์ค๋ถํฐ ์ข ๋ฃ ์ธ๋ฑ์ค ์ ๊น์ง์ ๋ถ๋ถ ๋ฌธ์์ด์ ๋ฐํ (until ์ฒ๋ผ) - phone_number.substring(length, length + 4)
- length๋ถํฐ length + 4๊น์ง์ ๋ถ๋ถ ๋ฌธ์์ด์ ์ถ์ถํ์ฌ ๋ฐํ
2. ํค์ค์คํฌ ๊ณผ์ Lv 5๊น์ง ๊ตฌํ ๋ ธ๋ ฅ
- ํ์ต์ค. ์ ๋ ์ ์์ ์์
3. .gitignore
- ์ด์ git ์ค๋ฅ์ฒ๋ฆฌ์ ๊ดํด ๋ฌธ์ํ์ ๋, ํํฐ๋์ด .gitignore์ ๋ํ ๋ด์ฉ์ ์ธ๊ธํ์ จ๋ค.
- .gitignore ํ์ผ: Git์ผ๋ก ๋ฒ์ ๊ด๋ฆฌํ์ง ์์์ผ ํ๋ ํ์ผ์ด๋ ํด๋๋ฅผ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํ์ผ
- Git์ ์ฝ๋ ๋ณ๊ฒฝ ์ด๋ ฅ์ ์ถ์ ํ๊ณ ์ ์ฅํ๋ ๋๊ตฌ์ธ๋ฐ, ๋๋ก๋ ๊ฐ๋ฐ์๊ฐ ํน์ ํ์ผ์ด๋ ํด๋๋ฅผ ์ ์ฅ์์ ์ถ๊ฐํ์ง ์๊ธฐ๋ฅผ ์ํ ๋๊ฐ ์๋ค. ์ด๋ด ๋ .gitignore ํ์ผ์ ์ฌ์ฉํ๋ฉด Git์ด ํด๋น ํ์ผ์ ๋ฌด์ํ๋๋ก ์ง์ํ ์ ์๋ค.
# Built application files
*.apk
*.ap_
# Files for the ART/Dalvik VM
*.dex
# Java class files
*.class
# Generated files
bin/
gen/
out/
# Gradle files
.gradle/
build/
# Local configuration file (sdk path, etc)
local.properties
# Proguard folder generated by Android Studio
proguard/
# Log Files
*.log
# Android Studio Navigation editor temp files
.navigation/
# Android Studio captures folder
captures/
# Intellij
*.iml
.idea/workspace.xml
.idea/tasks.xml
.idea/gradle.xml
.idea/assetWizardSettings.xml
.idea/dictionaries
.idea/libraries
.idea/caches
.idea/modules.xml
.idea/namespaces
# Keystore files
*.jks
- ์์ ๋ด์ฉ์ Android ์ฑ ํ๋ก์ ํธ๋ฅผ ์ํ tipycalํ .gitignore ํ์ผ์ ๋ด์ฉ์ด๋ค.
- ๋น๋๋ ์ ํ๋ฆฌ์ผ์ด์
ํ์ผ (*.apk, *.ap_)
ART/Dalvik VM์ ์ํ ํ์ผ (*.dex)
Java ํด๋์ค ํ์ผ (*.class)
์์ฑ๋ ํ์ผ (bin/, gen/, out/)
Gradle ํ์ผ๊ณผ ๊ด๋ จ๋ ํ์ผ (.gradle/, build/)
๋ก์ปฌ ์ค์ ํ์ผ (local.properties)
Android Studio์์ ์์ฑ๋ Proguard ํด๋ (proguard/)
๋ก๊ทธ ํ์ผ (*.log)
Android Studio Navigation ํธ์ง๊ธฐ์ ์์ ํ์ผ (.navigation/)
Android Studio ์บก์ณ ํด๋ (captures/)
IntelliJ IDEA ํ์ผ (*.iml, .idea/)
ํค์คํ ์ด ํ์ผ (*.jks) - ์ด๋ฌํ ํ์ผ๋ค์ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ๋ฐ์๊ฐ ์ฝ๋ ์ ์ฅ์์ ์ถ๊ฐํ์ง ์์ผ๋ ค๊ณ ํ ๋ ์ ์ฉํ๋ค.
- ์๋ฅผ ๋ค์ด, ๋น๋๋ ์ ํ๋ฆฌ์ผ์ด์ ํ์ผ์ ํฌ๊ธฐ๊ฐ ํฌ๊ณ ๋ณ๊ฒฝ ๋น๋๊ฐ ๋ฎ์์ Git ์ ์ฅ์์ ์ถ๊ฐํ ํ์๊ฐ ์๋ค. ๋ฐ๋ผ์ ์ด๋ฌํ ํ์ผ๋ค์ .gitignore ํ์ผ์ ์ถ๊ฐํ์ฌ Git์ด ๋ฌด์ํ๋๋ก ํ ์ ์๋ค.
~ Trouble Shooting ~
1. ํฐ์คํ ๋ฆฌ ๋ธ๋ก๊ทธ์ '๊ฒ์' ๊ธฐ๋ฅ์ด ์๋ํ์ง ์์
- ๋ณด๋๊น 3์ 7์ผ TIL์์ ๊ณ ์น๋ค๊ณ ์ ์ด๋จ๋๋ฐ ๋ชป ๊ณ ์ณ์ ์ค๋ ๊ณ ์น๊ฒ ๋์๋ค.
~ Retrospect ~
์ค๋์ ์ฝํ๋ฆฐ ๋ฌธ๋ฒ ์ธ์ ๋ง์ง๋ง๋ ์ด๋ค. ๋ค์์ฃผ๋ถํฐ๋ ์ด๋ก ์์ ๋ฒ์ด๋ ์ค์ ์ ์ธ ์๋๋ก์ด๋ ๊ฐ๋ฐ ์์ญ์ผ๋ก ๋ค์ด๊ฐํ ๋ฐ, ์ด๋ฒ์ ๋ฐฐ์ฐ๊ณ ์ ๋ฆฌํ ๋ฌธ๋ฒ์ ๋์น์ง ๋ง๊ณ , ์๋ก ๋ฐฐ์ฐ๊ฑฐ๋ ๊ถ๊ธํ ๊ฑฐ ์์ผ๋ฉด ๊ณ์ ์ฑ์๋๊ฐ๋ ์์ผ๋ก ์ด์ฌํ ๋ถ๋ค์ด ๋์.
์์นจ 8์์ ๊ตญ์ทจ์ ๋๋ฒ์งธ ์๋ด์ ๋ค๋ ์๋๋ฐ, ์ง๋ก๋ ์ฑํฅ๊ฒ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ถ์ํด์ค ๊ฒ์ ๋ค์ผ๋ ํฅ๋ฏธ๋ก์ ๋ค. ๋ด๊ฐ ์๊ฐํ ๊ฒ๋ค์ด ํ๋ฆฌ์ง ์์๊ตฌ๋ ํ๋ ํ์ . ๋ด๊ฐ ์ด์ ์ ๊ฐ์ก๋ ์ง์ ๋ค์ ๋ํด์ ์๋ด์ฌ๋์ด ๋ชจ๋ ์ฑํฅ์์ ์ ๋ฐ๋๋ผ๊ณ , ์ ๋์๋ค๊ณ ๋ง์ํด์ฃผ์ ๊ฒ์ด ํ์ด ๋์๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ์์ ๋๋ฐ์ด๋ค... ์ฒ์์ ๋ช ๋ถ๊ฐ์ ๋ฌดํ์ ์ผ๋ก ๋ณด๋ค๊ฐ ํ๋ฐ๋ถ ๊ฐ์๋ก ๋ชฐ์ ํ๋ค. ์์ฆ ํ์ด๋ก๋ฌผ์์ ์ฃผ๊ตฌ์ฅ์ฐฝ ๋์ค๋ ์์์ธ๊ณ๊ธด ํ์ง๋ง, Alan Becker๊ฐ ๋ฌผ๋ฆฌํ/์ฐ์ถ/์ฌ์ด๋ ๋ถ๋ถ์์ ๊ณ ์ฌํ ๊ฒ ๋๊ปด์ง๋ค.