이항 연산자
이항 연산자는 피연산자가 2개인 연산자를 말하며, 여기에는 산술 연산자( +, -, *, /, %), 문자열 결합 연산자(+), 비교 연산자( <, >, >=, <=, ==, !=), 논리 연산자( &&, ||, &, |, ^, !), 대입 연산자( =, +=, -=, *=, /=, %=) 등이 있다.
산술 연산자( +, -, *, /, %)
산술 연산자는 사칙연산자인 덧셈, 뺄셈, 곱셈, 나눗셈과 나머지를 구하는 %까지 총 5개이며, 산술 연산자는 boolean타입을 제외한 모든 기본 타입에 사용할 수 있음.
| 연산식 | 설명 | ||
| 피연산자 | + | 피연산자 | 덧셈 연산 |
| 피연산자 | - | 피연산자 | 뺄셈 연산 |
| 피연산자 | * | 피연산자 | 곱셈 연산 |
| 피연산자 | / | 피연산자 | 왼쪽 피연산자를 오른쪽 피연산자로 나눗셈 연산 |
| 피연산자 | % | 피연산자 | 왼쪽 피연산자를 오른쪽 피연산자로 나눈 나머지를 구하는 연산 |
* 산술 연산자의 특징은 피연산자들의 타입이 동일하지 않을 경우 규칙을 사용해 피연산지들의 타입을 일치시킨 후 연산을 수행.
1. 피연산자들이 byte, short, char 타입일 경우, 모두 int 타입으로 변환된 후에 연산을 수행.
ex) byte + byte -> int + int = int
2. 피연산자들이 모두 정수 타입이고 long 타입이 포함되어 있을 경우, 모두 long 타입으로 변환된 후 연산을 수행.
ex) int + long -> long + long = long
3. 피연산자 중 실수 타입(float, double)이 있을 경우, 허용 범위가 큰 실수 타입으로 변환된 후 연산을 수행.
ex) int + double -> double + double = double
// 산술 연산자
package sec02.exam04;
public class ArithmeticOperatorExample {
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 result = (double) v1 / v2;
System.out.println("result6=" + result6);
}
}
// 실행 결과
// result1 = 7
// result2 = 3
// result3 = 10
// result4 = 2
// result5 = 1
// result6 = 2.5
char 타입도 정수 타입이므로 산술 연산식이 가능하지만, 주의할 점은 int 타입으로 변환되므로 연산 결과는 int 타입이 된다는 것.
// char 타입의 산술 연산
package sec02.exam05;
public class CharOperationExample {
public static void main(String[] args) {
char c1 = 'A' + 1; //char c1 = 66이 됨, 'A'는 유니코드 65라서
char c2 = 'A';
// char c3 = c2 + 1; // char변수가 산수 연산에 사용되면 int타입으로 변환되므로 연산 결과는 int 타입이 됨.
System.out.println("c1: " + c1);
System.out.println("c2: " + c2);
//System.out.println("c3: " + c3);
}
}
// 실행 결과
// c1: B
// c2: A
문자 결합 연산자 (+)
문자열을 서로 결합하는 연산자로, + 연산자는 산술 연산자, 부호 연산자인 동시에 문자열 결합 연산자이기도 함.
피연산자 중 한쪽이 문자열이면 + 연산자는 문자열 결합 연산자로 사용되어 다른 피연산자를 문자열로 변환하고 서로 결합.
문자열과 숫자가 혼합된 + 연산식은 왼쪽에서부터 오른쪽으로 연산이 진행.
// 문자열 결합 연산자
package sec02.exam06;
public class StringConcatExample {
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);
}
}
// 실행 결과
// str2: JDK6.0 특징
// str3: JDK33.0
// str4: 6.0JDK
비교 연산자( <, >, >=, <=, ==, !=)
대소(<, <=, >, >=) 또는 동등( ==, !=)을 비교해서 true/false를 산출하며, 대소 연산자는 boolean을 제외한 기본 타입에 사용할 수 있고, 동등 연산자는 모든 타입에 사용할 수 있으며, 비교 연산자는 흐름 제어문인 조건문(if), 반복문(for, while)에서 주로 이용되어 실행 흐름을 제어할 때 사용.
| 구분 | 연산식 | 설명 | ||
| 동등 비교 |
피연산자1 | == | 피연산자2 | 두 피연산자의 값이 같은지를 검사 |
| 피연산자1 | != | 피연산자2 | 두 피연산자의 값이 다른지를 검사 | |
| 크기 비교 |
피연산자1 | > | 피연산자2 | 피연산자1이 큰지를 검사 |
| 피연산자1 | >= | 피연산자2 | 피연산자1이 크거나 같은지를 검사 | |
| 피연산자1 | < | 피연산자2 | 피연산자1이 작은지를 검사 | |
| 피연산자1 | <= | 피연산자2 | 피연산자1이 작거나 같은지를 검사 | |
// 비교 연산자
package sec02.exam07;
public class CompareOperatorExample1 {
public static void main(String[]args) {
int num1 = 10;
int num2 = 10;
boolean result1 = (num1 == num2);
boolean result2 = (num1 != num2);
boolean result3 = (num1 <= num2);
System.out.println("result1=" + result1);
System.out.println("result2=" + result2);
System.out.println("result3=" + result3);
char char1 = 'A';
char char2 = 'B';
boolean result4 = (char1 < char2);
System.out.println("result4=" + result4);
}
}
// 실행 결과
// result1 = true
// result2 = false
// result3 = true
// result4 = true
** String 문자열을 비교할 때에는 대소 비교 연산자(<, <=, >, >=)를 사용할 수 없고, 동등 비교 연산자(==, !=)는 사용할 수 있으나 문자열이 같은지, 다른지를 비교하는 용도로는 사용되지 않음.
기본 타입(byte, char, short, int, long gloat, double, boolean) 변수의 값을 비교할 때에는 == 연산자를 사용하지만 참조 타입인 String 변수를 비교할 때에는 equals( ) 메소드를 사용함.
논리 연산자( &&, ||, &, |, ^, !)
논리 연산자는 논리곱(&&), 논리합( || ), 배타적 논리함(^), 논리 부정(!) 연산을 수행하며, 논리 연산자의 피연산자는 boolean타입만 사용 가능.
논리 연산은 흐름 제어문인 조건문(if), 반복문(for, while) 등에서 주로 이용되며, if문의 조건식이 true라면 블록을 실행하고 false라면 블록을 실행하지 않음.
| 구분 | 연산식 | 결과 | 설명 | ||
| AND (논리곱) |
true | && 또는 & |
true | true | 피연산자 모두가 true일 경우에만 연산 결과가 true |
| true | false | false | |||
| false | true | false | |||
| false | false | false | |||
| OR (논리합) |
true | | | 또는 | |
true | true | 피연산자 중 하나만 true이면 연산 결과는 true |
| true | false | true | |||
| false | true | true | |||
| false | false | false | |||
| XOR (배타적 논리합) |
true | ^ | true | false | 피연산자가 하나는 true이고 다른 하나가 false일 경우에만 연산 결과가 true |
| true | false | true | |||
| false | true | true | |||
| false | false | false | |||
| NOT (논리 부정) |
! | true | false | 피연산자의 논리값을 바꿈 | |
| false | true | ||||
// 논리 연산자
package sec02.exam09;
public class LogicalOperatorExample {
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 숫자");
}
int value = 6;
if ( (value%2==0) | (value%3==0) ) {
System.out.println("2 또는 3의 배수");
}
if ( (value%2==0) || (value%3==0) ) {
System.out.println("2 또는 3의 배수");
}
}
}
// 실행 결과
// 대문자
// 2 또는 3의 배수
// 2 또는 3의 배수
대입 연산자( =, +=, -=, *=, /=, %=)
대입 연산자는 오른쪽 피연산자의 값을 왼쪽 피연산자인 변수에 저장.
오른쪽 피연산자에는 리터럴 및 변수, 다른 연산식이 올 수 있는데, 단순히 오른쪽 피연산자의 값을 변수에 저장하는 단순 대입 연산자가 있고, 정해진 연산을 수행한 후 결과를 변수에 저장하는 복합 대입 연산자도 있음.
| 구분 | 연산식 | 설명 | ||
| 단순 대입 연산자 | 변수 | = | 피연산자 | 오른쪽의 피연산자의 값을 왼쪽 변수에 저장 |
| 복합 대입 연산자 | 변수 | += | 피연산자 | 변수 = 변수 + 피연산자와 동일 |
| 변수 | -= | 피연산자 | 변수 = 변수 - 피연산자와 동일 | |
| 변수 | *= | 피연산자 | 변수 = 변수 * 피연산자와 동일 | |
| 변수 | /= | 피연산자 | 변수 = 변수 / 피연산자와 동일 | |
| 변수 | %= | 피연산자 | 변수 = 변수 % 피연산자와 동일 | |
| 변수 | &= | 피연산자 | 변수 = 변수 & 피연산자와 동일 | |
| 변수 | |= | 피연산자 | 변수 = 변수 | 피연산자와 동일 | |
| 변수 | ^= | 피연산자 | 변수 = 변수 ^ 피연산자와 동일 | |
대입 연산자는 모든 연산자들 중에서 가장 낮은 연산 순위를 가지고 있기 때문에 제일 마지막에 수행, 연산의 진행 방향이 오른쪽에서 왼쪽
// 대입 연산자
package sec02.exam10;
public class AssigmentOperatorExample {
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
삼항 연산자
삼항 연산자(?:)는 3개의 피연산자를 필요로 하는 연산자를 말하며, 삼항 연산자는 ? 앞의 조건식에 따라 콜론(:) 앞뒤의 피연산자가 선택된다고 해서 조건 연산식이라고 부르기도 한다.
| 조건식 값 또는 연산식 값 또는 연산식 ? : (피연산자1) (피연산자2) (피연산자3) |
조건식을 연산하여 true가 나오면 삼항 연산자의 결과는 피연산자2가 되는 반면에 조건식을 연산하여 false가 나오면 삼한 연산자의 결과는 피연산자3이 되며 피연산자2와 피연산자3에는 주로 값이 오지만, 경우에 따라서는 연산식이 올 수도 있음.
// 삼항 연산자
package sec02.exam11;
public class ConditionalOperationExample {
public static void main(String[]args) {
int score = 85;
char grade = (score > 90) ? 'A' : ( (score > 80) ? 'B' : 'C');
System.out.printlnO(score + "점은 " + grade + "등급입니다.");
}
}
// 실행 결과
// 85점은 B등급입니다.'Java' 카테고리의 다른 글
| [Java] 반복문: for문, while문, do-while문 (0) | 2025.11.03 |
|---|---|
| [Java] 조건문: if문, switch문 (0) | 2025.11.02 |
| [Java] 연산자의 종류 - 단항 연산자 (0) | 2025.11.02 |
| [Java] 연산자 (3) | 2025.11.02 |
| [Java] 변수와 시스템 입출력 (0) | 2025.10.29 |