
인프런 자바 개발자를 위한 코틀린 입문(https://www.inflearn.com/course/java-to-kotlin) 강의를 듣고 내용을 정리하였습니다🤣
코틀린은 정적 타입 언어지만 타입을 명시하지 않아도 타입 추론 기능을 제공해준다.
타입 추론: 컴파일러가 변수의 초기값을 통해 타입을 결정하는 기능
val number1 = 1L // Long 타입
val number2 // 컴파일 에러
코틀린에서는 초기값을 통해 타입 추론을 하기때문에 타입을 명시하지 않는 경우 초기값을 설정해줘야한다.
val number1: Long // Long 타입
println(number1) // 컴파일 에러
타입 명시를 했으나, 초기값을 설정하지 않은 채 해당 변수를 사용하려 하면 컴파일 에러가 발생하므로반드시 초기값을 명시해주자.
✅ 코틀린에서는 타입 추론 기능을 통해 특정 자료형을 해줘야하는 상황이 아니라면 자료형을 생략해서 코드량을 줄일 수 있다. → 자료형을 생략하는 대신 변수명을 잘 지어준다면 개발 시간이 줄어들고 코드의 가독성이 향상될 것이다!!(val isXXX, val person: 각각 Boolean 타입, Person 타입의 인스턴스라고 알아볼 수 있다. 다만, 변수명이 명확하지 않는 경우 확실하게 명시해주는 것이 좋다.
코틀린에서 타입 캐스팅을 할때 is와 as를 사용한다.
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을 반환한다.Object 클래스에 대응된다.toString, equals, hashCode 메서드가 존재한다.wait, notify)는 존재하지 않아 사용하고 싶으면 java.lang.Object 타입으로 값을 캐스팅해서 사용해야한다.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은 실제 존재하는 타입이라는 것을 표현fun fail(message: String): Nothing {
throw IllgalArgumentException(message)
}
이처럼 끝이 좋지 않은 함수에다가 Nothing을 명시해준다.
Kotlin In Action
인프런 자바 개발자를 위한 코틀린 입문(https://www.inflearn.com/course/java-to-kotlin)