< 연산자 >
연산자는 연산을 수행하는 기호로서 수학을 생각해보자 +는 덧셈, -는 뺄셈 등이 있다.
JAVA 역시 다양한 종류의 연산자가 있지만 사칙연산부터 시작해서 익숙해지다 보면 별 어려움이 없을 것이다.
< 연산자와 피 연산자 >
수학 문제를 풀려면 덧셈이나 뺄셈이 필요한 것처럼 JAVA 역시 연산자와 피연산자가 있다.
- 연산자 : 연산을 수행하는 기호 ( +, - , / , * 등)
- 피연산자 : 연산의 대상 (변수,상수,리터럴,수식 등)
예시 코드를 들면 아래와 같다.
x = 5;
x * 5 - 3; // 곱셈, 나눗셈을 우선 처리하기 때문에 사실상 (5 * 5) -3가 된다.
22;
문제는 저렇게 하면 결과 값이 그 어디에도 저장되지 않는다. x는 단지 계산식에 사용되었을 뿐이다.
그래서 제대로 활용하려면 아래와 같은 식으로 바꿀 필요가 있다.
x = 5;
y = x * 5 - 3;
y = 22;
이렇게 해야 22라는 값이 y에 저장된다.
다음에는 아래와 같이 화면에 출력함으로서 결과를 출력시킬 수 있다.
x = 5;
y = x * 5 - 3;
System.out.println(y);
< 연산자의 종류 >
수학 문제를 풀려면 덧셈이나 뺄셈이 필요한 것처럼 JAVA 역시 연산자와 피연산자가 있다.
-
산술 연산자(사칙연산과 기타 등) : + * - / % << >>
-
비교 연산자(크고 작음을 비교) : > < >= <= == !=
-
논리 연산자(and와 or으로 조건 변경) : && || ! & | ^ ~
-
대입 연산자(우변의 값을 좌변에 저장) : =
< 피연산자의 개수에 의한 분류 및 규칙 >
피연산자의 개수로 구분할 때가 있는데 피연산자의 개수가 하나라면 '단항 연산자', 2개면 '이항 연산자', 3개면 '삼항 연산자'라고 부른다.
대부분의 연산자는 이항 연산자이고 삼항 연산자는 ?: 하나 뿐이다. 그리고 규칙은 일반 수학 공식과 동일하다고 보면 된다. 덧셈 곱셈이 있으면 곱셈을 먼저 계산하고, 괄호가 있으면 괄호 안에 있는 것을 우선 계산하는 식이다.
< 산술 변환 >
이항 연산자는 상호 간의 피연산자 타입이 일치해야 연산이 가능하기 때문에 타입이 다르다면 형변환(casting)을 통해서 타입을 서로 일치시켜야 한다.
int i = 10;
float f = 20.0f;
float result = f + (float)i
대부분의 경우 범위가 넓은 타입으로 일치시키는데 이유는 작은 단위로 형변환하면 값이 손실 될 우려가 잇기 때문이다. 작은 타입에서 큰 타입으로 형변환 하는 경우, 자동으로 형변환이 되기 때문에 형변환 연산자를 생략할 수 있다.
float result = f + i;
< 단항 연산자 - 증감 연산자 ++ -- >
증감 연산자는 피연산자에 저장된 값을 1 증가 혹은 감소시킨다. 정수와 실수 모두 사용 가능하지만 상수는 값을 변경할 수 없기때문에 사용이 불가능.
- 증가연산자(++) 피 연산자의 값을 1 증가시킨다.
- 감소 연산자(--)피 연산자의 값을 1 감소시킨다.
일반적으로 단항 연산자는 피연산자의 왼쪽에 위치하지만, 증가연산자 ++와 감소 연산자 --는 모두 가능하다. 피연산자의 왼쪽에 위치하면 전위형(prefiex), 오른쪽에 위치하면 후위형(postfix)라고 한다.
전위형(값이 참조되기 전에 증가) : j = ++i;
후위형(값이 참조된 후에 증가) : j = i++;
단일 항목으로 사용될 경우 크게 문제 될 일이 없지만, 아래처럼 여러개가 동시에 사용될 경우 값이 달라지는 등
혼돈될 우려가 있기 때문에 추천하지 않는다.
< 부호 연산자 + - >
부호 연산자는 뺄셈 덧셈이 아닌 양의 수와 음의 수를 표현한다.
+ 2 : 양의 정수 2
- 2 : 음의 정수 -2
< 산술 연산자 + - * / >
사칙연사 덧셈, 뺄셈, 곱셈, 나눗셈이다. 일상 생활에서도 많이 사용하고, 프로그래밍에도 사용 빈도가 높다.
다만 차이점은 타입에 따라 나눠진다. 일반적인 계산식은 아래와 같지만...
10 / 4 = 2.5
만일 프로그래밍을 하면서 int 변수를 사용한 값이라면 값은 2만 나오게 된다. 즉, 0.5 소숫점 이하 숫자는 버려지는 것이다. 반올림되지 않으니 주의할 것.
그리고 10 / 0 을 수행하면 오류가 발생한다. 이 점도 염두에 두자
< 나머지 연산자 % >
나머지 연산자는 값을 나누고 남은 값을 출력하는 연산자다.
System.out.println(10%8) // 10을 8로 나눈 나머지 2를 값으로 출력한다.
< 대소비교 연산자 < > <= >= >
두 피연산자의 값의 크기를 비교한다. 기본형중에서는 boolean형을 제외한 나머지 자료형에 다 사용할 수 있지만 참조형에는 사용불가.
> 좌변 값이 크면 true, 아니면 false
< 좌변 값이 작으면 true 아니면 false
>= 좌변값이 크거나 같으면 true, 아니면 false
<= 좌변값이 작거나 같으면 true, 아니면 false
< 등가비교 연산자 == != >
수학의 = 와 비슷한 의미지만 여기서는 약간 다른 부호를 사용한다. 모든 자료 형태에 사용할 수 있다.
== 두 값이 같으면 true, 아니면 false
!= 두 값이 다르면 true, 아니면 false
< 논리 연산자 - && || ! >
x가 6보다 크다라는 말은 비교 연산자를 써서 x > 6으로 표현할 수 있지만 x가 6보다 크고 10보다 작다는 형태로 2개 이상의 조건이 부여되었을 때 사용하는 것이 논리 연산자다.
||는 OR개념으로서 피연산자 중 어느 하나만 true면 true를 결과로 얻는다.
&&는 AND 개념으로서 피연산자 2개다 true여야만 true를 결과로 얻는다.
!는 피연산자가 true면 false로 바꾸고, false면 true로 값을 바꿔준다.
i%2 == 0 || i%3 == 0
true || false
결론은 true
i%2 == 0 && i%3 == 0
true && false
결론은 false
ch < 'a' || ch > 'z' 라는 식을 !을 쓰면 아래와 같이 깔끔하게 바꿀 수 있다.
!('a' <= ch && ch <= 'z')
< 비트 연산자 & | ^ ~ << >> >
비트 연산자는 피연ㅅ나자를 비트 단위로 논리 연산한다.
| (OR 연산자) : 피연산 중 한쪽의 값이 1이면, 1을 결과로 얻는다. 그 외에는 0을 얻는다.
& (AND 연산자) : 피연산 양쪽의 값이 모두 1일 대에만 1을 결과로 얻는다.
^ (XOR 연산자) : 피연산자의 값이 서로 다를 때만 1을 결과로 얻는다.
~ (비트전환 연산자) : 피연산자를 2진수로 표현했을 때 0을 1로, 1을 0으로 바꾼다.
< 조건 연산자 ?: >
조건 연산자는 조건식, 식1, 식2, 모두 세 개의 피 연산자를 필요로 하는 삼항 연산자이며, 삼항 연산자는 조건 연산자 하나 뿐이다.
조건식? 식1 : 식2 의 형태를 띄고 있으며 식1, 식2 중 조건식에 부합하는 식의 결과를 출력한다. 좀 더 쉽게 설명하면...
(X>Y) ? 5 : 3 이라고 하면
X가 더 큰 조건식에 5가 부합하기 때문에 결과값은 5가 된다.
< 대입 연산자 = OP= >
대입 연산자는 변수와 같은 저장공간에 값 또는 수식의 연산결과를 저장하는 데 사용된다.
이 연산자는 오른쪽 피연산자의 값을 왼쪽 피연산자에 저장한다.
X = Y = 3 라는 식이 있을 때,
Y = 3이라는 계산식이 우선 사용되고, 이후 X로 연결되어 X =3이라는 결과가 나오게 된다.
본 포스팅은 IT 교육기관인 KIC 캠퍼스의 지원을 받은 리포트입니다.
본문은 '남궁성, JAVA의 정석 3rd Edition' 교재를 공부하면서 주요 내용을 요약하고 있습니다.
혹시 잘못되거나 문제 소지시 댓글 남겨주시면 조치하겠습니다.
댓글 영역