💁 연산자(Opertator)란,
연산을 수행하는 기호
// num = num + 3
num += 3;
>>> 복합대입연산자의 형태를 사용한 식 (권장)
System.out.println("num : " + num);
// num = num - 5
num -= 5;
System.out.println("num : " + num);
>>> 위의 '+3'식에서 도출된 값(15)에서 -5된 값(10) 출력
// num = num * 2
num *= 2;
System.out.println("num : " + num);
>>> 위의 '-5'식에서 도출된 값(10)에서 *2된 값(20) 출력
// num = num / 2
num /= 2;
System.out.println("num : " + num);
>>> 위의 '*2'식에서 도출된 값(20)에서 /2된 값(10) 출력
++
: 1 증가의 의미 --
: 1 감소의 의미int num = 20;
num++;
System.out.println("num : " + num);
>>> 21 출력
++num;
System.out.println("num : " + num);
>>> 22 출력
num--;
System.out.println("num : " + num);
>>> 21 출력
--num;
System.out.println("num : " + num);
>>> 20 출력
다른 연산자와 함께 사용할 때는 전위/후위 연산의 구분이 필요
int firstNum = 20;
int result1 = firstNum++ * 3;
System.out.println("result1 : " + result1);
>>> 후위연산은 다른 연산들이 진행된 후, 마지막에 계산 (20*3=60)
System.out.println("firstNum : " + firstNum);
>>> 다른 연산들이 진행되었으므로 +1 (20+1=21)
int secondNum = 20;
int result2 = ++secondNum * 3; // result2 = 63,
System.out.println("result2 : " + result2);
>>> 전위연산은 가장 먼저 계산하므로 ((20+1)*3=63)
System.out.println("secondNum : " + secondNum);
>>> 원래 가장 먼저 계산하므로 (20+1=21)
따라서, 전위/후위 연산자들이 홀로 있다면 값은 같지만, 다른 연산이 더해지면 계산 순서가 다르므로 값 또한 다름
💁 논리 값(true or false)을 취급하는 연산자
>>> 1 <= 변수 <= 100 대신,
>>> 변수 >= 1 && 변수 <= 100 이런 형태로 구성
int num1 = 30;
System.out.println("1부터 100사이인지 확인 : " + (num1 >= 1 && num1 <= 100));
>>> &&(and) 둘다 충족해야만 true 값 출력
char ch1 = 'W';
System.out.println("영어 대문자인지 확인 : " + (ch1 >= 65 && ch1 <= 90));
>>> 대문자의 아스키코드 범위인 65~90을 지정하여 ch1이 65부터 90중에 하나인가?로 대문자 여부를 알 수 있음
System.out.println("영어 대문자인지 확인 : " + (ch1 >= 'A' && ch1 <= 'Z'));
>>> 문자도 비교연산자에 대입이 가능하므로 이 식으로도 대문자 여부 알 수 있음
char ch2 = 'Y';
System.out.println("대소문자 상관없이 영문자 y인지 확인 : " + (ch2 == 'y' || ch2 == 'Y'));
>>> '같다'를 표현할 때, 비교연산자인 '=='를 사용해야함.
>>> && : 11순위
>>> || : 12순위
>>> && 연산자가 || 연산자보다 우선순위가 높음
>>> 연산자 우선순위를 고려한다면 and 연산이 먼저 수행되기 대문에 괄호는 묶지 않아도 되지만,
>>> 논리적으로 먼저 실행하는 내용을 괄호로 묶어주면 코드의 가독성 향상
char ch3 = 't';
System.out.println("영문자인가요? : " + ((ch3 >= 'A' && ch3 <= 'Z') || (ch3 >= 'a' && ch3 <= 'z')));
System.out.println("영문자인가요? : " + ((ch3 >= 65 && ch3 <= 90) || (ch3 >= 97 && ch3 <= 122)));
📌 Ref.
* 알파벳의 아스키코드
[대문자] A : 65 - Z : 90
[소문자] a : 97 - z : 122
&&
논리식 (AND 연산) : 앞의 결과가 false면 뒤를 실행하지않음||
논리식 (OR 연산) : 앞의 결과가 true면 뒤를 실행하지않음>>> 연산의 횟수를 줄이기 위해서는 &&연산의 경우 false가 나올 가능성이 높은 조건을 작성하는 편이 좋음
int num1 = 10;
int result1 = (false && ++num1 > 0) ? num1 : num1;
>>> 앞이 이미 false라 뒤의 (++num1 > 0)는 전혀 실행하지않아 num1은 +1되지않고 처음 값 그대로 10 (dead code)
System.out.println("&&실행 확인 " + result1);
>>> 연산의 횟수를 줄이기 위해서는 ||연산의 경우 true가 나올 가능성이 높은 조건을 작성하는 편이 좋음
int num2 = 10;
int result2 = (true || ++num2 > 0) ? num2 : num2;
>>> 앞이 이미 true라 뒤의 (++num2 > 0)는 전혀 실행하지않아 num2는 +1되지않고 처음 값 그대로 10 (dead code)
System.out.println("||실행 확인 " + result2);
📌 Ref.
* 삼항 연산자
(조건식) ? true일 때의 값 : false일 때의 값;
(조건식) ? 참일 때 사용할 값 : 거짓일 때 사용할 값;
📌 Ref.
* 사용 목적
: 간략하게 한 눈에 보기 좋아서 if 대신 사용
(복잡한 식의 경우, if 사용)
int num1 = 10;
int num2 = -10;
String result1 = (num1 > 0) ? "양수이다." : "양수가 아니다.";
String result2 = (num2 > 0) ? "양수이다." : "양수가 아니다.";
System.out.println("num1은 " + result1);
>>> "양수이다." 출력
System.out.println("num2는 " + result2);
>>> "양수가 아니다." 출력
// 양수, 0, 음수 판별
int num3 = 5;
int num4 = 0;
int num5 = -5;
String result3 = (num3 > 0) ? "양수이다." : (num3 == 0) ? "0이다." : "음수이다.";
String result4 = (num4 > 0) ? "양수이다." : (num4 == 0) ? "0이다." : "음수이다.";
String result5 = (num5 > 0) ? "양수이다." : (num5 == 0) ? "0이다." : "음수이다.";
System.out.println("num3은 " + result3);
System.out.println("num4은 " + result4);
System.out.println("num5은 " + result5);
int t = 0;
String resultT = (t > 0) ? "양수" : (t == 0) ? "0" : "음수";
>>> (t는 0보다 큰가?) 그렇다면 양수 : (아니면 0인가?) 그렇다면 0 : 아니면 음수
System.out.println("t는 " + resultT);