연산자(operator)란 특정한 작업을 하기 위해 사용하는 기호를 의미한다. 작업의 종류에 따라서 대입 연산자, 산술 연산자, 비교 연산자, 논리 연산자 등이 있다. 이번 수업에서는 가장 기초적인 연산자에 대해서 알아보고, 여기서 다루지 않는 연산자들은 각 연산자가 실제로 사용되는 맥락에서 차차 알아보겠다.
산술 연산자는 수학적인 계산에 사용되는 연산자다. 기초적인 수학적 소양이 있다면 어려운 연산자는 없다. 다만, 수학에서 사용하는 연산자와 프로그래밍에서 사용하는 연산자는 기호의 모양이 조금 다르다.
연산자 | 기능 |
---|---|
+ | 더하기 |
- | 빼기 |
* | 곱하기 |
/ | 나누기 |
% | 나머지 |
int a=2;
int b=1;
System.out.println(a+b); // 3
System.out.println(a-b); // 1
System.out.println(a*b); // 2
System.out.println(a/b); // 2
System.out.println(a%b); // 0
System.out.println(b%a); // 1
+ 연산자는 숫자와 숫자를 더할 때 사용되지만, 문자열과 문자열을 결합할 때도 사용된다. 아래의 예제를 보자.
String a="Hello";
String b=" Java";
String result=a+b; // Hello Java
System.out.println(result); // Hello Java
자바는 데이터 타입이 있기 때문에 같은 숫자임에도 정수와 실수라는 형식이 존재한다.
int a=10;
int b=3;
float c=10.0F;
float d=3.0F;
System.out.println(a/b); // 3
System.out.println(c/d); // 3.3333333
System.out.println(a/d); // 3.3333333
첫 번째 결과는 정수와 정수를 나눈 것이다. 3은 나머지의 몫이고, 나머지는 버려졌다. 정수는 소수점을 표현할 수 없으므로 정수만 표시된 것이다.
세 번째 결과는 정수에서 실수를 나눈 것이다. 이 경우 암시적으로 형 변환이 일어나기 때문에 정수가 실수가 된다.
1+2에서 사용한 연산자 +는 이항 연산자이고, 좌항인 1과 우항인 2를 더하는 작업을 한다. 단항 연산자는 하나의 항을 대상으로 연산이 이루어지는 연산자이다. 다음은 자바에서 제공하는 단항 연산자들이다.
연산자 | 기능 |
---|---|
+ | 양수를 표현한다. 실제로는 사용할 필요가 없다. |
- | 음수를 표현한다. |
++ | 증가(increment) 연산자로 항의 값을 1씩 증가시킨다. |
-- | 감소(Decrement) 연산자로 항의 값을 1씩 감소시킨다. |
int i=3;
i++;
System.out.println(i); // 4
++i;
System.out.println(i); // 5
System.out.println(++i); // 6
System.out.println(i++); // 6
System.out.println(i); // 7
i의 값은 3이다. i++를 한 후에 5행에서 출력한 결과는 4가 되었다. ++는 자신과 결합되어 있는 항의 값에 1을 더하는 연산을 한다. 이것은 아래와 의미가 같다. 자주 사용되는 연산이기 때문에 축약된 형태로 지원하는 것이다.
i=i+1;
++i는 현재 값에 바로 1을 더하는 것이고, i++은 현재 줄에서 더하지 않고 다음 줄로 넘어갈 때 더하는 것이다.
실제로 프로그래밍을 하게 되면 다양한 연산자들을 복합적으로 사용하게 된다. 이럴 때 연산의 선후 관계가 분명하지 않으면 혼란스러울 것이다. 아래는 자바에서 제공하는 연산자들 간의 우선순위를 정리한 표이다.
int a=4-3*6; // -14
위의 구문에는 3가지의 연산자가 등장한다. =, -, * 이다. 표에 따라서 우선순위 별로 배열해보면 *, -, =가 된다. 그러므로 연산자 *가 제일 먼저 실행된다. 따라서 첫 번째 연산은 3*6이 된다. 그 값은 18이다.
다음 우선순위는 '-'이다. 4-18을 해야 하는데 빼기의 결합 방향은 → 이다. 따라서 4에서 18을 빼야 한다. 그 결과는 -14가 된다.
다음 우선순위는 '='이다. '='의 결합방향은 ← 이기 때문에 -14를 변수 a에 대입해서 연산이 끝나게 된다.
위의 표를 외울 필요는 없다. 자연스럽게 이해하게 된다. 다만, 헷갈리는 경우가 있을 때 이 표의 도움을 받도록 하자.