본문 바로가기
개발 이론/Kotlin

[Kotlin] 기초 개념 (1)

by dal_been 2024. 4. 18.
728x90

Kotlin을 공부해야하는 상황이라 부트캠프에 있는 Kotlin 기초개념 중 헷갈리거나 처음본 개념들을 정리할 것이다.

공부하면서 느낀점은 확실히 Java보다 편리한점은 존재하지만 뭔가 헷갈린다고 할까나...???

그런 부분들 정리할 예정

 


 

문자열 템플릿

 

// kotlin
val name = "DalBeen"
println("Hello, $name!")
println("Hello, ${if(age>26) name else "Dog"}!")

// java
String name = "DalBeen";
System.out.println("Hello, " + name + "!");

 

보통 자바에서는 항상 ""+""을 통해서 변수값을 넣었는데 Kotlin은 위와 같이 편리함을 제공해준다

  • $+문자열 -> 문자열 리터럴안에 사용가능
  • ${} -> 더 복잡한 수식 사용 가능

 

클래스, 프로퍼티

 

자바 클래스는 필드를 만든후 getter/setter를 만들어서 프로퍼티를 수정, 가져오기를 하지만

코틀린 클래스는 기본적인 getter,setter를 만들어주고, 수정이 필요한 경우에만 커스텀 getter/setter를 작성해줘야한다.

setter의 경우 변수 var, val에 따라 다르다.

 

var라면 값이 변경가능하기 때문에 setter 사용가능하지만

val라면 값이 불변이기 때문에 값 변경하려는 코드 작성시 에러가 뜬다.

class Person(
    val koreanName: String,
    var englishName: String
)

fun main() {
    val person = Person("Hello","안녕")
    println("${person.englishName} ${person.koreanName}")
    person.englishName = "Hi"
    println("${person.englishName} ${person.koreanName}")
}

 

 

커스텀 getter의 경우 클래스의 프로퍼티를 나타내주는 값이라면 이렇게 커스텀 게터를 통해 프로퍼티 값을 드러낼 수 있다.

(물론 fun isSquare(): Boolean으로도 가능하다) 

class Rectangle(val height: Int, val width: Int) {
    val isSquare: Boolean
        get() {
            return height == width
    } 
}

 

 

When

 

Java의 경우 if, switch를 통해 조건문을 만들어줬다. 사실 switch의 경우 개인적으로 사용하지 않았다. 뭔가 가독성이 떨어지는 느낌이랄까?? 또한 if, switch의 경우 만약 enum타입에 대해 검증할떄 enum타입이 하나 추가된다면 직접 사용하는 곳을 찾아야했다.

하지만 Kotlin은 이에 대한 편리함을 제공해준다.

 

만약 getColor에 Green에 관한 조건문이 없다면 컴파일 오류가 발생한다. 즉 enum값을 추가하게 된다면 인텔리제이에서 컴파일 오류로 사용한 곳을 알아서 찾아줄 것이다.

enum class Color {
    RED, YELLOW, GREEN
}

fun getColor(color: Color): String =
    when (color) {
        Color.RED -> "빨강"
        Color.GREEN -> "초록"
        Color.YELLOW -> "노란"
    }

 

 

 

이렇게 if else if else 문처럼 사용가능하다

fun mix(c1: Color, c2: Color) =
    when {
        c2 == Color.YELLOW -> " "
        c1 == Color.YELLOW && c2 == Color.GREEN -> " "
        else -> throw RuntimeException()
    }

 

 

 

코드처럼 타입 검사할때 자동으로 형변환까지 진행해준다.

(물론 if문에서도 자동으로 형변환 해준다)

sealed class Person(
    val name: String,
)

class Korean(
    name: String,
    val language: String
): Person(name)

class American(
    name: String,
    val language: String
): Person(name)

fun whereAreYouFrom(person: Person) {
    when (person) {
        is Korean -> println(person.language)
        is American -> println(person.language)
    }
}

 

 

 

 

예외처리

 

Java와의 차이점은 checked Exception의 경우 처리해주지 않으면 컴파일 오류가 나왔다.

다만 Kotlin의 경우 checked Exception은 없애고 RuntimeException마냥 처리할 수 있게 해준다.

 

 

함수

 

코드와 같이 디폴트 파라미터 값을 생성할 수 있다.

fun getMyName(
    firstName: String = "Park",
    lastName: String = "DalBeen"
): String = "$firstName $lastName"

 

 

Kotlin의 경우 만들어진 라이브러리 클래스에 메서드를 추가할 수 있다.

정확히 말하자면 확장함수를 이용하여 추가가능하지만 오버라이드 불가능하다(내부적으로 정적 메서드를 만들어 제공하는 것)

fun String.triple() = this + this + this

 

 

Pair, Triple

 

위 클래스들은 두개의 값, 세개의 값을 나타낸다.

val person = Pair("Snow", "Korean")
val (name, language) = person

 

처럼 선언가능하고 다시 val값으로 분해? 가능하다.

 


내일까지 Kotlin 기초 마무리하고 실습 프로젝트 코드 쳐보고 분석해봐야징

'개발 이론 > Kotlin' 카테고리의 다른 글

[Kotlin] 기초 개념 (2)  (0) 2024.04.20