Scala 의 연산자는 다른 언어들과 유사하게 작동한다. Python 보다는 Java 와 비슷한 점이 더 많다.
val a: Int = 3
val b: Int = 5
println(a + b); // 더하기 연산
println(a - b); // 빼기 연산
println(a * b); // 곱하기 연산
println(a / b); // 나누기 연산 (경우에 따라 결과가 float일 수 있음)
println(a % b); // 나머지 연산 (a 를 b 로 나눈 나머지. 예) 1 % 2 => 1, 3 % 2 => 1)
var a: Int = 5
var b: Int = 10
a += b // a = a + b
println(a) // 15 = 5 + 10
a -= b // a = a - b
println(a) // 5 = 15 - 10
a *= b // a = a * b
println(a) // 50 = 5 * 10
a /= b // a = a / b
println(a) // 5 = 50 / 10
a %= b // a = a % b
println(b) // 10 = 5 % 10 (% 는 나머지 연산이다.)
==
는 "두 값이 같다", !=
는 "두 값은 같지 않다" 를 확인하는 연산자다.val num1: Int = 10
val num2: Int = 10
val num3: Int = 20
println(num1 == num2) // 10 == 10 => true
println(num1 != num2) // 10 != 10 => false
println(num1 > num2) // 10 > 10 => false
println(num1 >= num2) // 10 >= 10 => true
println(num1 < num3) // 10 < 20 => true
println(num1 <= num3) // 10 <= 20 => true
두 값을 논리적으로 비교하는 연산자다.
&&
: "그리고" (둘 다 true 이어야만 true)||
: "또는" (둘 중 하나라도 true 면 true)!
: "반대" (true 면 false, false면 true 를 반환)true / false 둘 중 하나의 값으로만 반환한다.
val t: Boolean = true
val f: Boolean = false
println(t && t) // true (둘 다 모두 true 면 true)
println(t && f) // false
println(f && f) // false
println(t || t) // true (둘 중 하나라도 true 면 true)
println(t || f) // true
println(f || f) // false
println(!t) // false (true 의 반대값)
println(!f) // true (false 의 반대값)
println(!(t || f)) // false (t || f 의 반대값)
var a: Int = 2 // 2진수(0010)
var b: Int = 6 // 2진수(0110)
println(a & b) // 2. bit 단위로 and 연산 (0010 and 0110 => 0010 => 10진수(2))
println(a | b) // 6. bit 단위로 or 연산 (0010 or 0110 => 0110 => 10진수(6))
println(a ^ b) // 4. bit 단위로 xor 연산 (0010 xor 0110 => 0100 => 10진수(4))
println(~b) // -7. bit 단위로 not 연산 (not 0110 => 1001 => 10진수(-7))
// 정확히는 "ones complement"로 signed bit 이 바뀌어서 계산이
// 헷갈릴 수 있지만 현재 수준에서 자세히 알 필요 x.
println(a << 1) // 4. bit 단위로 왼쪽으로 밀기 연산 (0010 << 1 => 0100 => 10진수(4))
println(a >> 1) // 1. bit 단위로 오른쪽으로 밀기 연산 (0010 >> 1 => 0001 => 10진수(1))
사칙연산에서 + 와 - 보다 * 와 / 가 먼저 처리되듯 연산자는 처리되는 순서가 따로 있다.
Scala 에서는 아래 순서대로 처리된다.
// 1. () []
// 2. ! ~
// 3. * / %
// 4. + -
// 5. >> <<
// 6. < <= > >=
// 7. == !=
// 8. &
// 9. ^
// 10. |
// 11. &&
// 12. ||
// 13. 대입 연산자 (= += -= ...)
println(1.0 + 2.0 * 3.0 / 4.0) // 2.5
println((1.0 + 2.0) * 3.0 / 4.0) // 2.25
var a: Int = 1
var b: Int = 2
var c: Int = 3
a += b - c
println(a) // 0 (- 가 += 보다 먼저 선행되기에 a += (b - c) 라고 볼 수 있다.
println(b) // 2
println(c) // 3
주어진 코드를 보고 출력 결과를 예상해보자
var a: Int = 10
var b: Int = 20
var c: Int = 5
println(a * b)
println(b / c)
a *= b / c
println(a)
println(b)
println(c)
val t: Boolean = true
val f: Boolean = false
println(t || f && t)
println(!f && t)
println(!t || !t)
println(f || f && t)
답안
200 4 40 20 5 true true false false