본문 바로가기

java

자바강의 2일차

1. 연산자 (Operator)

  1-1) 연산자란?

   - 연산자는 연산을 수행하는 기호를 의미한다.

 

  1-2) 연산자와 피연산자

   - 연산자와 연산을 수행하려면 반드시 연산의 대상이 있어야 하는데 이를 피연산자라고 한다.

      예)연산자 : 연산을 수행하는 기호 (+, -, *, /, ...)

           피연산자 : 연산자의 작업 대상

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

 

  1-3) 식 (표현식, expression) 

   - 연산자와 피연산자를 조합하여 계산하고자 하는 바를 표현한것을 식 또는 표현식이라고 한다.

  

  1-4) 연산자의 종류

 

종류 연산자 설명
산술연산자 +, -, *, /, %, <<, >> 사칙연산과 나머지 연산
비교연산자 >, <, >=, <=, ==, != 크고 작음과 같고 다름을 비교
논리연산자 &&, ||, !, &, ^, ~ 그리고(AND)와 또는(OR)으로 조건을 연결
대입연산자 = 우변의 값을 좌변에 저장
기타연산자 (type), ? :, instanceof 형변환연산자, 삼항연산자, instanceof 연산자

 

  1-5) 연산자의 우선순위와 결합규칙

    - 식에 사용된 연산자가 둘 이상일 경우 연산자의 우선순위에 의해서 연산순서가 결정된다.

 

    - 단항연산자가 이항연산자보다 우선순위가 높다.

    - 만일 우선순위가 확실하지 않다면, 먼저 계산되어야 하는 부분을 괄호로 묶어주면 된다. 괄호안의 계산식이 우선순위가 제일 높다.

    - 연산자의 결합규칙은 왼쪽에서 오른쪽 순서이지만, 대입연산자는 오른쪽에서 왼쪽으로 진행된다.

  * 정리

    산술 > 비교 > 논리 > 대입순서로 진행, 대입은 제일 마지막에 실행

    단항(1) > 이항(2) > 삼항(3) 순서로 진행

    대입연산자는 연산의 진행방향이 오른쪽에서 왼쪽이다.

 

  1-6) 산술변환

    - 이항 연산자는 두 피연산자의 타입이 일치해야 연산이 가능하므로, 피연산자의 타입이 서로 다르면 연산 전에 형변환 연산자로 타입을 일치시켜야 한다. 

    - 대부분의 경우 두 피연산자의 타입 중 더 큰 타입으로 일치시키는데, 그 이유는 작은 타입으로 형변환 하면 원래의 값이 손실될 가능성이 있기 때문이다.

    - 작은 타입에서 큰 타입으로 형변환 하는 경우, 자동적으로 형변환 연산자를 생략할 수 있다.

   

  ① 두 피연산자의 타입을 일치시킨다. (보다 큰 타입으로 일치)

  long + int   =>  long + long

  float + int   =>  float + float

  double + float  =>  double + double

 

  ② 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.

  byte + short  => int + int

  char + short  => int + int

  1-7) 단항연산자

    ① 증감연산자 ++, --

      - 증감연산자는 피연산자에 저장된 값을 1 증가 또는 1 감소시킨다.

      - 일반적으로 단항연산자는 피연산자의 왼쪽에 위치하지만 증감연산자는 양쪽 모두 가능하다.

            ++num,  num++

      - 피연산자의 왼쪽에 위치하면 전위형(prefix), 피연산자의 오른쪽에 위치하면 후위형(postfix)라고 한다.

      - 전위형과 후위형 모두 피연산자의 값을 1 증가 또는 감소시키지만 증감연산자가 수식이나 메소드 호출에 포함된 겨웅우 전위형일때와 후위형일때의 결과가 다르다.

      * 메소드 : 이름뒤에 소괄호

  1-8) 산술연산자

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

