항(Operands)과 연산자(Operators)
연산 과정에서 사용되는 데이터나 값을 항(Operands)이라고 합니다.
하나 이상의 항을 사용하여 특정 연산을 수행하는 기호를 연산자(Operators) 라고 합니다.
대입 연산자 (Assignment Operator) : ‘ = ‘
대입 연산자는 특정 값이나 다른 변수의 결과를 변수에 할당(대입)하는 데 사용됩니다.
대부분의 이항 연산자 중에서 실행 우선순위가 가장 낮아서, 대부분의 연산이 이루어진 후에 마지막으로 값이 할당됩니다. (연산에 순서는 오른쪽에서 왼쪽으로) 기본 형태는 왼쪽 변수 = 오른쪽 표현식(값, 변수, 또는 계산식)입니다.
부호 연산자 : ‘ +, - ‘
부호 연산자는 변수의 부호를 변경하거나 유지하는 단항 연산자입니다.
연산자는 변수의 부호를 그대로 두고, - 연산자는 변수의 부호를 반전시킵니다.
변수의 실제 값을 변경하고자 할 때는 부호 연산자와 함께 대입 연산자를 사용해야 합니다.
package basic.ch03;
/*
* 부호 연산자
* 단항 연산자 --> 변수에 부호를 변경 (리터럴값에 부호를 변경)
*/
public class Operation1 {
public static void main(String[] args) {
int intData = 1000;
System.out.println(+intData);
System.out.println(-intData);
System.out.println("-----------");
System.out.println(intData);
// 반드시 기억 -> (부호 연산자는 변수에 실제 값이 변경되는 것은 아니다)
// 메모리 공간안에 실제 값을 변경 하려면 어떻게 해야하나?
// 답은 --> 대입 연산자와 함께 사용해야 한다.
intData = -intData;
System.out.println("실제 변수안에 들어있는 값 : " + intData);
// 연습
int oneStepDistance = 1;
final int ZERO_POINT = 0; // 상수를 사용할 때는 대문자를 권장 한다.
int currentPostion = 0;
// 제로 포인트에서 왼쪽으로 3칸 이동한 값을 출력 하시오.
// 식을 작성
currentPostion = ZERO_POINT - (oneStepDistance * 3);
// 결과값 출력
System.out.println(currentPostion);
// 절대값이란?
// 절대값이란 어떤 수의 크기를 나타내는 것으로 그 수가 0에서 얼마나 떨어져
// 있는지를 표시한다.
// 즉, 어떤 수의 절대값은 그 수가 양수이든 음수이든 상관없이 항상 양수 입니다.
// 0의 절대값은 0 입니다.
//currentPostion 값이 양수 였다면 부호연산자를 통해 변경하고
// 절대값이 틀려지게 된다.
System.out.println(-currentPostion);
// 우리는 절대값을 구하는 알고리즘을 만들어야 한다.
// 자바 개발자들이 이미 만들어 둔 도구(Tool) 이다.
// 자바 개발자들이 이미 만들어 둔 도구이다.
// Math math; // 수학과 관련된 기능들에 모음,
System.out.println("Math 라이브러리 사용 : " + Math.abs(currentPostion));
} // end of main
} // end of class
연산자(산술)
산술 연산자에 대해 살펴 봅시다.
(그림)

연산자(증감, 감소)
- 단항 연산자
- 변수의 값을 오직 1 더하거나 1 뺄때 사용
- 연산자가 항의 앞에 있는가 뒤에 있는가에 따라 연산 시점과 결과가 달라짐
- 문장(statement)의 끝(;)을 기준으로 연산 시점을 생각해야 함
(그림)

