반응형
연산자 우선순위
우선순위 | 분류 | 심볼 |
높음 | 접미사 | ++ -- . ?. ? |
접두사 | - + ++ -- ! 라벨선언(이름@) | |
오른쪽 형식 | : as as? | |
배수 | * / % | |
첨가 | + - | |
범위 | .. | |
중위함수 | SimpleName | |
엘비스 | ?: | |
이름검사 | in !in is !is | |
비교 | < > <= >= | |
동등성 | == != | |
결합 | && | |
분리 | || | |
낮음 | 할당 | = += -= *= /= %= |
package chapt7.section3
class Point(var x: Int = 0, var y: Int = 10) {
operator fun plus(p: Point): Point {
return Point(x+p.x, y+p.y)
}
operator fun dec()=Point(--x,--y)
}
fun main() {
val p1 = Point(3, -8)
val p2 = Point(2, 9)
var point = Point()
point = p1+p2
println("point=(${point.x}, ${point.y})")
--point
println("point=(${point.x}, ${point.y})")
}
연산자의 종류
산술연산자
표현식 | 의미 |
a + b | a.plus(b) |
a - b | a.minus(b) |
a * b | a.times(b) |
a / b | a.div(b) |
a % b | a.rem(b) |
a..b | a.rangeTo(b) |
호출연산자(Invoke Operator)
- 함수를 돕는데 사용됨
class Manager {
operator fun invoke(value: String){
println(value)
}
}
fun main() {
val manager = Manager()
manager("Do something for me!") //manager.invoke("")형태로 호출되며 invoke가 생략됨
}
val sum = {x: Int, y:Int -> x+y}
sum.invoke(3,10)
sum(3,10)
인덱스 접근 연산자
- 게터/세터를 다루기 위한 대괄호([ ])연산자를 제공
- 인덱스 표기법을 통해 값을 읽어오거나 쓰기가 가능
표현식 | 의미 |
a[i] | a.get(i) |
a[i, j] | a.get(i,j) |
a[i_1, ..., i_n] | a.get(i_1, ..., i_n) |
a[i] = b | a.set(i, b) |
a[i, j] = b | a.set(i, j, b) |
a[i_1, ..., i_n] = b | a.set(i_1, ..., i_n, b) |
단일연산자
표현식 | 의미 |
+a | a.unaryPlus() |
-a | a.unaryMinus() |
!a | a.not() |
data class Point(val x: Int, val y: Int)
operator fun Point.unaryMinus() = Point(-x, -y)
val point = Point(10,20)
println(-point)
범위연산자
a in b | b.contains(a) |
a !in b | !b.contains(a) |
대입연산자
-연산의 결과 할당
a += b | a.plusAssign(b) (a=a+b) |
a -= b | a.minusAssign(b) |
a *= b | a.timesAssign(b) |
a /= b | a.divAssign(b) |
a %= b | a.remAssign(b) |
동등성연산자
equals()
- a, b 둘 다가 null이면 true 반환
- Any 안에 operator 키워드가 붙어서 구현되기 때문에 override 키워드를 사용해서 == 와 치환할 수 있다.
a == b | a?.equals(b) ?:(b === null) |
a != b | !(a?.equals(b) ?: (b===null)) |
비교 연산자
- compareTo()를 호출해 반환되는 정수를 보고 비교
a>b | a.compareTo(b) > 0 |
a<b | a.compareTo(b) < 0 |
a>=b | a.compareTo(b) >= 0 |
a<=b | a.compareTo(b) <= 0 |