연산자

김민성·2022년 7월 14일
0

Java

목록 보기
6/47
post-thumbnail

연산자

1. 단항 연산자

  • 증감 연산자

    • 증가 연산자(++) : 피연산자의 값을 1 증가시킨다.

    • 감소 연산자(--) : 피연산자의 값을 1 감소시킨다.

    증감 연산자에는 전위형과 후위형이 있으며 각 ++i;i++; 의 형식으로 사용한다.

    • 전위형 : 값이 참조되기 전에 증가시킨다.
    • 후위형 : 값이 참조된 후에 증가시킨다.
    public class Main {
    	public static void main(String[] args) {
    		int i = 5, j = 0;	// i와 j를 각각 5와 0으로 초기화
    		
    		j = i++;			
    		System.out.println("i = " + i);		// i = 6
    		System.out.println("j = " + j);		// j = 5
    	}
    }

    먼저 후위형을 살펴보자. j = i++; 은 j 에 현재의 i값을 대입한 후에 i에 i+1의 값을 저장하는 것이다.

    따라서 결과는 i = 6, j = 5가 나온다.

    public class Main {
    	public static void main(String[] args) {
    		int i = 5, j = 0;
    		
    		j = ++i;
    		System.out.println("i = " + i);		// i = 6
    		System.out.println("j = " + j);		// j = 6
    	}
    }

    다음으로 전위형을 살펴보자. j = ++i 는 현재의 i값에 1을 더한 후 그 그 결과를 j에 저장하는 것이다.

    따라서 결과는 i = 6, j = 6이 나온다.

2. 산술 연산자

  • 사칙연산자

    +, -, *, / 가 있으며 기존에 알고 있는 것처럼 나눗셈(/)과 곱셈(*)을 우선으로 처리한다.

    0으로 나눌 수 없으며, 연산 결과의 타입은 형변환된 타입을 따른다는 것을 알아두자.

    public class Main {
    	public static void main(String[] args) {
    		int a = 10, b = 4;
    		double c = 4;
    		
    		System.out.println(a/b);
            // int타입끼리의 연산이므로 결과값도 int타입이 되어 2가 나온다.
    		System.out.println(a/c); 
            // int타입을 double타입으로 나누어 결과값도 double타입이 되어 2.5가 나온다.
    	}
    }
  • 나머지 연산자

    나머지 연산자(%)는 나눗셈을 한 나머지 값을 결과로 반환한다.

    나눗셈과 마찬가지로 0으로 나눈 나머지를 구하는 것은 불가능하다.

    주로 짝수, 홀수 또는 배수 검사 등에 사용된다.

    public class Main {
    	public static void main(String[] args) {
    		int num1 = 10;
    		int num2 = 11;
    		
    		System.out.println(num1%2);
            // 10을 2로 나눈 나머지는 0이므로 num1은 짝수이다.
    		System.out.println(num2%2);
            // 11을 2로 나눈 나머지는 1이므로 num2는 홀수이다.
    	}
    }

3. 비교 연산자

  • 대소비교 연산자

    <, >, <=, >= 가 있으며 기존에 알고있는 대소비교와 같다. 결과를 truefalse 로 반환한다.

    boolean 타입을 제외한 나머지 기본 자료형에만 사용할 수 있다.

  • 등가비교 연산자

    ==, != 가 있으며 두 수가 같은지 다른지를 비교하는 연산자이다.

    기본형과 참조형 자료 모두 사용할 수 있다. 참조형의 경우 객체의 주소값을 비교하기 때문에, 두 개의 피연산자가 같은 객체를 가리키고 있는지 알 수 있다.

    public class Main {
    	public static void main(String[] args) {
    		System.out.println(10 == 10.0f);
            // true. int타입의 10이 float형으로 자동 형변환된다.
    		System.out.println('0' == 0);
            // false. 문자 0과 숫자 0은 다르다. 참고로 문자 0은 48의 값을 가진다.
    		System.out.println('A' == 65);
            // true. 문자 'A'는 아스키코드에서 65의 값을 가지기 때문에 같다.
    		System.out.println('A' > 'B');
            // false. 'A'는 65, 'B'는 66이므로 'B'의 값이 더 크다.
    		System.out.println('A' + 1 != 'B');
            // false. 'A' + 1 은 66으로 'B'의 값과 같다.
    	}
    }

4. 논리 연산자

  • OR결합(||)

    피연산자중 어느 한 쪽만 true면 true를 반환한다.

  • AND결합(&&)

    피연산자중 양쪽 모두 true이어야 true를 반환한다.

  • 논리 부정 연산자(!)

    피연산자가 true면 false를, false면 true를 반환한다.

    public class Main {
    	public static void main(String[] args) {
    		char ch = '5';
    		boolean tf = '0' <= ch && ch <= '9';
    		// '0' <= ch && ch <= '9'의 결과가 true나 false중 하나일것이므로 
    		// boolean 타입의 변수 tf에 저장한다.
    		System.out.println(tf);
    		// 문자 5(아스키코드  53)는 문자 0(아스키코드 48)과 문자 9(아스키코드 57)
    		// 사이에 있으므로 true가 반환된다.
    		System.out.println(!tf);
    		// tf에 논리부정연산자 !를 붙여서 false가 반환된다.
    	}
    }

5. 삼항 연산자

  • 조건연산자(? :)

    조건식 ? 식1 : 식2 의 구조를 가지며 조건식이 참이면 식1이, 거짓이면 식2가 연산결과가 된다.

    두개의 결과를 놓고 조건을 비교할 때는 조건연산자가 간편하지만 셋 이상의 결과중 선택해야 할때는 if문이 편리함과 가독성면에서 더 좋다.

    public class Main {
    	public static void main(String[] args) {
    		int x = 5, y = 15;
    		System.out.println((x > y) ? x-y : y-x);
    		// 조건식의 괄호는 가독성을 위해 넣어주며 필수는 아니다.
    		// 조건식이 거짓이므로 y-x의 값인 10가 출력된다.
    		int result = (x > y) ? x-y : y-x;
    		System.out.println(result);
    		// 출력하려는 타입에 따라 값을 변수에 저장할 수 있다.
    		// 결과로 출력하려는 x-y 또는 y-x가 둘 다 int 타입 이므로 int result에 저장이 가능하다.
    	}
    }

6. 대입 연산자

  • x = y 의 형식을 가지며 y의 을 x라는 공간에 저장한다. y는 값이므로 변수나 식 상수등이 모두 가능하지만 x는 y라는 값을 담을 공간이므로 변수처럼 값을 변경할 수 있는 것이어야 한다.
  • 대입연산자는 다른 연산자와 함께 붙여서 사용할 수 있다. x = x + 3x += 3과 같이 간략하게 줄여 사용할 수 있다.

연산자의 우선순위

  • 위의 연산자들은 1번부터 6번까지 순서대로 우선순위를 가지며 복합적으로 사용할때 우선순위에 주의한다.

    단항연산자 > 산술연산자 > 비교연산자 > 논리연산자 > 삼항연산자 > 대입연산자

0개의 댓글