이 게시물에서 다루는 내용 자바 개발자를 위한 Kotlin 소개 에서 발췌.
https://inf.run/BpYf
Java 개발자를 위한 Java에서 Kotlin으로의 시작 가이드 – Infron | 강의
본 강의에서는 Kotlin 언어의 특징과 배경, 문법과 동작 원리, 사용 예 및 Java와 Kotlin 인프라를 함께 사용할 때 고려해야 할 사항에 대해 알아봅니다.
www.inflearn.com
1. 변수 유형
- var: 변수, val(불변. java 최종)
- 객체 인스턴스 생성 시 타입은 var 또는 val로 사용되며 new 연산자는 사용하지 않습니다.
var num1 = 6
num1 = 7
val num2 = 0
// num2 = 1 불가
var person = Person("김멍목")
2. 유형 지정
- 유형을 지정할 때 변수 이름:유형을 지정하십시오.
- Java와 달리 모든 변수는 기본적으로 0을 포함하지 않도록 설정됩니다.
- 유형을 지정할 때 ?를 추가하여 null을 포함할 수 있습니다.
- 참고로 프로그래머는 패킹과 언패킹에 대해 걱정할 필요가 없습니다. (kotlin에서 올바르게 처리됨)
var num3:Long = 5L
var num4:Long? = null // null 사용 가능한 변수
3. 사용량 제로
- nullable 형식에 직접 이 형식의 메서드를 사용할 수 없습니다. (null 체크를 한 경우 사용 가능)
- nullable 유형에 사용되는 방법은 Safe Call입니다.
- Safe Call 메서드가 ? 첨부됩니다.
- null인 경우 값이나 구문을 적용하여 값을 바꿀 수도 있습니다. (엘비스 연산자)
- nullable 변수가 null이 될 수 없다고 생각한다면!! 붙여넣기만 하면 됩니다.
(0을 입력하면 NPE 발생) - Java 코드에서 제로 인식 주석을 사용하면 Kotlin 코드가 주석을 이해하고 위와 같이 작동합니다.
var str1: String? = null
// println(str1.length) null 가능한 타입에는 위에서 null 체크를 하지 않는 이상 바로 해당 타입의 메서드를 사용할 수 없다.
println(str1?.length) // 이와 같이 str1?로 메서드를 호출하면 가능하며, 이것을 Safe Call 이라고 함.(null 일 때 리턴 값은 null)
println(str1?.length ?: 0) // str1?.length의 값이 null 이면 0 반환. ?: 으로 null 일 때 사용할 값 or 구문을 지정 가능하며, 이것을 Elvis 연산자 라고 한다.
var str2: String? = "ABC"
println(str2!!.length) // str2는 null이 가능한 변수지만, null이 절대 아니다라고 !!를 통해서 알려줌으로써 해당 타입의 메서드를 사용 가능하다.
4. 유형 변환 방법
- Kotlin은 변수의 유형을 첫 번째 선언된 값의 유형으로 설정합니다.
- 기본 유형을 변환할 때 명시적으로 변환해야 합니다. (Java에 대한 암시적 변환)
// Kotlin은 처음 선언된 값의 타입으로 변수의 타입을 정해준다.
var num1 = 1 // Int
var num2 = 1L // Long
var num4 = 1.0 // Double
var num3 = 1.0f // Float
// 기본 타입의 변환의 경우 명시적으로 변환을 해줘야 한다. (Java의 경우 암묵적으로 변환)
var number1 = 1
// var number2 = number1 X
var number2 = number1.toLong() // toLong으로 명시적으로 형변환을 해야한다.
// nullable 변수를 Long으로 변환하는 예
var nullableNum:Int? = 1
var number3:Long = nullableNum?.toLong() ?: 0L
클래스 캐스트
- (Kotlin) is = (Java) instanceof (및 그 반대의 경우 !is)
- (Kotlin) obj as Person = (Java) (Person) obj
- as: 해당 유형이 적용되지 않는 경우 ClassCaseException 발생
- 처럼? : 유형이 적용되지 않거나 null인 경우 null 반환
fun printPersonName(obj: Any) {
if(obj is Person){ // (Kotlin) is = (Java) instanceof (반대로 !is 가능)
// (Kotlin) obj as Person = (Java) (Person) obj
var person = obj as Person // Person Type이 아닌데, Person Type으로 형변환 시, ClassCastException 발생. (만약, as?를 사용했다면 null 반환)
println(person.name)
println(obj.name) // 위에서 Person인 지 체크를 했기 때문에 알아서 Person으로 변환이 가능하다.
}
}
fun printPersonNameNullable (obj: Any?) {
if(obj is Person){ // (Kotlin) is = (Java) instanceof
var person = obj as? Person // (Kotlin) obj as Person = (Java) (Person) obj
println(person?.name)
println(obj?.name) // 위에서 Person인 지 체크를 했기 때문에 알아서 Person으로 변환이 가능하다.
}
}
5. 일체, 단결, 무
어느
- (코틀린) 임의 = (자바) 객체
- 모든 유형의 최상위 유형 = Any
단위
- (Kotlin) 단위 = (Java) 비어 있음
- void와 달리 변수형으로도 사용할 수 있습니다.
- 실제로 존재하는 유형을 나타냅니다.
아무것도 아님
- 함수가 비정상적으로 종료되었음을 나타냅니다.
- 등 해당 기능이 정상적으로 종료되지 않음을 알리기 위해 B. 예외 처리 기능 또는 무한 루프 기능.
6. 문자열 조작 방법
- 문자열에 변수를 포함하려면 ${variablename }을 사용하십시오.
- 문자열의 특정 인덱스에 있는 문자를 가져오려면 배열처럼 사용하십시오.
- 여러 줄을 입력하는 경우 “””를 삽입하십시오.
var name = "김멍목"
var age = 28
// = (java) String s = String.format("내 이름은 %s, 나이는 %s", name, age);
var s = "내 이름은 ${name}, 나이는 ${age}"
// = (java) s.charAt(0)
var s1 = s(0)
// 여러줄을 사용하는 경우, """ """ 을 사용하면 된다.
var newLineStr = """
내이름은 ${name}
나이는 ${age}
""".trimIndent()