Kotlin의 연산자
기본적인 산술 연산자(+,-,*,/,%), 복합 대입 연산자(+=, -=, *=, /=, %=), 증감 연산자(++,--), 논리 연산자(&&,||,!), 비교 연산자(<,>, <=, >=)는 자바와 똑같기 때문에 설명을 생략한다.
- 전개 연산자
전개 연산자는 배열 데이터를 단순 나열할 때 사용한다.
곱하기 기호인 * 를 사용하고, 배열 앞에 붙이면 배열 값을 나열할 때 사용한다.
예를 들면, array[0], array [1], array [2] 이런 식으로 작성해야 하는 것을 *array로 작성하여 간단하게 배열 값을 나열할 수 있다.
마지막으로, 전개 연산자는 List의 데이터에 바로 이용할 수 없다. 사용하려면 리스트를 배열로 변환시킨 뒤 사용해야 한다.
- 일치 연산자
일치 연산자도 자바와 유사하지만, 헷갈릴 수 있어 정리를 하려고 한다.
일치 연산자는 피연산자로 주어진 두 값이 일치하는지 판단한다.
==,!-의 경우 값(주소 값)을 비교하는 연산자이고, 자바와 다른 점은 자바에서는 ==는 주소 값을 비교하기 때문에 String값을 비교하려면, equals를 호출해야 했다.
하지만 코틀린은 ==이 내부적으로 equals를 호출하기 때문에, 주소 값이 아닌 문자열 자체를 비교한다.
===의 경우 참조 비교를 위해 사용한다. 자바의 주소 값 비교인 ==와 코틀린의 ===가 동일한 역할을 한다.
- 범위 연산자
범위 연산자는 특정 범위를 지칭하기 위해 사용한다.
A .. B로 표현하고, A부터 B까지의 수를 묶어 범위를 표현하는 것이다. for문에서 자주 사용된다.
var sum = 0
for(i in 1..10) { sum+= i }
- Null 안전 관련 연산자
null 데이터와 관련된 연사자들이다.
연산자 | 사용법 | 설명 |
? | val a:Int? | a 변수를 null 허용으로 선언 |
?: | A ?: B | A가 null이면 B 실행 |
?. | A?.length | A가 null이면 null, null이 아니면 length |
!! | A !! B | A가 null이 아닐 때만 B 실행, null 이면 예외 발생 |
코틀린은 Null 처리가 엄격해서 다양한 기법을 제공하는데 이때 사용하는 연산자이다. Null 안전과 관련된 내용은 코틀린에서 상당히 중요하다.
- 연산자 재정의
위의 설명처럼, 코틀린에서는 다양한 연산자를 제공하는데, 이러한 연산자를 재정의해서 사용할 수 있다.
연산자 재정의란, 개발자가 원하는 특정 연산을 수행하도록 연산자를 다시 정의하는 것이다.
극단적으로 설명하면, +연산자를 *연산자처럼 사용할 수 있다는 것이다.
연산자 재정의는 함수를 재정의함으로써 이뤄진다. 연산자 재정의는 연산자에 대응하는 함수를 재정의하는 것인데, 이는 클래스의 멤버로 정의할 수도 있고, 확장 함수로 추가하여 사용할 수도 있다.
연산자를 재정의하려는 함수 앞에는 operator 예약어를 추가해야 한다.
data class Test(val no:Int) {
operator fun Test.minus(arg:Int) : Int {
return no + arg
}
}
fun main(args:Array<String>) {
val obj:Test = Test(20)
val result = test - 10
println("result : $result ")
}
위의 코드를 보면, minus를 재정의했기 때문에 우리가 알고 있던 -연산자가 아니라 값을 더하는 역할을 하므로 결괏값은 30이 나온다.
연산자 함수는 +는 plus() -는 minus(), ++는 inc() 등 정해져 있다. 연산자 재정의가 필요할 때 찾아서 코드를 작성할 생각이다.
마지막으로, 코틀린에서는 자바의 논리 연산자 중 &,|는 제공하지 않고, 비트 연산자가 없고, 삼항 연산자를 제공하지 않는다. 이 점을 참고해서 자바와 헷갈리지 않게 코틀린 코드를 작성하자!
참고 서적
- 깡샘의 코틀린 프로그래밍