JAVA 연산자 요약

728x90
< 연산자 >
연산자는 연산을 수행하는 기호로서 수학을 생각해보자 +는 덧셈, -는 뺄셈 등이 있다.
 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' 교재를 공부하면서 주요 내용을 요약하고 있습니다.
혹시 잘못되거나 문제 소지시 댓글 남겨주시면 조치하겠습니다.

728x90

'DEV' 카테고리의 다른 글

JAVA 기본 프레임 구조 예제  (0) 2018.01.19
JAVA 배열(Array) 정리 #1  (0) 2018.01.13
JAVA 조건문과 반복문  (0) 2018.01.10
JAVA 메모장 예제  (0) 2018.01.09
JAVA 상하좌우 키보드로 이미지를 이동시키기  (0) 2018.01.09
JAVA 미디어(WAV) 재생 예제  (2) 2018.01.09