오늘은 Kotlin 연산자에 대해서 공부를 좀 해볼까한다.
회사 생활하면서 퇴근하고 공부하는게 쉽지가 않네요 ^_6,,,, 뜻대로 안된다.
해당 부분에 대해서 공부하면서 c++에 있던 대부분이 그대로 있다는 생각이 많이 들었고 한 번 알아보자.
산술연산자, 대입연산자, 복합 대입 연산자, 증감 연산자, 비교 연산자, 논리 연산자 등이 있다.
이름만 들으면 뭔가 좀 묵직하고 무서워 보이기는 하는디 ~... 별거없다
1. 산술 연산자
그냥 사칙연산이다. 플러스 마이너스 곱하기 나누기 그리고 %(c++과 동일하게 나누었을 때 나머지)
val number1: Int = 1 + 10
val number2: Int = 2 - 10
val number3: Int = 2 * 40
val number4: Int = 40 / 2
val number5 = 45 / 7
val number55 = 45.0 / 7
println(number5)
println(number55)
val number6 = 10 * 427 % 73 + 108
println(number6)
number 1,2,3,4는 자연스럽게 11, -8, 80, 20 이라는 것은 알 수 있을 것이다.
number5,55에서 말하고 싶은 점은, number5 출력해보면 6이 나오게된다.
그런데 나는
아니 진짜!! 나는 그냥 45를 7로 나눈 정확한 값을 알고싶다고;; 경우인데
이 때는 45나 7 둘 중 하나를 float로 적어주면 된다.
number5,6,55는 모두 내가 int라고 알려주지 않았는데, 복잡한 연산에 내가 Int라고 장담하는거 보다는
그냥 이럴 때는 kotlin한테 자료형을 정하는 걸 떠넘기면 된다! 그냥 안적으면됨 ㅎㅅㅎ
number5, 55, 6을 출력해보면
6 6.428571428571429 144 |
이렇게 출력 된다.
2. 대입 연산자
무슨 값을 대입해준다. 할 때 우리는 =을 사용 한다.
A=B 라고 한다면, B의 값을 A에 할당해주는 것인데 여기서 그냥 =이 바로 대입 연산자이다.
var number7: Int = 22
println(number7)
number7 = 100
println(number7)
위 코드에서는 int 자료형의 variable number7이 22를 할당받았다.
그리고 3번 째 line에서 100으로 값을 다시 대입해준다. 이게 끝인거같다. ㅋㅋㅋㅋㅋ
3. 복합 대입 연산자
c에서 사용하는 +=, -=, *=, /= 들이 대표적인데
A += B => A = A + B A -= B => A = A - B A *= B => A = A * B A /= B => A = A / B |
자기 자신한테 ( +, -, *, / ) B 연산을 한 값을 자기 자신한테 대입 해주는 것이다.
var number8: Int = 12
number8 += 8
println(number8)
number8 -= 10
println(number8)
number8 *= 2
println(number8)
number8 /= 5
println(number8)
나 자신한테 8 더해줘! 나 자신한테 10 빼줘 , 2 곱해줘 , 5 나눠줘~ 이런건데
12에 8더해주면 20
20에 10 빼주면 10
10에 2 곱해주면 20
20에 5 나눠주면 4
이렇게 해서 20, 10, 20, 4가 순차적으로 출력될 것이다.
4. 증감 연산자
c와 동일하기는 하더라, (전위, 후위) 연산자 ++,--가 있다.
A++ 이라고 하면, A값을 그대로 Return해 해당 line연산을 처리하고 난 뒤에 +1를 해주는 것이고
++A이면 먼저 A값을 1만큼 증가시켜 주고 해당 값을 Return 하는 것이다.
var number9: Int = 10
println(number9++) // 1번
println(number9) // 2번
println(++number9)// 3번
1번 Line에서는 후위 연산자를 사용했기 때문에 , 10 값 그자체를 출력하고 number9(10) 은 1만큼 값이 증가한다.
1번 Line에서 2번 Line으로 넘어간 시점에서는 number9이 1 증가해서 11이 된다.
그리고 2번 Line은 증감 연산자를 사용하지 않았으니 그대로 11을 출력할 것이고
3번 Line은 전위 연산자를 사용하여 , 값이 1만큼 먼저 증가하고 값을 출력하여 12가 출력될 것이다.
5. 비교 연산자
== 두 개 값이 같냐 ?
!= 두 개 값이 다르냐?
>= 왼쪽이 오른쪽 보다 크거나 같냐?
> 왼쪽이 크냐 ?
<= 오른쪽 이 왼쪽 보다 크거나 같냐?
< 오른쪽이 크냐 ?
이건데 6가지 질문 모두 yes or no로 대답할 수 있다. 그래서 비교 연산자의 Return은 참 혹은 거짓
True or False Boolean 값을 Return하게 된다.
val number10: Int = 2
val number11: Int = 2
val result: Boolean = number10 > number11
println(result)
val result2: Boolean = number10 == number11
println(result2)
val result3: Boolean = number10 != number11
println(result3)
첫 번째! numbe10이 number11 보다 크냐 ?? => 아니다 False Return
두 번째! numbe10이 number11랑 같냐 ?? => 참 True Return
두 번째! numbe10이 number11랑 다르냐 ?? => 아니다 False Return
그렇게 어렵지 않은 개념이다.
Kotlin에서 C에 없는 비교 연산자 하나가 있는데 바로, === , !==인데
얘는 그 객체가 동일하냐?? 를 물어보는거고 다르게 해석하면
두 객체의 메모리 주소가 같냐? 를 물어보는거다 // 해당 연산자는 근데 잘 안쓴다 ㅋㅋㅋㅋ
val number10: Int = 2
val number11: Int = 2
val result: Boolean = number10 === number11
println(result)
val result2: Boolean = number10 !== number11
println(result2)
val result3: Boolean = number10 === number10
println(result3)
여기서는 true , false , true가 나오는데 내가 생각하는 느낌이랑 좀 다르다?? 난 false true true를 기대했기 때문에
=> 이유는 Kotlin은 기본 데이터 타입에 대해서는 불필요한 객체 할당을 피하는 최적화를 수행한다.
기본 Data type을 객체로 인식하지 않고 ? 그냥 값으로만 인식하는 느낌이라 생각하면 된다.
그래서 그냥 아 객체 아니고 값 똑같네? result => true 이렇게 되는거다
class MyClass(val value: Int)
fun main() {
val obj1 = MyClass(42)
val obj2 = MyClass(42)
val result: Boolean = obj1 === obj2
println(result) // false
}
value 하나를 멤버 변수로 가지는 class를 만들고, 동일한 value값을 가지는 객체 obj1, obj2를 만든다 .
해당 경우는 obj1과 obj2는 분명 다른 객체이기 때문에 ===연산으로 비교했을 때
가지고 있는 멤버 변수 값은 동일하지만 false를 Return하게 된다. 이해가 잘 안되더라도 그냥 넘어가도 되는 부분이다.
6. 논리 연산자
Kotlin에서 대표적인 논리 연산자는 && || ! 3가지인데 , 순서대로 And OR Not 이라고 보면 된다.
A && B => A and B => 둘 다 True이면 True Return, 아니면 False Retrun
A || B => A or B => 둘 다 False이면 Frue Return, 아니면 True Retrun
!A => A가 True면 False, False면 True Return
val boolean1: Boolean = false
val boolean2: Boolean = false
val result4: Boolean = boolean1 && boolean2
val result5: Boolean = boolean1 || boolean2
println(result4)
println(result5)
result4는 둘 다 false이기 때문에 false Return
result5또한 둘 다 false이기 때문에 false Return
봐주셔서 감사합니다 .^_^
'Programming > Kotlin' 카테고리의 다른 글
[Kotlin 뿌시기](5) 흐름제어 (0) | 2023.12.27 |
---|---|
[Kotlin 뿌시기](4) 메소드 (1) | 2023.12.27 |
[Kotlin 뿌시기](2) Null (0) | 2023.12.24 |
[Kotlin 뿌시기] (1) 변수와 자료형 (2) | 2023.12.23 |