벌써 네 번째 시간이다.
예전에 그런 글을 읽은 적 있다. 개발자가 한 언어에 익숙해지는 시간은 2주라는 ...
Kotlin을 공부하다보니 2가지 생각이 난다.
하나는 내가 개발자가 아닐 수 도 있겠다는 생각과,
또 하나는 저 말을 한 사람은 천재이거나 허풍이 있는 사람이 이라는 생각....
아무튼 오늘 네 번째 Kotlin 포스팅이니 잘 보자 !! ㅎㅎ
오늘 할건 !!! 두구두구두구두구 ..... 바로 연산자이다.
Kotlin 연산자
자바든 C든 우리는 다양한 연산자를 배운 기억이 있다. +,-, ! ,= 등 다양한 연산자를 배웠었다. 코틀린 역시 !! 동일한 연산자를 제공하고 있다. 그와 동시에 연산자를 오버로딩한 함수를 사용해서 쓸 수 있다. 아래의 표를 보자.
- 산술 연산자
표현 | 오버로딩한 함수 | 내용 |
a + b | a.plus(b) | a 와 b 를 더함 |
a - b | a.minus(b) | a 와 b 를 뺌 |
a * b | a.times(b) | a 와 b 를 곱함 |
a / b | a.div(b) | a 를 b 로 나눔 |
a % b | a.rem(b) | a 를 b 로 나눈 나머지 |
a..b | a.rangeTo(b) | a 부터 b까지의 배열 |
다른건 척보면 아실 것 같으니깐, 맨아래 a..b 만 예제를 작성해봤다.
1
2
3
4
5
6
7
8
|
var a1 = 5;
var a2 = 10;
var arr1 = a1..a2;
var arr2 = a1.rangeTo(a2);
println("arr1 : ${arr1}");
println("arr2 : ${arr2}");
|
이걸 실행해보면
이런 결과가 나온다. 간단하다 5 부터 10까지의 배열이라는 얘기다. 더 자세한건 차차 알려줄테니 꾸준히 봐주면 좋겠다.
- 단항 연산자
표현 | 오버로딩한 함수 | 내용 |
+a | a.unaryPlus() | a를 양수로 변환 |
-a | a.unaryMinus() | a를 음수로 변환 |
!a | a.not() | true면 false, false면 true |
a++ , ++a | a.inc() -> ++a랑 같음 | a를 1 증가 |
a--, --a | a.dec() -> --a랑 같음 | a를 1 감소 |
여기서 뒤에 a++, a-- 와 ++a, --a 의 차이는 다들 아실 거라고 생각하지만 한번 언급하고 넘어가겠다.
아래 예제를 보자.
1
2
3
4
5
6
7
8
9
10
11
|
var a1 = 5;
var b1 = 5;
var a2 = a1++;
var b2 = b1--;
a1 = 5;
b1 = 5;
var a3 = ++a1;
var b2 = --b1;
|
a2 에는 a1의 값이 대입되고 a1이 1 증가한다. b2 에는 b1의 값이 대입되고 b1이 1 감소한다.
a3 에는 a1이 1 증가하고 그 값이 대입된다. b3 에는 b1의 값이 1 감소하고 그 값이 대입된다.
- 복합 대입 연산자
표현 | 오버로딩한 함수 | 내용 |
a += b | a.plusAssign(b) | a와 b를 더한 결과를 a에 저장 |
a -= b | a.minusAssign(b) | a와 b를 뺀 결과를 a에 저장 |
a *= b | a.timesAssign(b) | a와 b를 곱한 결과를 a에 저장 |
a /= b | a.divAssign(b) | a 와 b를 나눈 몫을 a에 저장 |
a %= b | a.remAssign(b) | a 와 b를 나눈 나머지를 a에 저장 |
- 비트 연산자
표현 ( 자바) | 함수 | 내용 |
a shl b ( a << b) | a.shl(b) | a를 표현하는 비트를 b만큼 왼쪽으로 이동 (부호 있음) |
a shr b (a >> b) | a.shr(b) | a를 표현하는 비트를 b만큼 오른쪽으로 이동 (부호 있음) |
a ushr b (a >>> b) | a.ushr(b) | a를 표현하는 비트를 b만큼 오른쪽 이동 (부호 없음) |
a and b ( a & b) | a.and(b) | a를 표현하는 비트와 b를 표현하는 비트로 논리곱 (AND) 연산 |
a or b ( a | b ) | a.or(b) | a를 표현하는 비트와 b를 표현하는 비트로 논리합 (OR) 연산 |
a xor b ( a^b) | a.xor(b) | a를 표현하는 비트와 b를 표현하는 비트로 배타적 논리합 (XOR) 연산 |
a.inv (~a) | a.inv() | a의 비트의 0 또는 1의 값을 반대로 |
- 논리 연산자
표현 | 내용 |
a && b | 두 항이 모두 true 일때 true, 아니면 false |
a || b | 두 항 중 하나라도 true 면 true , 둘다 false 면 false |
!a | 부정 단항 연산자로 true면 false , false 면 true |
- 비교 연산자
표현 | 오버로딩한 함수 | 내용 |
a > 10 | a.compareTo(10) > 0 | 맞으면 true 틀리면 false |
a < 10 | a.compareTo(10) < 0 | 맞으면 true 틀리면 false |
a >= 10 | a.compareTo(10) >= 0 | 맞으면 true 틀리면 false |
a <= 10 | a.compareTo(10) <= 0 | 맞으면 true 틀리면 false |
a == b | a?.equals(b) ?: (b == null) | 값이 같으면 true 다르면 false |
a != b | !(a?.equals(b)) ?: (b == null) | 값이 같으면 false 다르면 true |
a === b | 두 항의 참조가 같으면 true , 다르면 false | |
a !== b | 두 항의 참조가 같으면 false, 다르면 true |
후.. 연산자를 쭉 정리해봤다. 다들 필요할때마다 참고햇으면 좋겠다. ㅎㅎ
다음 포스팅에는 연산자 오버로딩을 좀 구체적으로 공부해 볼 것이다. 그럼 오늘도 즐거운 코딩하자 .
'Programming > Kotlin' 카테고리의 다른 글
[Kotlin] Kotlin 기본 강의 (6) - 반복문 (0) | 2019.11.03 |
---|---|
[Kotlin] Kotlin 기본 강의 (5) - 분기문 (0) | 2019.11.03 |
[Kotlin] Kotlin 기본 강의 (3) - Lambda (0) | 2019.10.30 |
[Kotlin] Kotiln 기본 강의 (2) - 함수 (1) | 2019.10.26 |
[Kotlin] Kotlin 기본 강의 (1) - 자료형 & 변수 (0) | 2019.10.26 |
댓글