+ 덧셈
- 뺄셈
* 곱셈
/ 나눗셈
& 나머지

 

  1-9) 비교연산자

      - 비교연산자는 두 피연산자를 비교하는데 사용되는 연산자이다.

      - 주로 조건문과 반복문의 조건식에 사용되며, 연산결과는 오직 true or false이다.

      - 비교연산자 역시 이항연산자이므로 비교하는 피연산자의 타입이 서로 다를 경우 자료형의 범위가 큰 쪽으로 자동형변환되어 피연산자의 타입을 일치시킨 후에 비교한다.

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

비교연산자 연산결과
> 좌변값이 크면 true, 아니면 false
< 좌변값이 작으면 true, 아니면 false
>= 좌변값이 크거나 같으면 true, 아니면 false
<= 좌변값이 작거나 같으면 true, 아니면 false

 

  ② 등가비교 연산자 ==, !=

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

     - 기본형은 물론 참조형에도 사용할 수 있다.

     - 기본형의 경우 변수에 저장되어 있는 값이 같은지를 알 수 있고, 참조형의 경우 객체의 주소값을 저장하기 때문에 두 개의 피연산자가 같은 객체를 가리키고 있는지를 확인할 수 있다.

비교연산자 연산결과
== 두 값이 같으면 true, 아니면 false
!= 두 값이 다르면 true, 아니면 false

 

  1-10) 논리연산자

      - 논리연산자는 둘 이상의 조건을 '그리고(AND) 나 또는(OR)'으로 연결하여 하나의 식으로 표현할 수 있게 해준다.

     - 효율적인 연산을 하기 위해서는 OR연산의 경우 연산결과가 참일 확률이 높은 피연산자를 왼쪽에 놓는게 좋다.

      ① 논리연산자 &&, ||, !

          ||      (OR결합)     피연산자중 어느 한쪽만 true이면 true

         &&    (AND결합)   피연산자 모두 true여야 true

          !       (NOT)          true -> false, false -> true

x y x || y x && y
true true true true
true false true false
false ture ture false
false false false false

 

x !x
true false
false true

② 비트 연산자 &, |, ^, <<, >>

     1byte = 8bit

0             0         0          0          0         0          0         0

2의 7    2의6    2의5    2의4    2의3    2의2    2의1   2의0

128         64       32        16        8          4         2       1

 

      - 비트연산자는 어떤 변수의 값을 0과 1의 조합, 즉 비트로 변환한 뒤에 비트단위로 연산을 수행한다.

      - 주요 비트 연산으로는 AND, OR, NOT, SHIFT연산이 있다.

      - 종류

& a & b a와 b를 AND처리 (둘 다 1이어야지 1)
| a | b a와 b를 OR처리 (둘 중 하나만 1이면 1)
^ a ^ b a와 b를 XOR처리 (두 비트가 달라야지 1)
<< a << 2 a를 비트로 변환하여 왼쪽으로 2비트 이동
>> a >> 2 a를 비트로 변환하여 오른쪽으로 2비트 이동

 

 

 1-11) 그 외의 연산자

① 조건연산자(삼항연산자) ? :

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

② 대입연산자

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

    - 대입연산자의 왼쪽 피연산자 lvalue(left value)라고 하고 오른쪽 피연산자를 rvalue(right value)라고 한다.

    - 대입연산자의 rvalue는 변수뿐만 아니라 식이나 상수 모두 가능한 반면, lvalue는 반드시 변수럼 변경할 수 있는 것이어야한다.

 

* 복합대입연산자

+= 더한값을 저장
-= 뺀 값을 저장
*= 곱한 값을 저장
/= 나눈 값을 저장
%n 나눈 나머지를 저장

 

 

 

 

  

'java' 카테고리의 다른 글

자바강의 4일차  (0) 2023.12.30
자바강의 3일차  (1) 2023.12.27
자바강의 1일차  (0) 2023.12.24
자바의 정석 ch4  (1) 2023.12.24
자바의 정석 ch3  (0) 2023.12.22