๐ป Extracurricular (41) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ ๋ชจ๊ฐ์ฝ < Kotlin ๊ธฐ์ดํธ > - 8์ผ์ฐจ โ ์ฝํ๋ฆฐ ๊ฐ๋จํ๊ฒ ๋ฌธ๋ฒ ๋ฐฐ์ฐ๊ธฐ โก ์ฝํ๋ฆฐ์์ ํจ์ ์ฌ์ฉํ๊ธฐ ํจ์๋? ํน์ ์ ๋ ฅ ๊ฐ์ ๋ํ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐํ ์ฝํ๋ฆฐ์์์ ํจ์๋ ์๋์ ํํ๋ก ์ฌ์ฉ fun ํจ์์ด๋ฆ(์ ๋ ฅ๊ฐ) { ํจ์ ๋ด์ฉ return ๋ฐํ๊ฐ } return ์ด ๋ฐํํ๋ค๋ ๋ป! โก ์ฝํ๋ฆฐ์์ ์กฐ๊ฑด๋ฌธ ์ฌ์ฉํ๊ธฐ ์กฐ๊ฑด๋ฌธ์ด๋? ํน์ ์กฐ๊ฑด์ผ ๋ ์ฝ๋๊ฐ ์คํ๋๋๋ก ์ค์ ํ๋ ๊ฒ if(์กฐ๊ฑด๋ฌธ){ } ์กฐ๊ฑด๋ฌธ์ด ์ฐธ์ด๋ผ๋ฉด ํด๋น {} ์์ ๋ช ๋ น์ ์คํ! if ( n ์กฐ๊ฑด๋ฌธ์ ์ด์ฉํ์ฌ ํด๊ฒฐ โก ์ซ์๊ฐ ๊ฒน์น ์ ์์ ๋ก๋ ๋ฒํธ๋ ๋ชจ๋ ๋ค๋ฅธ ์ซ์์ด๊ธฐ ๋๋ฌธ์ ์ซ์๊ฐ ๊ฒน์น๋ฉด ์๋จ => ๋ฐฐ์ด๊ณผ ๋ฐ๋ณต๋ฌธ์ ํตํด ํด๊ฒฐ โ ์ค๋์ ๋ฌธ์ : ๋ก๋๋ฒํธ์ถ์ฒจ์ฑ ๊ธฐ๋ฅ ์์ฑํ๊ธฐ ์ฐ์ธก ํ๋จ์ ๋ฒํผ์ ๋๋ฅผ ๋๋ง๋ค ๋๋คํ(๊ฒน์น์ง ์๋) ์ซ์ 6๊ฐ๊ฐ ํ์๋๊ณ , ํด๋น ์ซ์์ ๋ง๋ ๋ฐฐ๊ฒฝ์์ผ๋ก ๋ฐ๋๋๋ก.. ๋ชจ๊ฐ์ฝ < Kotlin ๊ธฐ์ดํธ > - 7์ผ์ฐจ โ ๋ฒํผ์ด ๋๋ ธ๋์ง ๊ฐ์งํ๊ธฐ - ๋ก๊ทธ๋ก ํ์ธํ๊ธฐ ๋ฒํผ์ id ์ค์ id๋ ํ๋ก์ ํธ ์์์ ๊ณ ์ (unique)ํด์ผ ํจ! ๋ฒํผ์ id๊ฐ runButton ์ด๋ผ๊ณ ๊ฐ์ class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) findViewById(R.id.runButton).setOnClickListener { Log.d("๋ก๋์ฑ", "๋ฒํผ ๋๋ฆ") } } } ์์ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ํด ์ด 4๊ฐ์ง import๊ฐ ํ์ํจ! import androidx.appcompat.. ๋ชจ๊ฐ์ฝ < Kotlin ๊ธฐ์ดํธ > - 6์ผ์ฐจ โ ๋ ์ด์์ ์ถ๊ฐํ๊ธฐ โกPalette ์ฐฝ Layouts ํด๋ฆญ LinearLayout(vertical) ๋๋๊ทธ -> ํ๋ฉด์ ๋์ด๋ค ๋์ โก Linear Layout์ constraint ์ถ๊ฐ ์, ํ, ์ข, ์ฐ ์ฌ๋ฐฑ 0์ผ๋ก ๋ฐ๊พธ๊ธฐ (=> ์ด ๋ถ๋ถ์์ ์ ์๋ผ์ xml์ฝ๋๋ฅผ ํตํด ์ง์ ์์ ํจ ใ ใ ) โ ๋ฒํผ ์ถ๊ฐํ๊ธฐ โก Linear Layout ์์ ๋ฒํผ ์ถ๊ฐ Palette > Common ํด๋ฆญ Common > Button ํด๋ฆญ Button์ ๋๋๊ทธํ์ฌ Component Tree > Linear Layout์ ์ถ๊ฐ โก ๋ฒํผ์ ์์ฑ ์์ id๋ฅผ buttonNum1๋ก ์์ ์์ ํ ๋ค๋ฅธ ๊ณณ์ ํด๋ฆญํ๋ฉด ์๋์ ๊ฐ์ ์ฐฝ์ด ๋ธ (์ด๋ Refactor ๋ฒํผ ํด๋ฆญ) layout_width : 70dp layout_hei.. ๋ชจ๊ฐ์ฝ < Kotlin ๊ธฐ์ดํธ > - 5์ผ์ฐจ โ Layout์ด๋? : ์ฌ๋ฌ ์ปดํฌ๋ํธ(View)๋ฅผ ๋ฌถ์ด์ฃผ๋ ๋ทฐ ๊ทธ๋ฃน Layout์ ์ข ๋ฅ์ ๋ฐ๋ผ ์ปดํฌ๋ํธ๋ค์ ๋ค๋ฅด๊ฒ ์ ๋ ฌํ ์ ์์ โ Layout์ ์ข ๋ฅ โก Linear Layout : ์ปดํฌ๋ํธ๋ค์ ์ฐจ๋ก๋๋ก ๋์ด ๐ Linear Layout ์ orientation ์์ฑ vertical - ์ธ๋ก๋ก ๋์ด horizontal - ๊ฐ๋ก๋ก ๋์ด ๋ณต์กํ ๋ ์ด์์๋ณด๋ค๋ ๋จ์ํ ๋ฆฌ์คํธ (์ํ ์คํฌ๋กค, ์ข์ฐ ์คํฌ๋กค) ๋ทฐ์ผ ๋ Linear Layout ์ ์ฌ์ฉ! โก Frame Layout : ์ก์ ์์ ๊ทธ๋ฆผ์ ๋ผ์ฐ๋ ๋ฐฉ์์ผ๋ก ์ปดํฌ๋ํธ ๋ฐฐ์น Frame Layout์ ๋ฐฐ์นํ ๊ฒ ์ค์ ๊ฐ์ฅ ๋ง์ง๋ง ์ปดํฌ๋ํธ๊ฐ ๋ณด์. ๋ฐฐ์น๋ณด๋ค๋ ๋ค๋ฅธ ์ฉ๋(Web view ์ฉ ๋ ์ด์์ ๋ฑ)๋ฅผ ์ํ ๋ ์ด์์์ ์ถ๊ฐํ ๋ ์ฃผ๋ก ์ฌ์ฉ โก Constr.. ๋ชจ๊ฐ์ฝ < Kotlin ๊ธฐ์ดํธ > - 4์ผ์ฐจ *์ด ๊ฒ์๋ฌผ์ ๋งจ ๋ง์ง๋ง ๊ณผ์ ๋ฅผ ์ ์ธํ ์ฌ์ง์ ์๋ ๋งํฌ์ ์ฌ์ง์ ์ฒจ๋ถํ์์ต๋๋ค. https://codemate.kr/project/์๋๋ก์ด๋-APP-๋ฉ์ดํธ-์ฝํ๋ฆฐ-๊ธฐ์ดํธ โ ๊ตฌ์กฐ ํ์ ํ๊ธฐ ํ๋ก์ ํธ ์ฐฝ : ํ๋ก์ ํธ์ ํฌํจ๋ ํด๋์ ํ์ผ๋ค์ ๋ณผ ์ ์๋ ์ฐฝ ์๋ํฐ ์ฐฝ : ํ์ผ์ ์์ ํ ์ ์๋ ์ฐฝ (๋ ์ด์์/์ฝ๋) ๋๊ตฌ ์ฐฝ โ ํ๋ก์ ํธ ์ฐฝ : ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ํด๋์ ํ์ผ์ ๋ณผ ์ ์์ ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ๊ฒ : Project & Android โก ํ๋ก์ ํธ ๋ชจ๋ : ๋ชจ๋ ํด๋์ ํ์ผ์ ํด๋ ๊ตฌ์กฐ ๊ทธ๋๋ก ๋ณผ ์ ์๋ ๋ชจ๋ โก ์๋๋ก์ด๋ ๋ชจ๋ : ์๋๋ก์ด๋ ๊ฐ๋ฐ์ฉ์ผ๋ก ์ต์ ํํ ํด๋/ํ์ผ ๊ตฌ์กฐ ๊ฐ๋ฐํ ๋๋ ๋ณดํต ์๋๋ก์ด๋ ๋ชจ๋๋ฅผ ์ฌ์ฉ! ๐ AndroidManifest.xml ์ฑ์ ์ ์ฒด ๊ตฌ์ฑ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ํ.. ๋ชจ๊ฐ์ฝ < Kotlin ๊ธฐ์ดํธ > - 3์ผ์ฐจ *์ด ๊ฒ์๋ฌผ์ ๋งจ ๋ง์ง๋ง ๊ณผ์ ๋ฅผ ์ ์ธํ ์ฌ์ง์ ์๋ ๋งํฌ์ ์ฌ์ง์ ์ฒจ๋ถํ์์ต๋๋ค. https://codemate.kr/project/์๋๋ก์ด๋-APP-๋ฉ์ดํธ-์ฝํ๋ฆฐ-๊ธฐ์ดํธ โ ์๋ฎฌ๋ ์ดํฐ๋? ์๋ฎฌ๋ ์ดํฐ : ์ปดํจํฐ์์ ์คํํ ์ ์๋ ๊ฐ์๊ธฐ๊ธฐ ๋ค์ํ ์๋๋ก์ด๋ ๊ธฐ๊ธฐ๋ฅผ ์ปดํจํฐ ์์์ ํ ์คํธํ ์ ์๋๋ก ์ ๊ณต โก ์ฅ์ ์๋๋ก์ด๋ ๊ธฐ๊ธฐ๊ฐ ์์ด๋ ์ฑ ํ ์คํธ ๊ฐ๋ฅ ๊ฐ๊ธฐ ๋ค๋ฅธ ํน์ง์ ๊ฐ๊ณ ์๋ ์ค๋งํธํฐ์ ๊ธฐ๊ธฐ ํธํ์ฑ ๊ณ ๋ ค ๊ฐ๋ฅ โก ๋จ์ ์๋นํ ๋๋ฆฐ ์๋ ์ปดํจํฐ ์ฉ๋์ ๋ง์ด ์ฌ์ฉํจ => ๋๋ถ๋ถ์ ์๋๋ก์ด๋ ์ฑ ๊ฐ๋ฐ์๋ค์ ๊ณต๊ธฐ๊ณ ์ฌ์ฉ! โ ์๋ฎฌ๋ ์ดํฐ ์ค์น ๋ฐ ์คํ โก AVD (Android Virtual Device) Manager ์์ด์ฝ ํด๋ฆญ (Tool > AVD Manager๋ก ๋ค์ด๊ฐ ์๋ ์์!) โก ์๋ฎฌ๋ ์ดํฐ ์ค์น.. ๋ชจ๊ฐ์ฝ < Kotlin ๊ธฐ์ดํธ > - 2์ผ์ฐจ โ ํ๋ก์ ํธ ์์ฑํ๊ธฐ 1. ์๋๋ก์ด๋ ์คํ๋์ค ํ๋ก๊ทธ๋จ ์ด๊ธฐ 2. ‘Create New Project’ ํด๋ฆญ 3. ํ ํ๋ฆฟ ์ ํํ๊ธฐ - ‘Empty Activity’ 4. ํ๋ก์ ํธ ์ค์ ํ๊ธฐ โก Name : ํน์๋ฌธ์ ์์ด ์์ด๋ก! โก Package name : ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ณ ์ ํ ๊ฐ ๊ตฌ๊ธ ํ๋ ์ด ์คํ ์ด์ ์ฌ๋ฆด ๊ฒฝ์ฐ ๋ค๋ฅธ ์ฑ๋ค๊ณผ ๊ฒน์น๋ฉด X (๋ณดํต ๊ท์น์ด ์์) ๐ com.ํ์ฌ์ด๋ฆ.ํ๋ก๊ทธ๋จ์ด๋ฆ ex) com.comu.mogakko ๐ com.ํ์ฌ์ด๋ฆ.ํ๋ซํผ.ํ๋ก๊ทธ๋จ์ด๋ฆ ex) com.comu.android.mogakko โก Save location : ํ๋ก์ ํธ๊ฐ ์ ์ฅ๋ ์์น โก Language : Kotlin (Java๋ ์ ํ ๊ฐ๋ฅ) โก Minimum SDK : ์ฑ์ ์คํ์ ๊ฒฐ์ ํ๋ ์ค์ํ ๋ถ๋ถ! ‘์ต์ ์ด์ .. ๋ชจ๊ฐ์ฝ < Kotlin ๊ธฐ์ดํธ > - 1์ผ์ฐจ โ ์ฝํ๋ฆฐ ๊ธฐ์ดํธ ๊ณผ์ ๋ก๋ ๋ฒํธ ์์ฑ๊ธฐ ์ฑ ์ ์ ๋น๋ฐ ๋ฉ๋ชจ์ฅ ์ฑ ์ ์ โ ์ฌ์ฉ ์ธ์ด - ์ฝํ๋ฆฐ ์ฝํ๋ฆฐ์ด๋? Java์ 100% ํธํ ๊ฐ๋ฅ (Java ์ฝ๋ -> Kotlin ๋ณํ ๊ฐ๋ฅ) ํ๋ก๊ทธ๋จ์ ์์ ์ฑ์ ๋์ฌ์ค (Null pointer exception ์ค๋ฅ X) Java๋ณด๋ค ์ธ์ด ์์ฒด๊ฐ ๊ฐ๊ฒฐํ์ฌ ์ ์ง๋ณด์๊ฐ ํธํจ ๊ตฌ๊ธ์ด ์ฑํํ ์๋๋ก์ด๋ ๊ฐ๋ฐ ๊ณต์ ์ธ์ด โ ์ฑ ๊ฐ๋ฐ ๋ฐฉ์ ๐ ๋ค์ดํฐ๋ธ ์ฑ os(์ด์์ฒด์ )์ ๋ง๋ ๊ฐ๋ฐํ๊ฒฝ๊ณผ ์ธ์ด๋ก ๋ง๋ ์ฑ - ์๋๋ก์ด๋ : Kotlin, Java - iOS : Swift, Objective-C โก ์ฅ์ ์ํ๋ ๊ฒ์ ๋ญ๋ ๋ง๋ค ์ ์๊ณ , ์ฑ๋ฅ์ด ์ข์ โก ๋จ์ 1) ์๋๋ก์ด๋, iOS ๋ฅผ ๋ฐ๋ก ๊ฐ๋ฐํด์ผ ํจ 2) ๊ฐ๋ฐ ๊ธฐ๊ฐ์ด ์๋์ ์ผ๋ก ์ค๋ ๊ฑธ๋ฆผ 3) ์ ๋ฐ์ดํธ ํ ๋๋ง๋ค ๊ตฌ๊ธ .. ์ด์ 1 2 3 4 5 6 ๋ค์