자바의 정석 3장 - 연산자(Operator)

청포도봉봉이·2023년 11월 8일
0

자바의 정석

목록 보기
3/16
post-thumbnail

연산자

연산자는 연산을 수행하는 기호를 말한다.

연산자와 피연산자

연산자가 연산을 수행하려면 반드시 연산의 대상이 있어야하는데, 이것을 피연산자라고 한다. 피연산자로 상수, 변수 또는 식 등을 사용할 수 있다.

연산자: 연산을 수행하는 기호 (+,-,*,/ 등)
피연산자: 연산자의 작업 대상(변수, 상수, 리터럴, 수식)

x + 3

위의 식에서 x3은 피연산자이고 +는 연산자이다.

연산자는 피연산자로 연산을 수행하고 하면 항상 결과값을 반환한다.

연산자의 종류

종류연산자설명
산술 연산자+ - * / % << >>사칙 연산(+, -, *, /)과 나머지 연산(%)
비교 연산자> < >= <= == !=크고 작음과 같고 다름을 비교
논리 연산자&& || ! & | ^ ~그리고 (AND)와 또는(OR)으로 조건을 연결
대입 연산자=우변의 값을 좌변에 저장
기타(type) ?: instanceof형변환 연산자, 삼항연산자, instanceof 연산자
  1. 연산자의 우선순위는 산술 연산자 > 비교 연산자 > 논리 연산자 > 대입 연산자 대입은 제일 마지막에 수행된다.
  2. 단항(1) > 이항(2) > 삼항(3). 단항 연산자의 우선순위가 이항 연산자보다 높다.
  3. 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.

단항 연산자

증감 연산자 ++ --

증감연산자는 피연산자에 저장된 갑ㅂㅅ을 1 증가 또는 감소시킨다. 증감연산자의 피연산자로 정수와 실수가 모두 가능하지만, 상수는 값을 변경할 수 없으므로 가능하지 않다.

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

일반적으로 단항 연산잔자는 피연산자의 왼쪽에 위치하지만, 증가 연산자 ++와 감소 연산자 --는 양쪽 모두 가능하다. 피연산자의 왼쪽에 위치하면 전위형(prefix), 오른쪽에 위치하면 후위형(postfix)이라고 한다.

타입설명사용예
전위형값이 참조되기 전에 증가시킨다.j = ++i;
후위형값이 참조된 후에 증가시킨다.j = i++;

그러나 ++i;i++;처럼 증감연산자가 수식이나 메서드 호출에 포함되지 않고 독립적인 하나의 문장으로 쓰인 경우에는 전위형과 후위형의 차이가 없다.

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

실행 결과를 보면 i의 값은 두 경우 모두 1이 증가되어 6이 되지만, j의 값을 그렇지 않다.
식을 계산하기 위해서는 식에 포함된 변수의 값을 읽어 와야 하는데,

전위형은 변수의 값을 먼저 증가시킨 후에 변수의 값을 읽어오는 반면, 후위형은 변수의 값을 먼저 읽어온 후에 값을 증가시킨다.

산술 연산자

산술 연산자에는 사칙 연산자(+, -, *, /)와 나머지 연산자(%)가 있다.

사칙 연산자 + - * /

곱셈(*), 나눗셈(/), 나머지 연산자(%)가 덧셈(+), 뺄셈(-) 연산자보다 우선순위가 높으므로 먼저 처리된다.

int a = 10;
int b = 2;
System.out.println(a / b); // 2

나누기 연산자의 두피연산자가 모두 int타입인 경우, 연산결과 역시 int이다. 실제 연산결과는 2.5일지라도 int 타입의 값인 2를 결과로 얻는다.

크기가 작은 자료형의 변수를 큰 자료형의 변수에 저장할 때는 자동으로 형변환되지만, 반대로 큰 자료형의 값을 작은 자료형의 변수에 저장하려면 명시적으로 형변환 연산자를 사용해서 변환해주어야 한다.

나머지 연산자 %

나머지 연산자는 왼쪽의 피연산자를 오른쪽 피연산자로 나누고 난 나머지 값을 결과로 반환하는 연산자이다.

비교 연산자

비교 연산자는 두 피연산자를 비교하는 데 사용되는 연산자다. 주로 조건문과 반복문의 조건식에 사용되며, 연산결과는 오직 true와 false 둘 중의 하나이다.

대소비교 연산자 >   <   <=   >=

두 피연산자의 값을 비교하는 연산자이다.

등가비교 연산자 ==   !=

두 피연산자의 값이 같은지 또는 다른지를 비교하는 연산자이다.

논리 연산자

논리 연산자 &&   ||   !

&&는 우리말 그대로 그리고(AND)에 해당하며, 두 피연산자가 모두 true일 때만 true를 결과로 얻는다.
||또는(OR)에 해당하며, 두 피연산자 중 어느 한 쪽만 true이어도 true를 결과로 얻는다.

&&|| 보다 우선순위가 더 높다.

부정 논리 연산자 !

피연산자가 tru이면 false를, false면 true를 결과로 반환한다.

비트 연산자 &   |   ^   ~   <<   >>

비트 연산자는 피연산자를 비트단위로 논리 연산한다.

| (OR연산자) 피연산자 중 한 쪽의 값이 1이면, 1을 결과로 얻는다. 그 외에는 0을 얻는다.
& (AND연산자) 피연산자 양 쪽이 모두 1이어야만 1을 결과로 어든ㄴ다. 그 외에는 0을 얻는다.
^ (XOR연산자) 피연산자의 값이 서로 다를 때만 1을 결과로 얻는다. 같을 때는 0을 얻는다.

비트 전환 연산자 ~

이 연산자는 피연산자를 2진수로 표현했을때, 0은 1로, 1은 0으로 바꾼다.

쉬프트 연산자 <<   >>

이 연산자는 피연산자의 각 자리(2진수로 표현했을 때)를 오른쪽(>>) 또는 왼쪽(<<)으로 이동(shift)한다고 해서 쉬프트 연산자라고 이름 붙여졌다.

그 외의 연산자

조건 연산자 ? :

조건 연산자는 조건식, 식1, 식2 모두 세 개의 피연산자를 필요로 하는 삼항 연산자이며, 삼항 연산자는 조건 연산자 하나뿐이다.

             (false)
ㅁㅁㅁ        ㅁㅁㅁ
조건식 ? 식1 : 식2
----   ---
      (true)

대입 연산자 =   =op

대입 연산자는 변수와 같은 저장공간에 값 또는 수식의 연산결과를 저장하는데 사용된다.

x = y = 3

위의 식은 아래의 순서로 진행된다.

1. y = 3
2. x = y

대입 연산자는 연산자들 중에서 가장 낮은 우선순위를 가지고 있기 때문에 식에서 제일 마지막에 수행된다.

복합 대입 연산자

대입 연산자는 다른 연산자(op)와 결합하여 op=와 같은 방식으로 사용될 수 있다.

i = i + 3;
i += 3;

첫번째와 두번째의 식은 동일하다.

profile
서버 백엔드 개발자

0개의 댓글