상세 컨텐츠

본문 제목

kotlin 1강 정리

android

by 개복신 개발자 2022. 2. 4. 11:03

본문

728x90
반응형

1.함수 작성법

fun을 붙이고 parameter, 리턴 타입을 작성한다.

fun main(){
    println(add(4,5))
}
//1. 함수

fun helloworld() : Unit {
    println("hello world!")
}
//:Unit 아무것도 리턴 안할 때 안써도 됨

fun add(a : Int, b : Int) : Int{
    return a+b
}

변수 타입을 작성할 때 a : Int의 형식을 사용한다.

main 함수만 실행되므로 helloworld 함수를 실행하기 위해서

main함수 안에 helloworld()를 작성해야 실행된다!


2. var과 val

val = value :변하지 않는 고유값

var = variable : 변주 가능

fun hi(){
    val a : Int = 10

    var b : Int = 9
    //a=9 -->에러
    b=20 //가능
    }

또한 위의 경우 굳이 변수 타입을 작성할 필요 없다.

알아서 Int임을 인식한다.

 

string 타입일 경우

var e : String 방식으로 작성하면 된다


3. String template

fun main(){
	val name = "Joyce"
    val lastName = "Hong"
    println("my name is ${name + lastName} I'm 23")
     //중괄호를 쓰자 가독성을 위해
     }

$이후에 작성된 코드는 변수명으로 사용 가능

만일 $를 문자 그대로 출력하고 싶다면 \(백슬래쉬) 사용

작성된 코드들 주석 처리할 시 ctrl + / 

여러 줄로 주석처리 해야될 때 /**


4. 조건식

fun maxBy(a : Int, b: Int) : Int{
    if (a > b){
        return a
    }else{
        return b
    }

}
fun maxBy2(a: Int, b: Int) : Int = if (a>b) a else b

둘 다 같은 조건식이다.

fun main(){
    checkNum(1)
}

fun checkNum(score : Int){
    when(score) {
        0 -> println("this is 0")
        1 -> println("this is 1")
        2,3 -> println("this is 2 or 3")
        else -> println("i don't know")
    }
    var b : Int = when(score){
        1->1
        2->2
        else ->3
    }
    println("b : ${b}")

    when(score){
        in 90..100 -> println("you are genius")
        in 10..80 -> println("not bad")
        else -> println("okay")
    }
}

kotlin에서 when문은 java의 switch문과 같다.

 

출력값

this is 1
b : 1
okay

 

cf)

expression vs statement
expression은 서술 과정이 있고 그에 대한 평가가 있는 반면
statement는 단순하게 명령하는 특징을 가진다 a=10등이 statement


5. array and list

(immutable) list 수정 불가능 vs mutable list 수정 가능

fun array(){
    val array = arrayOf(1,2,3)
    val list = listOf(1,2,3)

    val array2 = arrayOf(1, "d", 3.4)
    val list2 = listOf(1, "d", 11L)

    array[0] = 3
    list[0] = 2 //에러! list는 array와 다르게 수정 불가능
    var result : Int = list.get(0)

    val arrayList = arrayListOf<Int>()
    arrayList.add(10)
    arrayList.add(20)
}

arraylist는 수정가능한 mutable list

그냥 list는 수정 불가능

수정 가능한 리스트는 add나 remove 사용


6. 반복문 for while

 val students = arrayListOf("joyce", "james", "jenny", "jennifer")

    for (name in students){
        println("${name}")
    }

    for ((index, name) in students.withIndex()){
        println("${index+1}번째 학생: ${name}")
    }
 var sum : Int = 0
    for (i in 1..10 step 2){
        sum += i }
    println(sum)
    //i in 10 downTo 1
    //i in 1 until 100 100제외

    var index = 0
    while(index < 10){
        println("current index: ${index}")
        index++
    }

downTo는 거꾸로 인덱스 설정

kotlin 또한 ++를 사용한다.


7. Nullable NonNull

 

//NPE :Null pointer Exception

    var name : String = "joyce"

    var nullName : String? = null
    //?하나 추가하면 null을 넣을 수 있음

    var nameInUpperCase : String = name.toUpperCase()

    var nullNameInUpperCase : String? = nullName?.toUpperCase()
    //nullName?의 의미 만약 null이 아니면 upper 실행 아니면 null로

-?의 의미: null 허용

-nullName?.toUpperCase() ?->null이면 그냥 넘어가고 null이 아니면 대문자로

결국 null을 허용한다는 맥락 속!

 

 // ?: 엘비스 연산자

    val lastName : String? = "Hong"
    val fullName : String = name + " "+ (lastName?: "No last name")
    println(fullName.toUpperCase())

?: ->엘비스 연산자

(lastName?: "No last name")에서 ?:

만약 lastName이 null이라면 No last name을 대신 할당함

 

val mNotNull : String? = str!!
    //str이 null일리 없어!
    val upper = mNotNull?.toUpperCase()

!! -> null이 될 수 없다는 코드

str!! str은 null이 될 수 없다

 

val email : String? = "joycehongxxxx@nana.com"
    email?.let{
        println("my email is ${email}")

let ->null이 아닐 때 실행되는 값/ null일 경우 실행안됨


8. class

open class Human constructor(val name : String = "Anonymous"){
    //val name = name으로 써도 무방 위의 parameter에서 val을 빼고
    //Anonymous는 default 값
    /**
     * class Person{
     * public Person(String name){
     * }
     *
     * public Person(String name, int age){
     * this(name);
     * }
     */
    constructor(name : String, age : Int) : this(name){
        println("my name is ${name}, ${age}years old")
    }

    init {
        println("New human has been born!!")
    }

    fun eatingCake() {
        println("this is so yummy")
    }

    open fun singASong(){
        println("lalalala")
    }
}

-위의 주석은 자바로 구현하는 코드이다

이 기능을 코틀린으로 구현하기 위해 constructor를 활용했다.

-open class로 작성해야 상속 가능하다(open fun도 마찬가지)

-val name : String = "Anonymous"가 생성자이다

만일 인스턴스를 만들때 parameter가 없는 경우 name = Anonymous로 된다

 

상속

class Korean : Human(){
    override fun singASong(){//오버라이딩
        super.singASong()
        println("라라라")
        println("my name is ${name}")
    }
}

-오버라이딩 하는 경우 override fun ~로 작성해야 됨

korean class에서는 "lalalala" 대신 "라라라"로 표현하기 위해 오버라이딩을 하였음

 

-상속받으면서 Human의 name도 그대로 따라옴

Anonymous로 name 할당됨

 

반응형

'android' 카테고리의 다른 글

로또 번호 추첨 토이 프로젝트  (0) 2022.02.09
BMI 계산기 안드로이드 앱 토이프로젝트  (0) 2022.02.08
kotlin 2강  (0) 2022.02.07
단말기 테스트  (0) 2021.09.06
안드로이드 구조  (0) 2021.09.03

관련글 더보기

댓글 영역