JAVA

JAVA] 14. 자바의 연산자 -1

젊은쎄오 2011. 6. 8. 01:34
정해진 규칙에 따라 데이터를 처리하여 결과를 산출하는 것을 연산(operation)이라 한다.

그리고 연산에서 쓰는 표시나 기호들을 연산자(operator)라고 한다. 연산자가 처리하는 

데이터는 피연산자(operand)라고 하고 연산자와 피연산자를 이용하여 연산의 과정을

기술한 것을 연산식 또는 간단하게 식(expression) 이라고 부른다.

자바는 +.-.*,/ 와 같은 사칙 연산자 외에 조건식을 만드는데 사용되는 비교연산자와 

변수에 값을 대입하는 대입 연산자도 있다. 연산자들의 기능은 데이터 값 뿐만 아니라

데이터 타입과도 밀접한 관련이 있는데, int 형 + int 형이라면 값도 int 형이라야 

한다는 것이다, 만약 int 1과 double 0.5 를 더한다면 int 1을 double 1.0 으로 타입을 맞춘뒤에

연산을 해야 한다. 그럼 double 타입 + double 타입 이 되고 결과 값도 double로 쓰면 된다.

이제 연산자의 종류와 사용법에 대해 알아보자

사칙 연산자 + - * / % 

피연산자1 + 피연산자2      - 1과 2를 더한다.
피연산자1 - 피연산자2      - 1에서 2를 뺀다.
피연산자1 * 피연산자2      - 1과 2를 곱한다.
피연산자1 / 피연산자2      - 1을 2로 나눈 몫을 구한다.
피연산자1 % 피연산자2     - 1을 2로 나눈 나머지를 구한다.


알고 가야 할 부분이 있는데, / 와 % 이 이다. / 는 둘을 나누고 나온 몫을 구하는 연산자인데 

두 피연산자가 둘다 정수면 몫도 정수로 구하지만 둘 중에 하나라도 부동소수점 타입이면 

소수점 아래 까지 계산한다. 

7 / 2    >>  둘다 정수면 결과는 3이 나온다

하지만 

7.0 / 2 또는 7 / 2.0 , 7.0 / 2.0 등과 같이 둘중 하나라도 부동소수점 타입이라면

결과는 소수점 아래자리 까지 구한 3.5 가 나온다.

% 는 피연산자가 정수 타입이든 부동소수점 타입이든 상관없이 몫을 정수로 산출하고 

남은 나머지를 계산한다.

7 % 2    >>  결과는 1
7.5 % 2.0  >>  결과는 1.5

연산이 많으면 우선 순위가 있는데 수학에서 배운 규칙을 따른다, 덧셈, 뺄셈 보다 

곱셈, 나눗셈이 우선이고 제일 왼쪽에 있는 연산자부터 순서대로 처리된다.

부호 연산자 + -

+ 와 - 는 사칙 연산자이면서 부호연산자인데 부호연산자일 경우에는 하나의 피연산자만

취하기 때문에 구분 할 수있다.

+ 피연산자    - 피연산자의 부호를 그대로 둔다.
- 피연산자    - 피연산자의 부호가 + 면 - 로 -면 +로 바꾼다.


부호 연산자를 사용할 경우 주의할 점이 있는데 피연산자의 타입이 byte, short, char 이면 

연산을 하기전에 전부 int 로 바꿔줘야 한다.   

문자열 연결 연산자 + 

문자열 연결 연산자 + 는 두 개의 문자열을 연결해서 새로운 문자열을 만드는 연산자이다.

문자열1 + 문자열2     - 문자열1 뒤에 문자열2를 연결한다  예) "Hello, "  +  "Java"  
문자열 + 비문자 데이터   - 문자열뒤에 데이터를 넣는다 예) "sum = " + 30


문자열 연결 연산자를 사용하다보면 간혹 헷갈리는 때가 오는데 바로

"sum = " + 3 + 4   와 같은 경우이다. 식을 보면 두번째 + 는 문자열 연결 연산자인지 

사칙연산자의 + 인지 헷갈린다, 이런경우는 무조건 왼쪽부터 연산이 된다고 생각하면된다.

그럼 먼저 sum = 3 이 되고  뒤에 + 4 가 있기 때문에 sum = 34 라는 값이 찍힌다. 

