본문 바로가기
Kotlin

Kotlin - 기본 문법2

by sinabeuro 2023. 4. 17.
728x90


Primitive Type 과 Reference Type 을 구분하지 않아도 된다.
Null 이 들어갈 수 있는 변수는 타입 뒤에 ?를 붙여주어야 한다.
 - 아예 다른 타입으로 간주된다.
 객체를 인스턴스화 할 때 new 를 붙이지 않아야 한다.
 
 
코틀린에서 null 을 다루는 방법

1. 코틀린에서 null 체크

2. Safe Call 과 Elvis 연산자
val str: String? = "ABC" (nullable 타입)
str?.length // 가능!!  => null 아니면 실행되고 null 이면 null 반환한다.

str?.length ?: 0 null 이면 0 반환한다.

3. 널 아님 단언!!
nullable 타입이지만, 아무리 생각해도 null 이 될 수 없는 경우
str!!.startsWith("A")

혹시나 null이 들어오면 NPE 가 나오기 때문에 확실한 경우에만 널 아님 단언!! 을 사용해야 합니다.

4. 플랫폼 타입
@Nullable
@NotNull 

null 관련 에노테이션 정보가 없다면 플랫폼 타입이라고 한다. RunTimeException 이 난다.



코틀린에서 Type 을 다루는 방법
 

코틀린에서는 선언된 기본값을 보고 타입을 추론하다.
val 3.0F 
val 3.0

자바는 타입이 더 큰 타입(byte)으로 암시적으로 변경된다.
코틀린은 명시적으로 형변환을 해야한다.
toLong()
toDouble()
toString()

엘비스 연산자를 활용해서, 최종 결과물이 Long 타입이 될 수 있도록 처리

val number2: Long = number1?.toLong() ?: 0L

fun printAgeIfPerson(obj: Any) {
    if (obj is Person) {
        // 스마트 캐스트
        // val person = obj as Person
        // println(person)
        println(obj)
    }
}

 

if (obj !is Person) { }

val person = obj as? Person 
=> obj 변수가 null 이면 null 로 받는다. (nullable type)
println(person?.age)

 


Any 와 Unit 

Any 
- 자바의 Object 역할. (모든 객체의 최상위 타입)
- 모든 primitive Type의 최상의 타입도 Any이다.
- Any 자체로는 null 을 포함할 수 없어 null 을 포함하고 싶다면, Any?로 표현.
- Any 에 equals / hashCode / toString 존재.

 

Unit 
Unit 은 Java의 void 와 동일한 역할.
- void 와 다르게 Unit 은 그 자체로 타입 인자로 사용 가능하다.
- 함수형 프로그래밍에서 Unit 은 단 하나의 인스턴스만 갖는 타입을 의미. 즉, 코틀린의 Unit 은 실제 존재하는 타입이라는 것을 표현.

Nothing 은 함수가 정상적으로 끝나지 않았다는 사실을 표현하는 역할
무조건 예외를 반환하는 함수 / 무한루프 함수 등

String interpolation / String indexing

var value = "이름: ${name}"

val str = """
fsdfs
""".trimIndent()


코틀린에서는 문자열을 배열로 가져올 수 있다.

downTo(감소), step(등차)
str[0], str[2]

in 범위 연산자(= between)
if (score in 0..100) {}

if (score !in 0..100) {
	throw IllegalArgumentException("score의 범위는 0부터 100입니다.")
}



switch 와 when

코틀린에서는 자바와 달리 switch 문이 없으며, 대신 when 문이 있습니다.

when 의 이용한 예시 코드는 다음과 같습니다.

return when (score) {
    in 90..99 -> "A"
    in 80..89 -> "B"
    in 70..79 -> "C"
    else -> "D"
}

return when (obj) {
    is String -> obj.startsWith("A")
    else -> false
}

return when (obj) {
    1, 0, -1 -> println("어디서 많이 본 숫자입니다.")
    else -> println("1, 0, -1이 아닙니다.")
}


fun judgeNumber2(number: Int) {
    when {
        number == 0 -> println("주어진 숫자는 0입니다.")
        number % 2 == 0 -> println("주어진 숫자는 짝수입니다.")
        else -> println("주어진 숫자는 홀수입니다.")
    }
}



 
 
 
 
 

728x90

'Kotlin' 카테고리의 다른 글

코틀린 - Object 함수(Companion)  (0) 2023.05.01
코틀린 - 접근 제어자  (0) 2023.05.01
코틀린 - 클래스 생성자와 상속  (0) 2023.05.01
Kotlin - 기본 문법1  (0) 2023.03.27
Kotlin - 변수 선언  (0) 2023.03.01

댓글