본문 바로가기

교육

자바(JAVA) 연산자 알아보기

반응형


< 연산자 >

연산자는 연산을 수행하는 기호로서 수학을 생각해보자 +는 덧셈, -는 뺄셈 등이 있습니다.

 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이라는 결과가 나오게 됩니다.