Kotlin 기초문법

2024. 4. 23. 15:43TIL

오늘 배운 중요한 🔑 point

  • Kotlin에서는 int age= 17이라는 형식대신 var age: Int =17 식으로 변수 선언을 해야한다 
  • 조건문이나 반복문,고차원 함수 등은 자주활용되기때문에 많은 연습을 통해 익숙해지는것이 중요하다
  • 예외처리를 함에 있어서 모든 예외를 미리 파악하고 처리하는것은 쉽지 않은 일이므로 코딩을 자주 하면서 예외가 발생할 수 있는 상황을 많이 경험해보는것이 가장 중요하다

🎯 오늘 배운 내용

변수란?

프로그램이 실행되는 동안 데이터를 임시로 저장하는 메모리 공간

 

Kotlin에서 변수 선언하기

fun main(){
    val name: String = "박형조"
    var age:Int = 26
}

 

변수 선언 순서


1. var(변할 수 있는 변수) , val(변하지 않는 변수) 둘중 하나의 키워드를 선택
2. 변수 이름 정하기(camelCase)
3. 데이터 타입 정하기(정수형이면 :Int, 문자열이면 :String)
4. 변수 안에 집어넣을 값 정하기 ="이름". =26 (초기에는 변수에 값을 꼭 할당하지 않아도 되지만 최종적으로는 값을 할당해야만 한다)

 

입출력

 

출력 (프로그램 -> 다른장치)

프로그램 결과를 모니터로 보여주고 프로그램 안에 내용을 메모장으로 내용 전달 하는 등 프로그램에서 다른 장치로 데이터를 전송하는 행위를 출력이라고 한다
fun main(){

    val name: String = "홍길동"
    var age:Int = 120
    println("내 이름은 ${name} 이고 나이는 ${age}살입니다.")
}

출력 결과

 

입력 (다른 장치 -> 프로그램) 

키보드로 입력한 내용, 마이크에서 녹음한 목소리, 메모장의 내용을 불러오는 등 다른 장치로부터 데이터를 불러와서 프로그렘에서 확인하는 행위를 입력이라고 한다
fun main(){
    var name: String = readLine()!!.toString()
    var age:Int = readLine()!!.toInt()
    println("내 이름은 ${name} 이고 나이는 ${age}살입니다.")
}

입력 받고 출력

 

조건식

 

if else 

if () 괄호안에 조건이 true일때 중괄호 안의 내용을 실행하고 괄호안의 조건이 false라면 else문을 실행시킴
fun main(){
    var name:String = readLine()!!.toString()
    if(name.length>5){
        println("${name}의 길이는 ${name.length}자나 됩니다 혹시 외국인이신가요")
    }
    else{
        println("당신의 이름은: ${name}입니다 적당한 길이입니다 ")
    }
}

 

when

when() 괄호안에 들어가있는 변수 또는 상수 값의 경우에 따라 실행, else if가 많아지게 될때는 when을 사용하는게 가독성이 더 뛰어나다!
fun main(){
    println("오늘의 별자리운세! 당신의 별자리는?: ")
    var star:String = readLine()!!.toString()

    when(star){
        "천칭자리"->{
            println("오늘 당신의 별자리를 보면, 새로운 일을 도모하기에 적절한 어쩌구저쩌구")
        }
        "전갈자리"->{
            println("많은 사람들의 당신에 대한 기대가 큽니다. 그러나 부담스러 어쩌구저쩌구")
        }
        "염소자리"->{
            println("흐뭇한 하루가 예상됩니다. 평소 쌓아 온 인덕이 오늘에 와서 어쩌구저쩌구")
        }
        else ->{
            println("천청,전갈,염소자리만 구현되어있습니다")
        }
    }
}

 

반복문

 

for

반복문에서 사용할 변수를 하나 지정하고 변수가 반복할 구간을 정해주면 중괄호 안의 코드를 반복 시행한다
fun main(){
    println("구구단을 외우자!")

    for(i in 1..9){
        println("${i}단 시작!")
        for(j in 1..9){
            println("${i} x ${j} = ${i*j}")
        }
    }
}

 

 

while

