반응형
이 포스팅에서 작성하는 내용은 자바 개발자를 위한 코틀린 입문 에서 발췌하였습니다.
https://inf.run/BpYf
1. 변수 타입
- var : 가변, val(불변. java final)
- 객체 인스턴스 생성 시, 타입은 var, val로 사용하며, new 연산자를 사용하지 않는다.
var num1 = 6
num1 = 7
val num2 = 0
// num2 = 1 불가
var person = Person("김멍목")
2. 타입 지정
- 타입 지정 시, 변수이름:타입 으로 지정
- Java와는 다르게 기본적으로 모든 변수에는 null이 들어갈 수 없도록 설정되어 있다.
- 타입을 지정할 때 뒤에 ?를 붙이면 null을 넣을 수 있다.
- 참고로, 프로그래머가 박싱과 언박싱을 신경쓰지 않아도 된다. (kotlin에서 적절하게 처리)
var num3:Long = 5L
var num4:Long? = null // null 사용 가능한 변수
3. Null 사용법
- null 가능한 타입에는 위에서 바로 해당 타입의 메서드를 사용할 수 없다. (null 체크를 진행했다면 사용 가능)
- null 가능한 타입에서 사용하는 방법은 Safe Call이다.
- Safe Call 방법은 ?를 붙여서 null 일 수도 있다고 알려주는 것이다.
- null 일 때 대체할 값이나 구문을 적용할 수도 있다. (Elvis 연산자)
- 만약, null이 가능한 타입 변수가 절대로 null 이 아닐거라고 생각한다면 !! 를 붙여주면 된다.
(null 이 들어오면, NPE 발생) - Java 코드에서 null 관련 어노테이션을 사용한다면, 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 발생
- as? : 만약 해당 타입이 아니거나 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, Unit, Nothing
Any
- (Kotlin) Any = (Java) Object
- 모든 타입의 최상위 타입 = Any
Unit
- (Kotlin) Unit = (Java) void
- void와는 달리, 변수의 타입으로도 사용될 수 있음
- 실제로 존재하는 타입이라는 것을 표현
Nothing
- 함수가 정상적으로 종료되지 않았다는 것을 표현
- 예외처리용이나 무한루프용 함수와 같이 해당 함수가 정상적으로 종료되지 않는다는 것을 알려주기 위함
6. 문자열 조작 방법
- 문자열 안에 변수를 넣을 땐, ${변수명 } 사용
- 문자열의 특정 인덱스의 문자를 가져올 땐 배열처럼 사용
- 여러 줄을 넣을 땐 """를 넣으면 된다.
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()
반응형
'BE > Kotlin' 카테고리의 다른 글
[Kotlin] Lambda Expression (0) | 2023.03.10 |
---|---|
[Kotlin] Collection, 확장/중위함수 (0) | 2023.03.08 |
[Kotlin] object 키워드, 클래스 관련 (0) | 2023.03.07 |
[Kotlin] 클래스, 상속, 접근제어자 (0) | 2023.03.04 |
[Kotlin] 조건문, 반복분, 예외처리 (0) | 2023.02.24 |