[Kotlin] 코틀린에서 Type을 다루는 방법 - 타입추론, 타입캐스팅, Any, Unit, Nothing

김효권·2023년 4월 5일
post-thumbnail

인프런 자바 개발자를 위한 코틀린 입문(https://www.inflearn.com/course/java-to-kotlin) 강의를 듣고 내용을 정리하였습니다🤣

타입 추론(Type Inference)

코틀린은 정적 타입 언어지만 타입을 명시하지 않아도 타입 추론 기능을 제공해준다.

타입 추론: 컴파일러가 변수의 초기값을 통해 타입을 결정하는 기능

val number1 = 1L // Long 타입
val number2 // 컴파일 에러

코틀린에서는 초기값을 통해 타입 추론을 하기때문에 타입을 명시하지 않는 경우 초기값을 설정해줘야한다.

val number1: Long // Long 타입
println(number1) // 컴파일 에러

타입 명시를 했으나, 초기값을 설정하지 않은 채 해당 변수를 사용하려 하면 컴파일 에러가 발생하므로반드시 초기값을 명시해주자.
✅ 코틀린에서는 타입 추론 기능을 통해 특정 자료형을 해줘야하는 상황이 아니라면 자료형을 생략해서 코드량을 줄일 수 있다. → 자료형을 생략하는 대신 변수명을 잘 지어준다면 개발 시간이 줄어들고 코드의 가독성이 향상될 것이다!!(val isXXX, val person: 각각 Boolean 타입, Person 타입의 인스턴스라고 알아볼 수 있다. 다만, 변수명이 명확하지 않는 경우 확실하게 명시해주는 것이 좋다.

타입 캐스팅

코틀린에서 타입 캐스팅을 할때 isas를 사용한다.

fun printAgeIfPerson(obj: Any) {
	if (obj is Person) {
		val person: Person = obj as Person // 생략 가능(as)
		println(obj.age)
	}
}
  • is : Java의 instanceof를 대체한다.
  • as : Java의 (Type)을 대체한다. -> 코틀린에서는 is로 타입 검사를 하고 나서 생략해서 사용할 수 있다. (스마트 캐스팅)
  • as? : 타입이 맞지 않으면 null을 반환한다.

Any, Any?: 최상위 타입

  • 모든 타입의 조상 -> Java의 Object 클래스에 대응된다.
  • 따라서 모든 코틀린 클래스에는 toString, equals, hashCode 메서드가 존재한다.
  • 다른 메서드(wait, notify)는 존재하지 않아 사용하고 싶으면 java.lang.Object 타입으로 값을 캐스팅해서 사용해야한다.

Unit 타입: 코틀린의 void

  • Java의 void와 같은 기능을 한다.
  • 함수의 반환 타입으로 Unit을 사용할 수 있다.
  • 제네릭 파라미터를 반환하는 함수를 작성할 때 유용하게 사용할 수 있다.
interface Processor<T> {
	fun process(): T
}

class NoResultProcessor: Processor<Unit> {
	// Unit을 반환하지만 리턴 타입을 지정할 필요가 없다.
	override fun process() {
    	// 업무 처리 코드
        // return을 명시할 필요가 없다
    }
}

인터페이스의 시그니처는 process 함수가 어떤 값을 반환하라고 요구한다. 하지만 NoResultProcessor에서 명시적으로 Unit 타입을 리턴할 필요없이 컴파일러가 묵시적으로 return Unit을 넣어준다.

  • Void가 아닌 Unit? → 함수형 프로그래밍에서 Unit은 단 하나의 인스턴스만 갖는 타입을 의미한다. 즉, 코틀린의 Unit은 실제 존재하는 타입이라는 것을 표현

Nothing 타입: 이 함수는 결코 정상적으로 끝나지 않는다.

  • 함수가 정상적으로 끝나지 않았다. 라는 사실을 표현하는 역할
  • 무조건 예외를 반환하는 함수 / 무한 루프 함수 등
fun fail(message: String): Nothing {
	throw IllgalArgumentException(message)
}

이처럼 끝이 좋지 않은 함수에다가 Nothing을 명시해준다.

참고

Kotlin In Action
인프런 자바 개발자를 위한 코틀린 입문(https://www.inflearn.com/course/java-to-kotlin)

0개의 댓글