728x90
항과 연산자
- 연산에 사용하는 기호를 연산자(operator)라고 합니다. 더하기 빼기 등이 해당됩니다.
- 연산에 사용하는 값을 항(operand)이라고 합니다.
- 연산자는 항의 개수에 따라 단항 연산자, 이항 연산자, 삼항 연산자로 나눌 수 있습니다. 삼항 연산자는 프로그램에서 사용하는 조건 연산자를 의미합니다.
- 연산자의 연산 순서를 '연산자 우선순위'라고 합니다. 단항 연산자가 가장 높고, 이항, 삼항 연산자 순서입니다.
대입 연산자
- 대입 연산자(assignment operator)는 말 그대로 변수에 값을 대입하는 연산자입니다.
- 대입 연산자는 이항 연산자 중 우선순위가 가장 낮은 연산자입니다.
- 그 우선순위의 결과로 대입 연산자는 좌항과 우항의 단항 & 이항 연산자가 모두 종료된 이후에 오른쪽 변수 값이나 식의 연산 결과 값을 왼쪽 변수에 대입합니다.
부호 연산자
- 부호 연산자는 +, - 두 가지가 있습니다.
- 더하기, 빼기 연산에 쓰이는 이항 연산자입니다.
- 부호를 나타내는 단항 연산자이기도 합니다. (단, 부호를 적용하려면 n = -n 과 같이 대입 연산자를 사용하여 값을 대입해야 합니다. )
- 여기서 중요한 것은, +, - 는 정확히 말해서 부호를 유지 & 부호를 반대로 바꾼다 를 의미합니다. 양수와 음수를 의미하는 것이 아닙니다!
산술 연산자
- 사칙 연산에서 사용하는 연산자가 산술 연산자입니다.
- +, -, *, /, % 5가지가 있습니다.
증가·감소 연산자
- 증가·감소 연산자는 단항 연산자입니다.
- 증가·감소 연산자는 단항 연산자로서 n = n + 1 의 형식으로 작성하지 않고 ++n; 이렇게만 해도 해당 변수의 값이 변경됩니다. 대입 연산자 없이도 변수의 값이 변경된다는 것을 의미합니다.
- 피연산자 앞이나 뒤에 사용합니다. 사용된 위치에 따라 결과 값이 전혀 다릅니다.
왜 이런 차이가 생기는 걸까요? 프로그램에서 문장의 의미를 잘 알아 두는 것이 중요합니다. 프로그램은 일반적인 상황이라면 위에서 아래로 왼쪽에서 오른쪽으로 순차적으로 실행됩니다. 프로그램에서는 문장 끝에 한글의 . 처럼 ;를 사용합니다. 이런 점을 유념하시고 다음을 봐주세요. 증가·감소 연산자가 피연산자(값이 바뀌는 rV)보다 앞에 있으면 문장이 끝나기 전에 피연산자 값이 증가하거나 감소합니다. 하지만 반대로 증가·감소 연산자가 피연산자 뒤에 있으면 문장이 끝난 후에 피연산자 값이 증가하거나 감소합니다.
- 값을 1만큼 증가시키거나 1만큼 감소시킵니다.
- ++, -- 2가지가 있습니다.
- v = ++n 혹은 v = n-- 와 같은 형식으로 사용합니다.
관계 연산자
- 관계 연산자는 항이 두 개인 이항 연산자입니다.
- 관계 연산자의 결과 값은 true 혹은 false 로 반환됩니다.
- <, >, <=, >=, ==, != 로 총 6개의 관계연산자가 있습니다.
- 관계 연산자는 이렇게 두 값을 비교하여 결과 값을 반환하므로 비교 연산자라고도 부릅니다.
- boolean result = (score < 100); 이 문장에서, 괄호 ( ) 가 없어도 수식의 결과 값은 바뀌지 않습니다. 그런데, 괄호를 사용하여 표현한 이유는 읽기 좋은 프로그램, 즉 가독성이 좋은 코드를 만들기 위해서입니다. 괄호를 사용하면 관계 연산의 결과 값이 result에 대입되는 것을 좀 더 명확하게 알 수 있습니다.
논리 연산자 (단락 회로 평가)
- 논리 연산자는 수학 시간에 배우던 명제와 개념이 같습니다.
- 논리 연산자는 주로 관계연산자와 함께 사용되며 이항 연산자입니다.
- &&(논리 곱) : 두 항이 모두 참인 경우에만 결과 값이 참이 반환됩니다.
- ||(논리 합) : 두 항 중 하나의 항만 참이면 결과 값은 참이 반환됩니다.
- !(부정) : 단항 연산자입니다. 참인 경우에는 거짓으로 바꾸고, 거짓인 경우에는 참으로 바꿉니다.
- 논리 연산에서 모든 항(문장의 끝 까지 모든 코드)이 실행되지 않는 경우가 있다. 이런 경우를 '단락 회로 평가 Short Circuit Evaluation' 이라고 합니다. 프로그램을 만들면서 예상한 실행 결과와 다를 수 있으므로 주의해야 합니다.
int num1 = 10;
int i = 2;
boolean value = ((num1 = num1 + 1) < 10) && ((i = i + 2) < 10);
boolean value = ((num1 = num1 + 1) > 10) || ((i = i + 2) < 10);
boolean value = ((num1 = num1 + 1) < 10) && ((i = i + 2) < 10);
이 코드에서 && 논리 곱 연산자는 하나만 거짓이어도 거짓을 반환하기 때문에 첫 번째 항이 거짓이면 두 번째 따라오는 항은 아예 실행조차 하지 않습니다.
boolean value = ((num1 = num1 + 1) > 10) || ((i = i + 2) < 10);
이 코드에서 || 논리 합 연산자는 하나만 참이어도 참을 반환하기 때문에 첫 번째 항이 참이면 두 번째 따라오는 항은 아예 실행조차 하지 않습니다.
복합 대입 연산자
- 복합 대입 연산자란 대입 연산자와 다른 연산자를 조합해 하나의 연산자처럼 사용하는 연산자입니다.
- 산술 연산자, 비트 연산자와 함께 사용하여 코드를 간결하게 표현할 수 있다.
- 복합 대입 연산자는 대입 연산자와 같이 우선순위가 가장 낮은 연산자입니다.
- += : 두 항의 값을 더해서 왼쪽 항에 대입합니다.
- -= : 왼쪽 항에서 오른쪽 항을 빼서 그 값을 왼쪽 항에 대입합니다.
- *= : 두 항의 값을 곱해서 왼쪽 항에 대입합니다.
- /= : 왼쪽 항을 오른쪾 항으로 나누어 그 몫을 왼쪽 항에 대입합니다.
- %= : 왼쪽 항을 오른쪽 항으로 나누어 그 나머지를 왼쪽 항에 대입합니다.
- <<= : 비트를 왼쪽으로 이동하고 그 값을 왼쪽 항에 대입합니다.
- >>= : 비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입합니다. (왼쪽에 채워지는 비트 값은 부호 비트와 동일함)
- >>>= : 비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입합니다.(왼쪽에 채워지는 비트 값은 0)
- &= : 두 항의 & 비트 연산 후 그 값을 왼쪽 항에 대입합니다.
- |= : 두 항의 | 비트 연산 후 그 값을 왼쪽 항에 대입합니다.
- ^= : 두 항의 ^ 비트 연산 후 그 값을 왼쪽 항에 대입합니다.
- 복합 대입 연산자는 변수를 반복적으로 사용하지 않아도 되는 장점이 있습니다.
num = num + num2;
num += num2;
위와 같이 간단하게 쓸 수 있습니다.
조건 연산자
- 조건 연산자는 연산에 필요한 항의 개수가 세 개인 삼항 연산자입니다.
- 조건 연산은 주어진 조건식이 참인 경우와 거짓인 경우에 다른 결과 값이 나옵니다.
조건식 ? 결과1 : 결과2
- 조건식이 참이면 결과1, 조건식이 거짓이면 결과2가 선택되어 반환됩니다.
int num = (5 > 3) ? 10 : 20;
- 예를 들어 위와 같은 조건 연산자가 활용된 문장을 보자면, 조건식이 참이므로 결과 1인 10이 출력됩니다.
'[그린컴퓨터] Server > JAVA(기본)' 카테고리의 다른 글
연산자 우선순위 (0) | 2023.05.11 |
---|---|
비트 연산자 {정의, 논리, 이동} (0) | 2023.05.11 |
형 변환 {정의, 묵시적 형 변환, 명시적 형 변환} (0) | 2023.05.10 |
변수와 자료형 & 메모리 {메모리, 기본자료형과 메모리, 정수 자료형, 문자 자료형, 실수 자료형, 논리 자료형, 상수와 리터럴} (0) | 2023.05.10 |
변수 이름 정하는 규칙 {제약사항} (0) | 2023.05.09 |