package basic.ch03;
public class Operation3 {
/*
* 증감, 감소 연산자
* 변수에 접근해서 그 값을 조직 1증가 또는 1감소 시킨다.
*/
public static void main(String[] args) {
int value1 = 1;
// value1++;
++value1;
System.out.println(value1);
// 변수에 접근해서 1 감소 시키기
int value2 = 1;
value2--;
System.out.println(value2);
// 증감 연산자가 변수 뒤에 올 때 (후의 연산자)
int intData1 = 10;
int resultData;
// (오른쪽)에서(왼쪽)으로 간다.
// 후의 연산자는 ; (세미콜론 기준으로 동작 합니다)
// 11 = 10 + 1
resultData = intData1++;
System.out.println(resultData); // 결과 10
System.out.println(intData1);
// ; 세미콜론 기준으로 끝나고 변수에 접근해서 1을 증가 시켰다.
// ---> 여러분들은 전위 연산자로 사용하자
// 증감 연산자가 변수 앞에 올 경우(전위 연산자)
int intData2 = 100;
int resultData2;
resultData2 = ++intData2;
System.out.println(resultData2);
// 결론 : 증감 연산자는 변수의 값을 오직 1 증가 시킬때 사용 한다.
// 항에 앞, 뒤 위치에 따라서 연산에 순서가 다르다.
} // end of main
} // end of class
연산자(복합 대입 연산자)
- 대입 연산자와 다른 연산자가 함께 쓰임
= + , - , * , %
+=, -=, *=, %=
(그림)

복합 대입 연산자는 대입 연산자 앞에 연산자를 작성해주어야 한다.
package basic.ch03;
public class Operation4 {
/*
* 복합 대입연산자란 대입 연산자와 다른 연산자가 함께 쓰이는 것 (산술연산자)
*/
/*
* 복합 대입연산자란 대입 연산자와 다른 연산자가 함께 쓰이는 것 (산술연산자)
*/
public static void main(String[] args) {
int score = 5;
// score += 10;
// System.out.println("점수 확인 : " + score);
// 도전 연습 --> int score = score + 10;
// score 변수에 적븐해 기존에 존재하는 값에 더하기 10을 해주세요
// 15 = 5 + 10;
// score = score + 10;
score += 10;
System.out.println(score);
System.out.println("--------------------");
int n1 = 100;
// n1 이라는 변수에 접근해서 기존에 있는 값에 추가로 10을 더해주세요
// n1 = n1 + 10;
n1 += 10;
System.out.println("n1 : " + n1);
// score 변수에 접근해서 10점 감소 시켜주세요
// score = score - 10;
score -= 10;
// ! 점수 두배 증가
score *= 2;
System.out.println("score : " + score);
// ! 점수를 반으로 감소
score /= 2;
System.out.println("score : " + score);
} // end of main
} // end of class
package basic.ch03;
public class Operation4_1 {
/*
* 복합 대입연산자란 대입 연산자와 다른 연산자가 함께 쓰이는 것 (산술연산자)
*/
public static void main(String[] args) {
int num1 = 0;
num1 += 2;
System.out.println(num1); // 2
int num2 = 0;
num2 -= 2;
System.out.println(num2); // -2
int num3 = 1;
num3 *= 3;
System.out.println(num3); // 3
int num4 = 10;
num4 /= 2;
System.out.println(num4); // 5
int num5 = 5;
num5 %= 3;
System.out.println(num5); // 2
} // end of main
} // end of class
연산자(관계,논리,빠른평가,삼항)
관계(비교)연산자
- 이항 연산자
- 연산의 결과가 true(참), false(거짓)으로 반환 됨, 비교연산자 라고도 함
- 조건문, 반복문의 조건식으로 많이 사용 됨
(그림)

관계 연산자를 주어로 바라보고 하는 말이 사실인지 거짓인지 확인 하자.
package basic.ch03;
public class Operation5 {
/*
* 관계, 비교 연산자
* 연산의 결과 값이 무조건 true, false 반환 된다.
*/
public static void main(String[] args) {
int num1 = 5;
int num2 = 3;
// 관계 연산자를 주어로 바라 보자
// ex) 왼쪽의 항이 오른쪽 항보다 크다 (라고 생각하면 편하다)
boolean value = ( num1 > num2 ) ;
System.out.println(value);
System.out.println(3 < 5);
System.out.println(3 >= 10);
System.out.println(3 <= 3);
System.out.println(3 == 5);
System.out.println(3 != 5);
System.out.println("-------------------------------");
// 5 < 3
System.out.println(num1 < num2);
// 5 <= 3
System.out.println(num1 >= num2);
// 5 <= 3
System.out.println(num1 <= num2);
// 5 == 3
System.out.println(num1 == num2);
// 5 != 3
System.out.println(num1 != num2);
} // end of main
} // end of class
논리 연산자
● 관계 연산자와 혼합하여 많이 사용 됨
● 연산의 결과가 true(참), false(거짓)으로 반환 됨
(그림)