반대로 3 + 4 + " = sum" 이라면 3+4 가 먼저 되어 7이 되고 뒤에 = sum 이 붙어 7=sum이다.

단순 대입 연산자 = 

= 연산자는 단순히 오른족의 식의 결과를 왼쪽에 대입 시키는 연산자이다. 

변수 = 식     -  오른쪽의 식의 결과를 왼쪽 변수에 대입한다.

앞서 포스팅한 변수 부분에서 말했듯 대입에서 주의할 점은 바로 타입이다. 

좌변의 타입과 우변의 타입을 맞춘 상태에서 대입을 해야한다. int i = 2.5 이런식으로 

부동소수점 타입을 정수 타입에 넣으려 하면 안된다는 소리이다.

대입 연산자는 다른 연산과 다르게 오른쪽부터 연산이 시작되는걸 알아두자.

증가 연산자와 감소 연산자 ++ -- 

++ 는 변수의 값에 1을 더한 결과를 다시 값에 넣는 것이고, -- 는 변수의 값에서

1을 뺀 결과를 다시 변수에 담는 연산을 한다.

변수 ++ , ++ 변수       - 변수의 값에 1을 더하고 다시 변수에 담는다.
변수 -- , -- 변수       - 변수의 값에 1을 빼고 다시 변수에 담는다.


++, -- 연산자가 변수뒤에 붙으면 변수의 기존 값이 결과 값이 되고, 

변수 앞에 붙으면 변수의 새로운 값이 결과 값이 된다.


class Test {
public static void main(String args[]){
int num1 = 0, num2 = 0, num3 = 0, num4 = 0;
int result1 = num1++;
int result2 = num2--;
int result3 = ++num3;
int result4 = --num4;
System.out.println(result1);
System.out.println(result2);
System.out.println(result3);
System.out.println(result4);
}
}
다음과 같은 예제를 컴파일하면 

0
0
1
-1
과 같은 결과가 나온다, num1 과 num2 는 ++,-- 연산자가 뒤에 붙었으므로 기존의 값이

출력되고 num3과 num4 같이 ++, -- 연산자가 앞에 붙으면 바뀐 새 값이 출력 된다. 

수치 비교 연산자 < > <= >=

< , > , <= , >= 는 두 수의 크기를 비교하는 수치 비교 연산자입니다. 

피연산자1 < 피연산자2      -  1값이 2값보다 작으면 true, 크면 false이다.
피연산자1 > 피연산자2      -  1값이 2값보다 크면 true, 작으면 false이다.
피연산자1 <= 피연산자2      -  1값이 2값보다 작거나 같으면 true, 그렇지않으면 false이다.
피연산자1 >= 피연산자2      -  1값이 2값보다 크거나 같으면 true, 그렇지않으면 false이다.

주로 이런 비교 연산자는 if 나 while 문 같은 조건식에 많이 쓰인다.

동등 연산자 == !=

==과 !=은  두 데이터의 값이 같은지 다른지를 판단하는 연산자이다. 

피연산자1 == 피연산자2          - 1과 2가 같으면 true, 다르면 false이다.
피연산자1 != 피연산자2          - 1과 2가 다르면 true, 같으면 false이다
.

동등 연산자도 수치 비교연산자와 같이 조건문에 많이 쓰인다. 

한 가지 주의할 점이 있는데

double num1 = 1.1 + 2.2 
double num2 = 3.3  이라 했을 때

num1 == num2 가 false가 된다. 이는 부동소수점 수를 자바 내부 표현으로 바꾸고 더하는

과정에서 미세한 차이로 오차가 발생 했기 때문이다. 자바는 마지막 한 비트 까지

비교하기 때문에 위와 같은 결과가 나온다. 


연산자 진짜 많다. 나는 이렇게 개념 잡고 시작한게 아니라 소스보면서 알아 간거라 

별거 없어보였는데 풀어서 나열하니 꽤나 많다. 앞으로 이 것 만큼 더 남았다. 

이걸 모르고 소스부터 봤으니 -_- ... 답이없...었다
 






출판사 : 한빛미디어 , 저자 : 김윤명 님의 뇌를 자극하는 Java프로그래밍에서 공부한 내용입니다.