Front-end Develop

[Kotlin] 코틀린 3강으로 끝내기 - 1편 기본 문법

gozer0 2024. 7. 8. 16:37

 

강의에서는 안드로이드 스튜디오로 되어 있는데

나는 인텔리제이를 사용하여 작업 환경을 세팅하였다.

 

fun main() {
    val name = "Kotlin"
    println("Hello, " + name + "!")

    for (i in 1..5) {
        println("i = $i")
    }
}

fun hello() {
    println("hello")
}

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

 

함수를 만들 때는 fun을 사용하여 생성한다.

파라미터가 없다면 변수 타입을 설정하지 않아도 되지만

있다면 함수 add() 와 같이 변수 설정을 해주어야 한다.

자바와 다른 점은 int가 아닌 Int로 타입 첫 글자가 대문자이다.

 

 

 

val과 var

val :  value라는 상수의 변하지 않는 값

var :  변수(variable)의 약자이며 변하지 않는 값

 

fun hi(){
    val a : Int = 3
    var b : Int = 10
//  a = 100  -> 뷸가
    b = 20

    var c = 200
    val d = 300

    var name = "young"
    var myname : String = "zero"
    //타입은 생략 가능

    val dan :String="hello"
    val dan1 = "ttt"
}

 

자바스크립트의 const 와 var 차이와 비슷하다.

여기서는 val과 var

 

변수 선언할 때, 타입은 생략이 가능하며,

val은 한번 생성하면 바꿀 수 없다.

 

 

 

String Template

//String Template
fun main() {
    val name = "Young"
    println("My name is $name")
    println("My name is ${name}")
}

 

My name is Young
My name is Young

 

둘 다 같은 결과가 나온다.

 

차이는 '$name' 은 문자열 템플릿의 일부분으로 사용한다.

$ 뒤를 바로 변수로 인식하는데,

` ${name} `는 좀 더 명확한 변수 참조 방식이다.

 

중괄호를 사용한 방식을 사용하는 편이 더 좋다.

 

val name = "Alice"
println("My name is $name and I'm awesome") // "My name is Alice and I'm awesome"
println("This is dollar: $100") // "This is dollar: 100", 여기서 $100는 변수가 아니라 $와 100으로 인식됨
println("This is dollar: ${'$'}100") // "This is dollar: $100", 여기서 ${'$'}는 문자 $로 인식됨

println("My name is ${name.toUpperCase()}") // "My name is ALICE"

 

 

fun main() {
    val name = "Young"
    val lastname = "Kim"
    println("My name is ${name + lastname}")

    println("Is it true? ${1==0}")
    //println("This is 2$a")
    println("This is 2\$a")

}

 

 

이런식으로 변수 두개를 이어 붙일 수도 있다.

'$' 가 보이게 하고 싶다면 역슬레시 ' \ '를 사용하면 된다.

 

 

 

 

조건문

fun main() {
    val result = maxBy(10, 20)
    println(result) // 출력: 20

    val result2 = maxBy2(50, 20)
    println(result2) // 출력: 50
}

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 checkNum(score: Int)  {
    when (score) {
        0 -> println("this score is 0")
        1 -> println("this score is 1")
        2 -> println("this score is 2")
        else -> println("this score is not 0")
    }

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

    when(score){
        in 90..99 -> println("You are genius")
        in 50..80 -> println("Not bad")
        else -> println("You don't have enough")
    }
}

 

자바의 스위치 함수랑 비슷하게 사용할 수 있다.

가독성이 더 좋은 거 같다.

 

when 은 코틀린에서 자주 사용되는 조건문인데, 

각 조건에 따라  ->  해당 내용을 프린트한다.

 

else 는 그 외의 조건에 해당시, 출력된다.

 

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

 

이 코드는 변수를 저장하기 위한 조건을 설정한 것이다.

 

score 가 1이면 b 에 1 을 넣는다.

score 가 2이면 b 에 2 을 넣는다.

 

when(score) {
    in 90..99 -> println("You are genius")
    in 50..80 -> println("Not bad")
    else -> println("You don't have enough")
}

 

이 코드는 범위를 조건에 넣은 것이다.

score  값이 90 부터 99 일때, 해당 내용을 프린트.

 

