5강. 여러 가지 연산자(1)

  • Do it! 자바 프로그래밍 입문 온라인 강의를 수강하며 작성하였습니다.
  • Section 0. 자바 기본 익히기
  • 5강 "여러 가지 연산자(1)"
  • 항과 연산자 > 대입 연산자 > 산술 연산자 > 증감 연산자 > 관계 연산자 > 논리 연산자

항과 연산자

  • 항(operand) : 연산에 사용되는 값
  • 연산자(operator) : 항을 이용하여 연산하는 기호
연산자설명예시
단항 연산자항이 한 개인 연산자++num
이항 연산자항이 두 개인 연산자num1 + num2
삼항 연산자항이 세 개인 연산자(5>3) ? 1 : 0

대입 연산자

  • 변수에 값을 대입하는 연산자
  • 연산의 결과를 변수에 대입
  • 우선 순위가 가장 낮은 연산자
  • 왼쪽 변수(l value)에 오른쪽 변수(값) (r value)를 대입
int age = 24;	//age라는 변수에 24라는 값을 대입함

산술 연산자

  • 사칙연산에 사용되는 연산자
연산자기능예시결과
+두 항을 더한다.5 + 38
-앞에 있는 항에서 뒤에 있는 항을 뺀다.5 - 32
*두 항을 곱한다.5 * 315
/앞에 있는 항에서 뒤에 있는 항을 나누어 을 구한다.5 / 31
%앞에 있는 항에서 뒤에 있는 항을 나누어 나머지를 구한다.5 % 32

증가 감소 연산자

  • 단항 연산자
  • 1만큼 더하거나 1만큼 뺄 때 사용하는 연산자
  • 항의 앞/뒤 위치에 따라 연산의 결과가 달라짐에 유의
연산자기능예시
++항의 값에 1을 더한다.val = ++num;
val = num++;
--항의 값에서 1을 뺀다.val = --num;
val = num--;
public class OperationEx2 {
	public static void main(String[] args) {
		int num1 = 10;
		int num2 = 10;		
		System.out.println(++num1);	//num1 값이 1 증가한 후 출력됨
		System.out.println(num2++);	//num2 값이 출력된 후 1 증가함
		
		int num3 = 10;
		int num4 = 10;		
		System.out.println(--num3);	//num3 값이 1 감소한 후 출력됨
		System.out.println(num4--);	//num4 값이 출력된 후 1 감소함
	}
}


증감 연산자는 연산자 위치에 따라 연산의 결과가 달라지는 것을 확인할 수 있다.

관계 연산자

  • 이항 연산자
  • 연산의 결과가 true(참), false(거짓)으로 반환된다.
연산자기능예시 (num=5;)결과
>왼쪽 항이 오른쪽 항보다 크면 참, 아니면 거짓을 반환num > 3;true
<왼쪽 항이 오른쪽 항보다 작으면 참, 아니면 거짓을 반환num < 3;false
>=왼쪽 항이 오른쪽 항보다 크거나 같으면 참, 아니면 거짓을 반환num >= 5;true
<=왼쪽 항이 오른쪽 항보다 작거나 같으면 참, 아니면 거짓을 반환num <= 5;true
==두 개 항의 값이 같으면 참, 아니면 거짓을 반환num == 3;false
!=두 개 항이 다르면 참, 아니면 거짓을 반환num != 3;true

논리 연산자

  • 관계 연산자와 혼합하여 많이 사용 된다.
  • 연산의 결과가 true(참), false(거짓)으로 반환된다.
연산자기능예시결과
&&
(논리 곱)
두 항이 모두 참인 경우에만 결과값이 참
그렇지 않은 경우는 모두 거짓
(5>3) && (5==2)false
||
(논리 합)
두 항 중 하나의 항만 참이면 결과 값이 참
항이 모두 거짓이면 결과 값이 거짓
(5==3) || (5!=3)true
!
(부정)
단항 연산자
참인 경우에는 거짓으로, 거짓인 경우에는 참으로 바꾼다.
!(5==3)true

단락 회로 평가 (short circuit evaluation)

  • 논리곱(&&)은 두 항이 모두 true일 때만 결과가 true이다.
    => 앞의 항이 false이면 뒤 항의 결과를 평가하지 않아도 false이다.
  • 논리합(||)은 두 항이 모두 false일 때만 결과가 false이다.
    => 앞의 항이 true이면 뒤 항의 결과를 평가하지 않아도 true이다.

따라서 논리곱, 논리합 연산 시 앞의 항의 결과에 따라 뒤 항의 연산은 이루어지지 않을 수 있다.

public class OperationEx3 {
	public static void main(String[] args) {
		int num1 = 10;
		int i = 2;
		boolean value1 = ((num1 = num1 + 10) < 10) && ((i = i + 2) < 10);
		System.out.println(value1);	//논리곱에서 앞 항의 결과가 거짓이므로 false
		System.out.println(num1);	//num1 = num1 + 10에 의해 20
		System.out.println(i);	//논리곱에서 앞 항이 거짓이었기 때문에 뒤 항은 실행되지 않아서 그대로 2

		int num2 = 15;
		int j = 3;
		boolean value2 = ((num2 = num2 + 15) > 15) || ((j = j + 3) < 15);
		System.out.println(value2);	//논리합에서 앞 항의 결과가 참이므로 true
		System.out.println(num2);	//num2 = num2 + 10에 의해 20
		System.out.println(j);	//논리합에서 앞 항이 참이었기 때문에 뒤 항은 실행되지 않아서 그대로 3
	}
}


Eclipse 실행 결과 앞의 항의 결과로 인해 논리곱, 논리합 연산 결과가 정해져서 뒤 항의 연산은 실행되지 않았음을 확인할 수 있다.

좋은 웹페이지 즐겨찾기