제육's 휘발성 코딩
반응형

동작 방식

  • 자바 - 하이브리드 방식 (컴파일, 인터프리터)
    • Source(.java) - compile - Byte Code(.class) - interpreter(jvm) - Running
  • 안드로이드 - 리눅스 커널
    • 안드로이드는 바이트 코드에서 한번 더 번역해서 DEX 파일을 만든다. (.class)
    • DEX 파일을 ART(Android Runtime)에서 해석 - ART는 가상머신이다.
    • APK 파일은 안드로이드는 뷰 영역인 Resource 파일도 같이 만든다.
    • Source - compile - Byte Code - APK(DEX,Resource) - ART

안드로이드 구조

  • Application
  • Java Api Framework - 자바 라이브러리
  • c/c++ lib / ART
  • HAL - Hardware Abstract Layer
  • Kernel
  • H/W

Component

  • Activity
    • Java(Kotlin) file
    • Resource file (xml)
  • Service
    • Background 동작
  • Broadcast
    • 방송
  • Content Provider
    • 앱과 앱 사이의 컨텐츠 공유 (이미지를 갤러리에서 가져오는 등 )

Kotlin 기본 문법

fun main() {
    var x:Int = 5

    var y = 0
    y = x * 4

    println("Welcome to Kotlin World : ${++y}")
}

타입을 적는 건 자유 (첫 글자 대문자)

기본자료형 - byte, short 등 (주소저장 x 단순 값 저장)

객체 참조변수 - Byte , Long 등 (주소저장 O)

${}를 통해 출력

변수 선언

var x:Short
var y:Int = 5
val z = 5

자료형을 작성하지 않아도 컴파일러가 알아서 변수타입을 확인해주는 기능이 있다.

val vs var

val : read-only - 초기화 후 값을 변경할 수 없다. (한번만 초기화)

var : 초기화 후 값을 변경할 수 있다.

클래스 선언

class Rect {
    var r:Int = 0
    fun area{

    }
}

class Rect2(var r:Int) {
    fun area{

    }
}
  • 인스턴스 생성방법
    • var r:Rect = Rect() - 중간 Rect는 생략 가능하다
    • var r = Rect2(3) - 매개변수가 있는 클래스
//global scope
val g1 = 0
lateinit var g2:String //lateinit으로 초기화 나중에 하겠다 선언
var g3:Float = 0.0F // primitive 형은 lateinit 사용 불가 (참조타입만 사용 가능)

fun test() {
    val x = 5 //read-only local variable
    var y = 10
    y += x
    println("$x : $y")
}

fun main() {
    var x:Int = 5
    var y = 0
    y = x * 4
    println("Welcome to Kotlin World : ${++y}")
    test()

    fun rand() {
        val a = 1
        var b = 8
        println((a..b).random()) // min, max 사이 임의의 수 생성
    }
    rand() // a~b 사의 임의의 값 출력
    // Dice object
    val myDice = Dice(6)
    println(myDice.roll())
}

class Dice(private var sides:Int) {
    fun roll():Int {
        return (1..sides).random()
    }
}
  • (a..b).random 으로 random 값 구현
  • 객체 인스턴스 생성은 val myDice =Dice(6) 와 같이 사용

MainActivity

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Roll Button referencing
        val rollBtn : Button = findViewById(R.id.role)
        rollBtn.setOnClickListener {
//            토스트 사용
//            Toast.makeText(this, "Button clicked", Toast.LENGTH_LONG).show()

            val myDice = Dice(6)
            val num = myDice.roll()
            // TextView reference
            val textView = findViewById<TextView>(R.id.number)
            textView.text = num.toString()
        }
    }
    //Inner class
    class Dice(private var sides: Int) {

        fun roll(): Int {
            return (1..sides).random()
        }
    }


}

제어문

  • 실행 흐름 : 순차적
  • 조건문 - 분기 (branch)를 통해 조건에 따라 지정
    • if, when(자바의 switch)
    • Statement 표현
    • if (a < 8) { b = ++a; c = b+2; } else { ... }
  • Expression 표현 ( ++a, b+2 와 같은 결과를 만들어주는 수식)
    when(a){ // 서로 다른 타입도 조건문에 넣을 수 있다.
      1..3 -> {} // a가 1~3이라면 (range)
      4 -> {}
      "문자" -> 
      is Long -> //Long 타입일 때
      !is Int -> // Int 타입일 때
      else -> {}  // Expression 표현을 사용할 때는 else가 꼭 있어야 한다. Statement는 생략 가능 
    }
  • a = if (b > 3) ++b else --b
  • 반복문 - 조건 만큼 반복 실행
    • for , while, do ~ while
    • ```kotlin for (i in 1..10) // i는 1~10까지 for (i in 1 until 10) for (i in 1..10 step 2) for (i in 10 downTo 1) // 10에서부터 1까지 ```
private var lemonImage: ImageView? = null // lemonImage가 nullable
lemonImage!!.setOnClickListener{ clickLemonImage()} // null이면 nullPointerException 발생 !! 사용 
반응형
profile

제육's 휘발성 코딩

@sasca37

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 맞구독은 언제나 환영입니다^^