괄호안의 내용이 true일경우에 계속해서 반복한다! 무한루프를 방지하기 위해서 신경을 써줘야한다
fun main(){
    println("구구단을 외우자!")
    var i=1;
    while(i<10){
        var j=1;
        println("${i}단 시작!")
        while(j<10){
            println("${i} x ${j} = ${i*j}")
            j++
        }
        i++
    }
}

 

 

형변환

다른타입으로 변환하는것을 의미하며 타입 캐스팅이라고도 한다

 

기본적인 형변환

fun main(){
    val age:String = "423"
    println(age.toInt()+577)
}

 

조건문을 이용한 형변환

fun main(){
    printLength(422)
}
fun printLength(value: Any) {
    if(value is String){
        println(value.length)
    }
    else{
        println("string타입이 아닙니다")
    }
}

 

Collection

데이터를 수집하거나 그룹화하는 자료구조

 

List

순서가 있는 데이터의 컬렉션 
MutableList(변경 가능)                       List(변경 불가능)
요소를 추가하거나 제거 가능             요소 읽기만 가능하고 크기는 변경되지 않음

fun main(){
    val iAmAmutList: MutableList<Int> = mutableListOf(1,2,3)
    val iAmAList:List<String> = listOf("스파르타","코딩","2주차","TIL")
    println(iAmAmutList)
    println(iAmAList)
}

 

Map

키와 값의 쌍으로 이루어진 자료구조, 키를 통해 값을 찾을 수 있다
fun main(){
    var fruits:MutableMap<String,Int> = mutableMapOf("apple" to 5, "watermelon" to 4, "orange" to 3)

//    val appleCount = map["apple"]
    fruits["watermelon"]=5
    println(fruits)
    fruits.remove("orange")
    println(fruits)
}

 

고차함수

함수를 인자로 받거나 함수를 반환하는 함수를 고차함수라 하며 람다표현식을 통해 작성 가능하다
fun main(){
    val numbers= listOf(1,2,3,4,5,6)

    numbers.forEach{it-> println(it)}

    val names= listOf("이름","나이","성별")
    names.forEach{ println(it)} //it-> 부분 생략가능
}

 

 

Nullable type

null이 될 수 있는 변수를 의미한다.     변수 형태에 ?를 붙여서 표현
fun main(){
    val nullableString: String? = "문자열"

    if (nullableString != null) {
        println(nullableString.length)
    }
}

 

 

예외 처리

예상치 못하는 상황에서 다양하게 오류가 발생하는데 이를 다루는 방법이 여러가지 있다

 

try-catch

try에는 예외가 발생할 수 있는 코드, catch에는 예외가 발생했을때 수행할 코드
    fun main() {
        val userInput = "abc"
        val result = safeIntegerConversion(userInput)
        println(result)
    }

    fun safeIntegerConversion(str: String): Int {
        return try {
            str.toInt()
        } catch (e: NumberFormatException) {
            println("Error: ${e.message}")
            0
        }
    }

abc문자형을 .toInt()를 사용하여 int형으로 바꾸려 한 부분이 오류가 발생했지만 예외처리를 통해 0이 출력됨 

 

finally

예외 발생 여부에 관계없이 항상 실행되는 코드
fun main() {
    performFileOperations()
}

fun performFileOperations() {
    val file = File("example.txt")

    try {
        // 파일 관련 작업 수행
        println("File operations performed.")
    } finally {
        // 항상 실행되는 블록
        file.close()
        println("File closed.")
    }
}

finally블록은 항상 실행된다

 

 

 

🤔 어떻게 활용할까?

Kotlin의 가장 큰 특징 중 하나가 NullSaftey이기때문에 try-catch, finally 등 예외처리를 적극적으로 활용하는것이 필요해보인다. 

📓 오늘의 한줄

When you want something, all the universe conspires in helping you to achieve it 

- Paulo Coelho -

'TIL' 카테고리의 다른 글

Test Code 작성을 생활화 합시다  (0) 2024.04.25
Class에 관하여  (0) 2024.04.24
Kotlin과 사용규칙  (0) 2024.04.22
미니 팀프로젝트 회고  (0) 2024.04.19
배포 진행시 예상치 못한 오류 발생  (1) 2024.04.18