◆ 연산자
- 연산자란 연산에 사용되는 표시나 기호
- 연산자(operator) <-> 피연산자(operand)
x + y // + : 연산자, x, y : 피연산자
◆ 연산식 ( 표현식 Expressions )
- 연산자와 피연산자를 이용하여 연산의 과정을 기술한 것
- 아무리 복잡한 표현식이라도 반드시 하나의 값을 산출하며 결과 값은 변수에 저장하여 출력한다.
- 연산의 방향과 우선순위는 연산의 종류에 따라 다르며, ( ) 괄호를 통해 우선순위 표시할 수 있다!!
- 연산의 우선순위 : 단항 → 이항 → 삼항 / 산술 → 비교 → 논리 → 대입
- 연산식을 표현할 때는 피연산자를 같은 타입으로 맞춰야 한다.
※ 정수의 연산식의 결과는 int타입으로 자동형변환된다!!!(long 타입 제외)
따라서, 되도록 정수의 연산식에서는 int 타입 사용을 권장한다.
※ 실수의 연산식 결과는 근사치를 내놓는다!(단정도/ 배정도 소수실수 타입이기 때문에)
따라서, 정확한 실수연산 값을 계산하려면 정수연산으로 수행 시킨 후 실수로 변환해야 한다.
<참고>
- 정확히 정수 0으로 나누는 연산은 허용불가! -> 예외발생(분모가 0이 될 수 없는 것처럼)
- 실수 0.0으로 나누는 연산은 허용! -> BUT, 부작용(무한대) 발생
누가봐도 직관적인 코드가 더 좋은 코드이다!
복잡한 표현식을 만들 때는 소괄호 ( )를 사용하여 연산의 우선순위를 표시하자!
1. 단항 연산자 : 피연산자가 1개
① 부호 연산자(+, -)
- 용도 : 양수/음수를 의미 혹은 피연산자의 부호 유지/변경
- 결과값은 변수에 저장 (boolean, char 타입 제외하고 사용 가능)
② 증감 연산자 (++, --)
- 용도 : 변수의 값을 1 증가/1 감소하는 연산자
- 다른 연산자와 함께 사용된다면 증감 연산자의 위치에 따라 결과값이 다름
<증감 연산자 위치에 따른 결과>
++a : 변수값 증가 후 연산 처리
a++ : 연산 처리 후 변수 1증가
※ 증감연산자는 대입연산자가 함께 있어야 한다. 대입연산자가 없다면 홀로 증감만 할 뿐이다.
③ 논리 부정 연산자( ! ) : boolean타입만 사용 가능
- 용도 : 조건식의 값을 부정하도록 하여 실행흐름 제어
- 피연산자가 true면 false, 피연산자가 false면 true
2. 이항 연산자 : 피연산자가 2개
① 산술 연산자(+, -, *, /, %)
- 용도 : 사칙연산에 사용
- 피연산자들의 타입이 동일하지 않는 경우 자동타입변환(묵시적 형변환)
② 문자열 결합 연산자(+) : concat( ) 함수와 동일한 역할
- 피연산자 중 한 쪽이 문자열이면 문자열로 변환/결합
- 연산되는 순서에 따라 결과값이 상이함
<예시>
"JDK" + 3 + 3.0 // JDK33.0
3 + 3.0 + "JDK" // 6.0JDK
※ 문자열 연결에 사용하는 + , concat( ) 함수는 문자열이 더해질 때마다
객체를 생성하기 때문에 메모리 소모가 크다! (StringBuilder는 호출 시 한번만 생성!!)
③ 비교 연산자(<, >, <=, >=, ==, !=)
- 용도 : 조건문, 반복문에서 주로 이용하여 실행 흐름 제어
- 관계연산자라고 부르기도 함
- 문자열 비교에는 equals( ) 메소드 사용
※ 동등비교연산자는 모든 타입 사용가능, 크기비교연산자는 기본타입만 사용가능하다.
④ 논리 연산자(&&, ||, &, |, ^, !) : boolean타입만 사용 가능
- &&/& : 피연산자가 모두 ture일 경우 true
- ||/| : 피연산자가 모두 false인 경우 false
- ^ : true, false 하나씩인 경우만 true
- ! : 피연산자의 논리값을 바꿈
※ 부정연산자(!)는 Toggle(토글)이라고도 부른다. -> 스위치같은 역할
⑤ 대입 연산자(=, +=, -=, *=, /=, %=)
- 종류 : 단순 대입연산자(=), 복합 대입연산자(+=, -=, *=, /=, %=)
<대입연산자의 원리>
① x += 2;
② x = x+2; // ①, ② 은 동일한 연산
3. 삼항 연산자(조건 연산자) : 피연산자가 3개
- 앞의 조건식 결과에 따라 콜론 앞뒤의 피연산자를 선택하여 반환
※ 조건문 if문과 비슷한 용도로 사용되며 중첩 사용이 가능하다.
삼항연산자의 중첩의 예시는 아래와 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public class CondiitionalOperatorExample {
// 삼항연산자 적용(중첩도 가능!)
public static void main(String[] args) {
int score = 85;
char grade =
(score > 90) ? // 첫번째 삼항연산자
'A' :(
(score > 80) ? 'B' : 'C' // 두번째 삼항연산자
);
System.out.println(score + "점은 " + grade + "등급입니다.");
} //main
} // End class
|
cs |