Android/Android

[kotlin] 코틀린 기초 문법 다지기 - 1

핀수 2022. 6. 6. 17:13
728x90
반응형

해당 강의를 들으며 작성된 것 입니다.

 

[무료] 코틀린 3강으로 끝내기 feat. 안드로이드 개발 - 인프런 | 강의

3강으로 짧게 끝내는 코틀린 문법! 코틀린 기초 문법과 안드로이드 기초 프로그래밍은 물론, 직접 안드로이드 앱도 만들어보세요!, - 강의 소개 | 인프런...

www.inflearn.com

 

함수

파라미터와 리턴 타입이 없을 때

fun helloWorld(){
	println("hello world!")
}

자바의 void 와 같다.

아무것도 리턴하지 않는 것처럼 보이지만 사실은 Unit을 리턴하고 있다.

위에 쓰인 것 처럼 생략해도 무방하다.

fun helloWorld() : Unit {
	println("hello world!")
}

 

파라미터와 리턴 타입이 있을 때

'변수 이름 : 변수 타입' 과 같은 형태로 작성한다.

 

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

 

변수

val 

👉🏻 value

👉🏻 바뀌지 않는 것을 의미한다. (final)

 

var

👉🏻 variable

 

fun variable() {
    // 타입 생략해주어도 무방함
    val a = 10
    var b = 9

    // 선언만 먼저 할 경우에는 타입을 지정해주어야함
    val c : Int
    c = 10
}

 

 

String Template

"my name is $name" 처럼 변수 뒤에 공백이 있는 경우

{} 괄호를 생략해도 무방하지만

띄어쓰기를 할 수 없는 경우는 {}를 붙여줘야 한다.

 

"내 나이는 ${age}살 입니다." 같은 경우 말이다.

    val name = "spin"
    val lastName = "Kim"
    println("My name is ${name + lastName}. I'm 23.")
    // My name is spin Kim. I'm 23.

 

 

$ 기호를 출력문 내에서 사용하고 싶다면
\를 사용하면 됨 (이스케이프 문자)

    println("This is \$a")

 

조건문

if

우리가 아는 기존의 if문

또 코틀린에는 삼항 연산자가 없으므로 다음과 같이 사용할 수 있다.

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

when

자바의 switch 와 비슷한 친구

else 는 없어도 문제 없다.

  when (score) {
        0 -> println("this is 0")
        1 -> println("this is 1")
        2, 3 -> println("this is 2 or 3")
        else -> println("this is what")
    }

복수 지정과 범위 지정도 가능하다.

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

 

리턴값으로도 가능하다.

이때는 반드시 else 를 지정해주어야 한다.

 var b = when (score) {
        1 -> 1
        2 -> 2
        else -> 3
    }

 

Expression 과 Statement

👉🏻 무언가를 뚱땅뚱땅 해서 만들면 expression

👉🏻 실행하도록 지시하는 것은 statement (명령을 내리는 것)

 

👉🏻 코틀린의 모든 함수는 expression 의 성격을 가진다.

(위에서 말했듯 리턴 값이 없는게 아니라 unit을 리턴함)

 

👉🏻 자바의 void 는 statement

자바에서는 statement 로 사용되었던 if문이 코틀린에서는 expression 으로 사용될 수 있다.

 

Array

배열은 기본적으로 mutable

👉🏻 변경이 가능하다.

 

배열 생성 및 초기화

val array = arrayOf(1, 2, 3)

타입이 달라도 상관없다.

타입이 Any로 변경된다.

Array<Any>

val array2 = arrayOf(1, 2, "apple")

선언만 먼저 할 경우 

 

크기가 10인 배열을 생성한다.

val arr = arrayOfNulls<Int>(10)

 

 

List

👉🏻 immutable 

👉🏻 mutable

로 나뉜다.

 

immutable

get 으로 읽어올 수는 있지만 변경은 할 수 없다.

val list = listOf(1, 2, 3)
//list[0] = 4 (x)

 

mutable

val mutableList = mutableListOf<Int>()
    mutableList.add(2)
    
val arrayList = arrayListOf<Int>()
   arrayList.add(10)
    arrayList.add(20)

 

반복문

for

   val students = arrayListOf("joyce", "james", "jenny", "jane")
    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) {// 1부터 10까지
        sum += i
    }

step n : n 씩 증가

downTo n : n씩 감소

in 1..10 : int i = 1 ; i <= 10 과 같음

until 10 : int i = 1 ; i < 10 과 같음 

 

while 

은 우리가 아는 while 과 같다

 

Nullable 과 NonNull

자바의 Null Pointer Exception(NPE) 은 런타임에 일어나서 개발자가 잡아주기 쉽지 않다.

잡아주기 위해서 일정 노력이 필요하다..수많은 if문들

 

코틀린은 컴파일 시점에 이를 잡아낸다.

 

타입을 생략하면 기본적으로 NonNull 이다.

 var name = "joyce"
 // var age : String = null (x)

따라서 해당 작업에는 무리가 없다.

 var nameInUpperCase = name.uppercase(Locale.KOREA)

 

?

Nullable 변수를 보자

val nullName : String? = null

같은 작업을 하려고 하면 아래와 같이 바꿔주라고 에러가 뜬다.

nullName 이 null 이면 nullNameUpperCase 도 null이 된다.

var nullNameInUpperCase = nullName?.uppercase(Locale.KOREA)

 

?:

앨비스 연산자라고도 한다. (90도 돌려서 보면 ㅋㅋㅋㅋㅋ)

디폴트 값을 주고자 할 때 사용한다.

val lastName : String? = "jung"
val fullName = name + " " + (lastName?: "No lastName")

 // null : joyce No lastName
 // not null : joyce jung

 

 

!!

하늘이 두쪽나도 null이 아닐 경우 사용

null 이 아님을 보장하는 것

근데 null이면 NPE를 일으키기 때문에 

확실한게 아니면 사용하는 것을 자제하는 것이 좋다고 한다.

 

fun ignoreNull(str: String?){
    val mNotNull : String = str!!
    val upper = mNotNull.uppercase()
}

 

let

자신의 리시버 객체를 람다식 내부로 옮겨서 사용하는 것

 

val email : String? = null
val email : String? = pin@gmail.com
email?.let{
    println("my email is $it")
    // not null : my email is pin@gmail.com
    // null : nothing
}

 

 

728x90
반응형