▶오늘의 주제 : 연산자의 종류
- 연산자는 산출 방법에 따라 산술, 부호, 문자열, 대입, 증감, 비교 연산자로 구분하고, 피연산자 수에 따라 단항, 이항, 삼항 연산자로 구분합니다. 이 절에서는 파연산자 수에 따라 구분하는 연산자를 기준으로 각각의 연산 방법을 알아보겠습니다.
단항 연산자: ++X;
이항 연산자: x + y;
삼항 연산자: (sum > 90) ? "A" : "B";
▶단항 연산자
: 피연산자가 단 하나 뿐인 연산자입니다.
- 부호 연산자(+,-)
: 부호 연산자는 양수 및 음수를 표시하는 +,-를 말합니다. boolean 타입과 char 타입을 제외한 나머지 기본 타입에 사용 할 수 있습니다.
부호 연산자로 쓰일 때에는 하나의 피연산자만 필요합니다. 주의 할 점은 부호 연산자의 결과가 int 타입이라는 것입니다. 예를 들어, byte 타입 변수를 부호 연산하면 int 타입을 변환됩니다.
byte b = 100;
byte result = -b; //컴파일 에러 발생
byte b = 100;
int result = -b;
public class Hello {
public static void main(String[] args) {
int x = -100;
int result1 = +x;
int result2 = -x;
System.out.println("result1=" + result1);
System.out.println("result2=" + result2);
byte b = 100;
//byte result3 = -b; byte 타입 값을 부호 연산하면 int 타입 값으로 바뀌므로 컴파이 에러 발생
int result3 = -b;
System.out.println("result3=" + result3);
}
}
result1=-100
result2=100
result3=-100
▶ 증감 연산자 (++, --)
: 증감 연산자는 변수의 값을 1 증가(++)시키거나 1 감소(--)시키는 연산자를 말합니다. boolean 타입을 제외한 모든 기본 타입의 피연산자에 사용할 수 있습니다.
- ++ / -- 피연산자 : 다른 연산을 수행하기 전에 피연산자의 값을 1 증가 혹은 감소시킴
- 피연산자 ++ / -- : 다른 연산을 수행한 후에 피연산자의 값을 1 증가 혹은 감소시킴
++i; / i++; 모두 i=i+1; 동일
--i; / i--; 모두 i=i-1; 동일
public class Hello {
public static void main(String[] args) {
int x = 10;
int y = 10;
int z;
System.out.println("_____");
x++;
++x;
System.out.println("x=" + x);
System.out.println("_____________");
y--;
--y;
System.out.println("y=" + y);
System.out.println("________________");
z = x++;
System.out.println("z=" + z);
System.out.println("x=" + x);
System.out.println("_______________");
z = ++x;
System.out.println("z+" + z);
System.out.println("x=" + x);
System.out.println("____________");
z = ++x + y++;
System.out.println("z=" + z);
System.out.println("x=" + x);
System.out.println("y=" + y);
}
}
x=12 // 여기서 x는 10+1 = 11 , 11+2 = 12
_____________
y=8 // 여기서 y는 10-1 = 9. 9-1 = 8
________________
z=12 // 여기서 z는 x++이기 때문에 x를 먼저 대입해서 12가 된다.
x=13 // x=12이기 때문에 +1은 13이다.
_______________
z+14 // x가 위에서 13이었기 때문에 +1 은 14
x=14 // 위에 x 값에서 1을 더하면 14
____________
z=23 //x에 1를 덜하면 15이다. 그리고 위의 y값이 8이기 때문에 둘이 더하면 23이다.
x=15 // 위 x에 1을 더하면 15이다.
y=9 // 위 y에 1을 더하면 9이다.
▶논리 부정 연산자(!)
: 논리 부정 연산자는 true를 false로, false를 true로 변경하기 때문에 boolean 타입에만 사용할 수 있습니다.
논리 부정 연산자는 조건문과 제어문에서 조건식의 값을 부정하도록 해서 실행 흐름을 제어할 때 주로 사용합니다.
public class Hello {
public static void main(String[] args) {
boolean play = true;
System.out.println(play);
play = !play;
System.out.println(play);
play = !play;
System.out.println(play);
}
}
true
false
true
: 두번째 play = !play; 은 play가 아니라고 부정하기 때문에 false입니다. 세번째는 false인 상태인 play를 다시 부정했기 때문에 true입니다.
▶이항 연산자
: 이항 연산자는 피연산자가 2개인 연산자를 말하며, 산술연산자, 문자열 결합 연산자, 비교 연산자, 논리 연산자, 대입 연산자 등이 있습니다.
- 산술 연산자
: 산술 연산자는 사칙연산인 덧셈, 뺄셈, 곱셈, 나눗셈과 나머지를 구하는 %까지 총 5개 입니다. 사술 연산자는 boolen 타입을 제외한 모든 기본 타입에 사용 할 수 있습니다.
1. 피연산자들인 byte, short, char 타입일 경우 모두 int 타입으로 변환된 후에 연산을 수행합니다.
byte + byte -> int + int = int
2. 피연산자들이 모두 정수 타입이고 long타입이 포함되어 있을 경우, 모두 long 타입으로 변환된 후 연산을 수행합니다.
int + long -> long + long = long
3. 피연사자 중 실수 타입 (float, double)이 있을 경우, 허용 범위가 큰 실수 타입으로 변환된 후 연산을 수행합니다.
int + double -> double + double = double
public class Hello {
public static void main(String[] args) {
int v1 = 5;
int v2 = 2;
int result1 = v1 + v2;
System.out.println("result1=" + result1);
int result2 = v1 - v2;
System.out.println("result2=" + result2);
int result3 = v1 * v2;
System.out.println("result3= " + result3);
int result4 = v1 /v2;
System.out.println("result4=" + result4);
int result5 = v1 % v2;
System.out.println("result5=" + result5);
double result6 = (double) v1 / v2;
System.out.println("result6=" + result6);
}
}
result1=7
result2=3
result3= 10
result4=2
result5=1
result6=2.5
: 마지막 코드는 double 타입으로 강제 타입 변환한후 소수점 2.5를 얻었습니다.
char 타입도 정수 타입이므로 산술 연산이 가능합니다. 주의할 점은 int 타입으로 변환되므로 연산 결과는 int 타입이 된다는 것입니다.
public class Hello {
public static void main(String[] args) {
char c1 = 'A' + 1;
char c2 = 'A';
//char c3 = c2 + 1;
System.out.println("c1: " + c1);
System.out.println("c2: " + c2);
// System.out.println("c3 " + c3);
}
}
c1: B
c2: A
: c3이 에러가 난 이유는 char 변수가 산술 연산에서 사용되면 int 타입으로 변환되므로 연산 결과는 int 타입이 됩니다. 그런데 char 타입인 c3에 저장하므로 컴파일 에러가 발생합니다. 이럴 때는 강제 타입 변환을 해서 char 타입으로 결과를 얻을 수 있습니다.
char c3 = (char)(c2 + 1);
▶문자열 결합 연산자(+)
:문자열 결합 연산자인 +는 문자열을 서로 결합하는 연산자입니다. +연산자는 산술 연산자, 부호 연산자인 동시에 문자열 결헙 안션자이기도 합니다. 피연산자 중 한쪽이 문자열이면 + 연산자는 문자열 결합 연산자로 사용되어 다른 피연산자를 문자열로 변환하고 서로 결합합니다.
public class Hello {
public static void main(String[] args) {
String str1 = "JDK" + 6.0;
String str2 = str1 + "특징";
System.out.println(str2);
String str3 = "JDK" + 3 + 3.0;
String str4 = 3 + 3.0 + "JDK";
System.out.println(str3);
System.out.println(str4);
}
}
JDK6.0특징
JDK33.0
6.0JDK
▶비교 연산자 (<, <=ㅡ >=, ==, !=)
: 비교 연산자는 피연산자의 대소 또는 동등을 비교해서 true / false를 산출합니다. 대소 연산자는 boolean을 제외한 기본 타입에 사용할 수 있고, 동등 연산자는 모든 타입에 사용할 수 있습니다. 흐름 제어문인 조건문 (if) , 반복문 (for, while)에서 주로 이용되어 실행 흐름을 제어할 때 사용됩니다.
▶논리 연산자
: 논리 연산자는 boolean 타입만 사용할 수 있습니다. 논리 연산은 흐름 제어문인 조건문(if), 반복문(for, while) 등에서 주로 이용됩니다.
public class Hello {
public static void main(String[] args) {
int charCode = 'A';
if( (charCode>=65) & (charCode<=90)) {
System.out.println("대문자군요");
}
if((charCode>=97) && (charCode<=122)) {
System.out.println("소문자군요");
}
if( ! (charCode<48) && !(charCode>57)) {
System.out.println("0~9 숫자군요");
}
}
}
대문자군요
▶대입 연산자
: 오른쪽 피연산자의 값을 왼쪽 피연산자인 변수에 저장합니다. 오른쪽 피연산자에는 리터럴 및 변수, 다른 연산식이 올 수 있습니다. 단순히 오른쪽 피연산자의 값을 변수에 저장하는 단순 대입 연산자가 있고, 정해진 연산을 수행한 후 결과를 변수에 저장하는 복합 대입 연산자도 있습니다.
public class Practice {
public static void main(String[] args) {
int result = 0;
result += 10;
System.out.println("result=" + result);
result -= 5;
System.out.println("result=" + result);
result *= 3;
System.out.println("result=" + result);
result /= 5;
System.out.println("result=" + result);
result %= 3;
System.out.println("result=" + result);
}
}
result=10
result=5
result=15
result=3
result=0
: 처음 result에 0을 대입 후, 그 다음 result는 10을 더합니다. 그 후 -5를 빼고, 3을 곱합니다. 그 후 5를 나눈고 3의 나눈 나머지 값은 0입니다. 즉, 복리처럼 위에서 차례대로 result의 값은 변합니다.
▶삼항 연산자
: 삼항 연산자는 3개의 피연산자를 필요로 하는 연산자를 말합니다.
int score = 95;
char grade = (score > 90) ? 'A' : 'B';
-----------
int score = 95;
char grade;
if(score > 90) {
grade = 'A';
} else {
grade = 'B';
}
//위 아래 같은 공식입니다. 다르게 표편 할 수 있습니다.
위 아래는 같은 공식입니다. 다르게 표현 할 수 있습니다.
public class Practice {
public static void main(String[] args) {
int score = 85;
char grade = (score > 90) ? 'A' : ((score > 80) ? 'B' : 'C');
System.out.println(score + "점은 " + grade + "등급입니다.");
}
}
85점은 B등급입니다.
▶마무리
- 증감 연산자 : ++, -- 를 말하며 변수의 값을 1씩 증가, 1씩 감소시킵니다.
- 비교 연산자 : ==, != 등을 말하며 값이 같은지, 다른지를 비교하고 boolean 값을 산출합니다.
- 논리 연산자: &&, ! 등을 말하며 논리곱, 논리합, 논리 부정을 수행하고 boolean 값을 산출합니다.
- 대입 연산자 : =, +=, -= 등을 말하며 오른쪽 값을 왼쪽에 대입하거나 연산 후 대입합니다.
- 삼항 연산자: (조건식)? A : B 를 말하며 조거니 true 이면 A를 산출하고 false이면 B를 산출합니다.
'Java' 카테고리의 다른 글
Java - 반복문: for문, while문, do-while (0) | 2022.11.10 |
---|---|
Java - 조건문: if문, switch문 (0) | 2022.11.10 |
Java - 연산자와 연산식 (0) | 2022.11.08 |
Java - 타입 변환 (0) | 2022.11.08 |
Java - 변수 기본 타입 (0) | 2022.11.08 |