package basic.ch03;
public class Operation6 {
/*
* 논리 연산자
* 관계 연산자와 혼합하여 많이 사용 된다.
* 연산에 결과는 true, false 으로 반환 된다.
*/
public static void main(String[] args) {
// 논리 연산자는 3가지 종류가 있다.
// 논리곱 ---> && (엠퍼센트, 엠퍼센트)
// 논리합 ---> || (버티컬 바, 버티컬 바)
// 부정 ---> ! (느낌표)
int num1 = 10;
int num2 = 20;
// 1. 논리곱(&&)
// T && T
// 논리곱은 전부 true 이면 true 반환 한다. 하나라도 거짓이면 false를 반환 한다.
boolean flag1 = (num1 > 0) && (num2 > 0);
System.out.println("flag 1 : "+ flag1);
// T && F
boolean flag2 = (num1 > 0) && (num2 < 0);
System.out.println("flag 2 : "); // 결과값 : F
System.out.println("============================");
// 2. 논리 합
// T || F
// 논리 합은 둘 중에 하나라도 true 이면 연산에 결과는 무조건 true 이다.
boolean flag3 = (num1 > 0) || (num2 < 0);
System.out.println(flag3);
// 3. 부정
// flag1 은 true 였다.
// flag2 은 false 였다.
// flag3 은 true 였다.
System.out.println("부정 논리 연산자 사용 : " + !flag3);
// 연산에 결과가 어떻게 되지 ---> 확인해봐야지 ---> 로깅 한다.
System.out.println("flag3 : " + flag3);
} // end of main
} // end of class
빠른 평가(short circuit evaluation)
빠른 평가(short-circuit evaluation)는 논리 연산에서 첫 번째 조건이 결과를 결정하는 경우, 두 번째 조건을 평가하지 않는 자바의 특성입니다.
- 논리 곱(&&)은 두 항의 결과가 모두 true일 때만 결과가
true 앞의 항의 결과가 false이면 뒤 항의 결과를 평가하지 않음 - 논리 합(||)은 두 항의 결과가 모두 false일 때만 결과가 false
- 앞의 항의 결과가 true이면 뒤 항의 결과를 평가하지 않음
package basic.ch03;
public class Operation7 {
/*
* 빠른 평가란?
* 논리 연산에 있어 첫 번째 조건이 결과를 결정할 때
* 두 번째 조건을 평가 하지 않는 것을 의미한다.
*
*/
public static void main(String[] args) {
int number = 5; // 변수의 선언과 동시에 초기화
int index = 0;
// 빠른 평가가 동작하는 식을 만들어 보자.
// F
// 15 < 10
boolean result = ( (number = number + 10) < 10) && ( (index = index + 2) < 10 );
System.out.println("현재 number 변수에 값은 : " +number);
// index의 값이 0 인 이유 앞에 있는 값을 판단하고 False가 나왔기 때문에
// 굳이 뒤에있는 값 까지 계산하지 않아도 값이 나오기에 Cpu가 계산하지 않음
System.out.println("현재 index 변수에 값은 : " +index);
System.out.println("========================");
// number 값 재 설정
number = 5;
// 논리합을 이용한 빠른 평가 식을 만들어 보자.
// 15 < 10 || 2 < 10
// F || T
result = ((number = number + 10) < 10 || (index = index +2) < 10);
//문제
System.out.println("number : " + number);
System.out.println("index : " + index);
// 도전 문제 number 와 index 반대로 변경 해서 출력해 보자
boolean result2 = (( (index = index + 2) < 10 ) && (number = number + 10) < 10);
System.out.println(" 도전문제 현재 index 변수에 값은 : " +index);
result = ( ( (index = index +2) < 10) || (number = number + 10) < 10);
System.out.println(" 도전문제 현재 index 변수에 값은 : " +index);
} // end of main
} // end of class
'Java' 카테고리의 다른 글
| 2024.04.11 조건문 if(만약 … 이라면) (0) | 2024.04.11 |
|---|---|
| 2024.04.11 삼항 연산자(조건 연산자) (0) | 2024.04.11 |
| 2024.04.09 명령어를 통한 컴파일, 실행 (0) | 2024.04.10 |
| 2024.04.09 형 변환(type casting) (0) | 2024.04.10 |
| 2024.04.09 상수(constant) 리터럴(literal) (0) | 2024.04.10 |