본문 바로가기
Java/SE

[Java] 연산자

by 괘발자 2025. 5. 8.

연산자

연산자는 연산에 사용되는 표시나 기호로 필요로 하는 피연산자의 수에 따라, 단항/이항/삼항 연산자로 구분된다.

 

연산자의 종류

연산자의 종류 연산자 피연산자 수 기능
산술 +, -, *, /, % 이항 사칙연산 및 나머지 계산
부호 +, - 단항 음수, 양수의 부호
문자열 + 이항 두 문자열을 연결
대입 =, +=, -=, *=, /=, %= 이항  우변의 값을 좌변에 대입
증감 ++, -- 단항  1만큼 증가/감소
비교 ==, !=, >, <, instance of 이항 값 비교
논리  ~, &, |, &&, || 단항, 이항 논리 부정, 논리곱, 논리합

 

연산자 우선순위

1️⃣ 단항, 이항, 삼항 연산자 순으로 우선순위

2️⃣ 산술, 비교, 논리, 대입 연산자 순으로 우선순위

3️⃣ 단항, 부호, 대입 연산자를 제외한 모든 연산의 방향은 왼쪽에서 오른쪽으로

4️⃣ 복잡한 연산식에는 괄호()를 사용하여 우선순위를 지정

 

연산자 우선순위

단항연산자

  • 피연산자가 단 하나뿐인 연산자
  • 부호 연산자, 증감 연산자, 논리 부정 연산자

부호연산자

양수 및 음수를 표시하는 +, - 를 말한다.

int i1 = -100;  // 부호 연산자

 

부호 연산자의 결과가 int 타입이므로 int 타입 변수에 결과를 저장해야 한다.

 

증감연산자

변수의 값을 1 증가시키거나 1 감소시키는 연산자를 말한다.

 

int i2 = 3;
i2++; //후위 증감연산자
++i2; //전위 증감연산자
System.out.println(i2);

// 5

 

논리 부정 연산자

true를 false로, false를 true로 변경하기 때문에 boolean 타입에서만 사용이 가능하다.

boolean bool = true;
System.out.println(!bool);
// false

 

 

 

이항연산자

  • 피연산자가 2개인 연산자
  • 산술 연산자, 논리 연산자, 대입 연산자, 비교 연산자, 문자열 결합 연산자

산술 연산자

사칙연산자인 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/) 과 나머지를 구하는 %가 산술연산자에 해당한다.

int a = 5, b = 3;

System.out.println(a + b);
System.out.println(a - b);
System.out.println(a * b);
System.out.println(a / b); // 몫
System.out.println(a % b); // 나머지

 

산술연산자의 특징은 피연산자들의 타입이 동일하지 않을 경우, 다음과 같은 규칙을 따른다.

 

1️⃣ 피연산자들이 byte, short, char 타입인 경우, 모두 int 타입으로 변환된 후에 연산을 수행한다.

2️⃣ 피연산자들이 모두 정수 타입이고 long 타입이 포함되어 있을 경우, 모두 long 타입으로 변환 후 수행한다.

3️⃣ 피연산자 중 실수 타입이 있을 경우, 허용 범위가 큰 실수 타입으로 변환된 후, 연산을 수행한다.

 

문자열 결합 연산자

문자열 결합 연산자 +로 문자열을 서로 결합한다.

String str1 = "JDK" + 6.0;
// JDK6.0

 

비교 연산자

피연산자의 대소(<, <=, >, >=) 또는 동등(==, !=)을 비교하여 true/false를 산출한다.

int a = 5;

// a값이 3보다 크거나 같은 경우 true, 아니면 false
System.out.print(a >= 3); // true
// a값이 3보다 작거나 같은 경우 true, 아니면 false
System.out.print(a <= 3); // false
// a값이 3인 경우 true, 아니면 false
System.out.print(a == 3); // false
// a값이 3이 아닌 경우 true, 아니면 false
System.out.print(a != 3); // false

 

논리 연산자

논리곱(&&), 논리합(||), 배타적 논리합(^), 논리 부정(!) 연산을 수행한다.

int a = 5, b = 10;
// && 논리 연산자 and
System.out.println(a > 3 && b > 3); //true
// || 논리 연산자 or
System.out.println(a > 3 || b > 3); //true
// ^ 논리 연산자 xor
System.out.println(a > 3 ^ b > 3); // true ^ true -> false
// ! 논리 연산자 not
System.out.println(!(a > 3)); // !(true) -> false

 

논리 연산자 주의할 점

public static void main(String[] args) {
    boolean b1, b2;
    b1 = aa() || bb(); // aa는 출력, bb는 출력 X
    b2 = bb() || aa(); // || 인경우, 조건이 하나라도 참이라면, 두 번째 요소 확인 없이 참
    b3 = aa() | bb();  // | 인경우, 두 가지 조건을 모두 확인 후, 값 할당
}

public static boolean aa() {
	System.out.println("aa 출력");
	return true;
}

public static boolean bb() {
	System.out.println("bb 출력");
	return false;
}

 

  • b1의 경우, 함수 aa()의 출력값인 "aa 출력"만 출력이 되었는데, 그 이유는 함수 aa()의 수행 결과가 참이므로 함수 bb()의 반환값을 확인하지 않아도 변수 b1의 값은 결정되므로 "bb 출력"이 출력되지 않았다.
  • b2의 경우, 함수 bb()의 반환값이 false이므로 함수 aa()의 반환값을 확인해야만 변수 b2의 값이 결정된다. 그러므로 출력값으로 "bb 출력", "aa 출력"이 모두 출력된다.
  • b3의 경우, 비트 연산자이므로 함수 aa()의 반환값이 true이더라도 함수 bb()의 리턴값과 비교해야만 하므로 "aa 출력", "bb 출력"이 모두 출력된다.

대입 연산자

오른쪽 피연산자의 값을 왼쪽 피연산자인 변수에 할당하는 데 사용하는 연산자이다. 오른쪽 피연산자에는 리터럴 및 변수, 다른 연산식이 올 수 있다.

int a = 5;   // 단순 대입 연산자
System.out.println(a += 10);   // 복합 대입 연산자
System.out.println(a -= 5);   // 복합 대입 연산자
System.out.println(a *= 3);   // 복합 대입 연산자
System.out.println(a /= 5);   // 복합 대입 연산자
System.out.println(a %= 3);   // 복합 대입 연산자

 

삼항연산자

  • 피연산자가 3개인 연산자
int score = 95;
char grade = (score > 90) ? 'A' : 'B';  // 조건식 ? 참인 경우 : 거짓인 경우

 

score가 95점으로 조건식을 만족하므로 변수 grade에 'A'가 할당된다.

 

'Java > SE' 카테고리의 다른 글

[Java] JDK 버전 여러 개 사용하는 방법  (2) 2025.05.08
[Java] 조건문  (1) 2025.05.08
[Java] 변수와 타입  (3) 2025.05.07
[Java] 소스 코드 개발 도구(Eclipse)  (0) 2025.05.06
[Java] 소스 코드 개발 도구(편집기)  (0) 2025.05.06