이하, 이상으로 숫자 범위는 각각 포함되어진다.

 

 

 

 

Array and List

fun array() {
    val array = arrayOf(1, 2, 3)
    val list = listOf(1, 2, 3)
    
    val array2 = arrayOf(1, 2, "hello")
    val list2 = listOf(1, "hello kotlin", 3)
    
    array[0] = 3
    
    //list[0] = 2
    
    var result = list.get(0)
    // 또는 var result = list[0]    
}

 

배열과 리스트를 각각 선언하는 코드이다.

 

리스트는 불변(immutable) 리스트로, 값들을 변경할 수 없다.

배열은 가변(mutable) 자료구조이므로 요소를 변경할 수 있다.

 

`arrayOf`와 `listOf`는 다양한 타입의 값을 가질 수 있다.

여기서 array2와 list2는 Int와 String 타입의 값을 혼합해서 가지고 있다.

 

 

fun arrayOperations() {
    var arrayList = arrayListOf(1, 2, 3)

    arrayList.removeAt(arrayList.size - 1) // [1, 2]
    arrayList.add(0, 4) // [4, 1, 2]
}

 

해당 코드는 가변 리스트를 생성하여,

 

마지막 인덱스의 요소를 제거하고,

추가하는 내용이다. -> 0번째 인덱스에 요소 4를 추가한다.

 

 

For and While (반복문)

while

fun stwhile() {
    val students = arrayListOf("Anna", "Babillon","Selly", "Stella")
    for (name : String in students){
        println(name)
    }
}

 

 

var sum : Int = 0
    for (i in 1..10) {
        sum += i
    }
    println(sum)  //55

 

i in 1..10   //1<= i <= 10
i in 1 until 10  //1<= i < 10
i in 100 downTo  10  // 100>= i >= 10

 

범위 함수에서 정수가 포함되는지 유의하기!

 

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

 

 

 

for

fun isfor() {
    for (index in 1..10 ){
        println("current index is $index")
    }

    print("\n")

    for (index1 in 1..10 step 2){
        println("current index is $index1")
    }
}

 

다음과 같이 for문을 사용할 수 있다.

step 이라는 것을 사용하면 그 수만큼 건너 뛰어진다.

 

 

 

 

NonNull 과 Nullable

 

코틀린(Kotlin)에서는 Null Pointer Exception(NPE)을 방지하기 위해 Null-safety 기능을 제공한다.

이를 통해 변수의 null 가능성을 명시적으로 선언할 수 있다.

fun nullcheck() {
    // NPE : Null Pointer Exception

    var name: String = "young"
    var nullName: String? = null

    // Non-null 변수는 직접 호출 가능
    var nameInUpperCase: String = name.toUpperCase()
    var nameInLowerCase: String = name.toLowerCase()

    // Nullable 변수는 안전한 호출 연산자 ?. 사용
    var nullNameUpperCase: String? = nullName?.toUpperCase()

    // nullName이 null인 경우 "Default"로 설정
    var nullNameUpperCaseWithDefault: String = nullName?.toUpperCase() ?: "Default"

    println("nameInUpperCase: $nameInUpperCase")
    println("nameInLowerCase: $nameInLowerCase")
    println("nullNameUpperCase: $nullNameUpperCase")
    println("nullNameUpperCaseWithDefault: $nullNameUpperCaseWithDefault")
}

 

 

NonNull 변수

NonNull 변수는 null 값을 가질 수 없는 변수이다.

코틀린에서 기본적으로 모든 변수는 NonNull로 선언된다.

이러한 변수는 값을 반드시 가져야 하며, null을 할당하려고 하면 컴파일 오류가 발생한다.

 

var name: String = "John" // NonNull 변수
name = null // 컴파일 오류 발생

 

 

Nullable 변수

Nullable 변수는 null 값을 가질 수 있는 변수.

코틀린에서 Nullable 변수는 타입 뒤에 ?를 붙여 선언한다.

이러한 변수는 null 값을 가질 수 있으며, null일 가능성을 고려하여 코드를 작성해야 한다.

var nullableName: String? = "Jane" // Nullable 변수
nullableName = null // 허용됨

 

 

 

 

 

 

'Front-end Develop' 카테고리의 다른 글

HTML 구조  (2) 2024.07.23