본문 바로가기
Programming/Kotlin

[Kotlin] Kotlin 기본 강의 (4) - 연산자

by 코딩의성지 2019. 11. 2.

벌써 네 번째 시간이다. 

예전에 그런 글을 읽은 적 있다. 개발자가 한 언어에 익숙해지는 시간은 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



 

후.. 연산자를 쭉 정리해봤다. 다들 필요할때마다 참고햇으면 좋겠다. ㅎㅎ 

 

다음 포스팅에는 연산자 오버로딩을 좀 구체적으로 공부해 볼 것이다. 그럼 오늘도 즐거운 코딩하자 .

반응형

댓글