F.R.I.D.A.Y.

Kotlin: 05 연산자 본문

DEV/Kotlin

Kotlin: 05 연산자

F.R.I.D.A.Y. 2020. 3. 28. 23:19
반응형

 이전 포스트들에서 몇 가지 연산자들을 먼저 사용해 보았습니다. 이번 시간에는 먼저 사용한 연산자들을 포함해 어떤 연산자들이 있고 그 기능은 무엇인지 알아봅니다.


산술 연산자

 수학에서 산술 연산자라 하면 더하기, 빼기, 곱하기, 나누기로 총 네 가지가 존재합니다. 코틀린에서는 수학의 사칙 연산자에 나머지 연산자[# Modulo operator]라 불리는 연산자까지 총 다섯 가지를 산술 연산자라고 부릅니다.

연산자 설명 수식 결과
+ 더하기 15 + 3 18
- 빼기 13 - 3 10
* 곱하기 3 * 10 30
/ 나누기(몫) 4 / 2 2
% 나머지 10 % 3 1

 나머지 연산자에 대한 추가 설명을 하면, 연산자의 좌측 피연산자 값을 우측 피연산자 값으로 나눈 나머지를 구하는 연산자입니다.

증감 연산자 // 200329-2314-added

 증감 연산자가 빠졌군요. 증감 연산자는 단항 연산자로서 아래와 같이 생겼고, 또 쓰입니다.

연산자 설명 수식(i = 5) k의 값 i의 값
i++ 후위 증가 연산자 k = i++ 5 6
i-- 후위 감소 연산자 k = i-- 5 4
++i 전위 증가 연산자 k = ++i 6 6
--i 전위 감소 연산자 k = --i 4 4

 표의 k와 i 값을 보면 알 수 있듯이 후위 연산자는 값을 대입한 뒤 해당하는 피연산자 값을 증감시키지만, 전위 연산자는 피연산자의 값을 증감시킨 뒤에 대입을 합니다.

대입 연산자

 우리가 변수에 값을 할당할 때, 등호를 이용했습니다. 이 등호 또한 연산자로 분류됩니다.

축약형 대입 연산자

 만일 대입 연산자의 좌측 피연산자에 연산을 가한 뒤 다시 좌측 피연산자에 연산 결과를 집어넣으려 한다면 축약형 대입 연산자를 사용할 수 있습니다.

var num = 10
num = num * 2
/* equals */

num *= 2

 이 축약형 대입 연산자는 모든 산술 연산자를 축약형으로 가질 수 있습니다.

연산자 축약형
+ +=
- -=
* *=
/ /=
% %=

 축약형에 붙는 산술 연산은 우측의 연산이 모두 끝난 뒤 좌측 피연산자와 연산될 때 이용됩니다.

// e.g.

var num:Int = 30

num += 15 * 2
// equals
// num = num + (15 * 2)

비교 연산자

 이전 포스트에서 이중 등호와 삼중 등호를 잠시 설명했습니다. 등호 연산자는 비교 연산자에 포함되며, 총 여덟 개의 비교 연산자가 존재합니다.

연산자 설명[# 모든 설명은 해당 연산자로 수식을 작성했을 때 True가 반환되는 경우로 설명했습니다] 수식 결과
> 좌측 피연산자가 더 큼 3 > 2 True
< 우측 피연산자가 더 큼 3 < 3 False
>= 좌측 피연산자가 더 크거나 같음 3 >= 5 False
<= 우측 피연산자가 더 크거나 같음 80 <= 90 True
== 양쪽 피연산자의 값이 같음 1 == 1 True
!= 양쪽 피연산자의 값이 다름 13 != 12 True
=== 양쪽 피연산자의 주소가 같음 'H' === 'h' False
!== 양쪽 피연산자의 주소가 다름 'H' !== 'h' True

 이 연산자들은 두 값이 대, 소, 같음을 판단하는 연산자이다 보니 반환값이 True, False인 Boolean 타입입니다.

논리 연산자

 이 연산자는 양쪽 피연산자를 평가합니다.

연산자 설명 수식 결과
&& 양쪽 피연산자가 모두 참인가 True && True True
||[#\ 키보드에서 원화, 혹은 역슬래시를 Shift와 함께 누르면 나옵니다. 이 블로그에서는 폰트 특성으로 역슬래시로 나오겠네요.] 양쪽 피연산자 중 하나 이상의 피연산자가 참 True || False True
! 피연산자의 값을 부정 !(True) False

 && 연산자는 논리곱 연산자로 부릅니다. False를 0, True를 1 이상의 값으로 두었을 때, 곱한 값이 결괏값이 되죠.

 || 연산자는 논리합 연산자로 부릅니다. 양쪽 피연산자의 결과를 더합니다. 더한 값이 논리합 연산자의 결과 값입니다.

 부정 연산자 !는 단항 연산자[# 피연산자가 하나인 경우 단항 연산자라고 부릅니다. 논리곱/합 연산자는 피연산자가 두 개 필요하므로 이항 연산자로 부릅니다.]로, 피연산자의 값을 부정합니다.


Extra

비트 연산자

 코틀린의 비트 연산은 연산자가 아닌 메서드를 제공합니다. 그러나 중위 표기를 할 수 있도록 코틀린에서 제공하고 있으므로 편의상 연산자로 부르겠습니다. 그러나 비트 연산에는 연산자가 아니라 메서드를 이용한다는 점을 꼭 기억하세요.

 비트 연산자의 경우에는 많은 상용 프로그램, 좋은 알고리즘에서 사용하지만 공부할 때는 자주 보지 못할 것입니다. 평소에 보던 것과는 조금은 생소하기 때문이죠. 그래서 굳이 지금 다 알려고 하지는 않아도 됩니다. 물론 더 나은[# 속도, 최적화 측면의] 기능을 만들려고 한다면 꼭 짚고 넘어가야 합니다.

 

 비트 연산은 기본적으로 이진수가 토대가 된다고 보면 됩니다. 따라서 결과 값을 이진수로 표현할 것입니다.

연산자 설명 수식
x.shl(y) x의 비트 패턴을 왼쪽으로 y만큼 이동 15 shl 3 120
x.shr(y) x의 부호 비트를 제외한 비트 패턴을 오른쪽으로 y만큼 이동 120 shr 3 15
x.ushr(y) x의 부호 비트를 포함한 비트 패턴을 오른쪽으로 y만큼 이동 -5 ushr 3 5_368_780_911[# 언더스코어를 이용하면 값에 영향을 주지 않고 단위 구분을 할 수 있습니다.]
x.and(y) x와 y의 각 비트를 논리곱으로 연산 5 and 3 1
x.or(y) x와 y의 각 비트를 논리합으로 연산 5 or 3 7
x.xor(y) x와 y의 각 비트를 배타적 논리합으로 연산 5 xor 3 6
x.inv() x의 비트 패턴을 반전 5.inv() -6

 주의할 점은 마지막 inv[# inverse의 약자] 메서드는 중위 표기법을 제공하지 않습니다. 또한 우리가 사용하는 goorm ide의 코틀린 버전 기준[# 1.1], 비트 연산 메서드는 기본 정수 자료형 중 Byte, Short는 shl, shr, ushr 메서드를 사용할 수 없습니다. 자세한 내용은 공식 문서를 참고하세요.


Next.

 

Kotlin: 06 세이프콜과 non-null 단정

원래라면 04 자료형의 비교와 변환에서 함께 다루어야 했습니다. 삼중 등호를 이해하려면 말이죠. 그러나 처음 접하는 사람들은 이를 난해하게 생각할 수 있습니다. 그래서 조금 뒤인 이번 06번으로 미루었습니다..

pang2h.tistory.com

# index

728x90
반응형

'DEV > Kotlin' 카테고리의 다른 글

Kotlin: 07 함수  (0) 2020.03.31
Kotlin: 06 세이프콜과 non-null 단정  (0) 2020.03.29
Kotlin: 04 자료의 비교와 변환  (0) 2020.03.27
Kotlin: 03 출력하기  (0) 2020.03.24
Kotlin: 02 변수와 자료형  (1) 2020.03.23
Comments