도서/자바의 신

[도서/자바의 신] #5 계산을 하고 싶어요

yulee_to 2022. 12. 20. 18:55

자바의 신

✔️이 글은 [자바의 신 - 이상민 지음] 도서를 바탕으로 정리한 글입니다. 


연산자라는 게 뭐지? 벌써 조금 배웠다고?

기본 자료형에서 boolean을 제외한 자료형들만 다음 연산자들을 사용할 수 있고, 예외로 참조 자료형인 String만 + 연산이 가능하다.

연산자 종류

  • = : 대입 연산자(assignment operator)
  • + : 더하기 연산자 (additive operator)
  • - : 빼기 연산자 (subtraction operator)
  • * : 곱하기 연산자 (multiplication operator)
  • / : 나누기 연산자 (division operator)
  • % : 나머지 연산자 (remainder operator)

간단하게 계산하는 복합 대입 연산자들

복합 대입 연산자 (Compound Assignment Operator)

  • += : 기존 값에 우측 항의 값을 더함
  • -= : 기존 값에 우측 항의 값을 뺌
  • *= : 기존 값에 우측 항의 값을 곱함
  • /= : 기존 값을 우측 항의 값으로 나눔
  • %= : 기존 값을 우측 항의 값으로 나눈 나머지

피연산자가 하나인 것도 있어요. 이걸 단항 연산자라고 하죠

단항 연산자 종류

  • + : 단항 플러스 연산자 (Unary plus operator)
  • - : 단항 마이너스 연사자 (Unary minus operator)
  • ++ : 증가 연산자 (Increment operator)
  • -- : 감소 연산자 (Decrement operator)
  • ! : 논리 부정 연산자 (Logical complement operator)
  • ~ : 틸드

+와 -

연산자 기호 앞에 아무런 변수나 숫자가 없다면

  • +는 "변수 x (1)"을 의미하고,
  • -는 "변수 x (-1)"을 의미한다.

즉, 부호를 의미하는 기호이다.

음수를 나타내는 -기호는 의미가 있지만 +기호는 없어도 양수임을 나타내므로 양수라는 것을 명시적으로 보여줄 때 사용한다.

++와 --

증감 연산자로 

  • ++는 값을 1 증가시켜주고
  • --는 값을 1 감소시켜준다.

다른 단항 연산자들과는 달리 증감연산자는 변수의 앞에 붙을 수도 있고 뒤에 붙을 수도 있다.

  • 앞 : 변수를 참조하기 전에 증가/감소
  • 뒤 : 변수를 참조하고 증가/감소
int intValue = 1;
System.out.println(intValue++);
System.out.println(intValue);
System.out.println(++intValue);

위 코드를 수행하면 순서대로 1, 2, 3이라는 숫자가 출력된다.

!

boolean 타입에서만 사용할 수 있는 연산자로 값을 반대로 만들어준다.

~

2진수로 되어 있는 비트 값을 전부 반대로 바꿔주는 연산자이다. 

자바에서 계산하는 순서를 알아두면 좋다

연산자 우선순위

구분 연산자 우선 순위
괄호 () 1
단항 연산자 ++ -- + - ! ~ 2
산술 연산자 * / % 3
  + -  4

사칙연산의 순서를 따르고, 괄호 안에 있는 것을 가장 먼저 계산해야 한다. 

뭔가를 비교할 때는 어떻게 하지?

비교 연산자

  • == : 같음 (equal to)
  • != : 같지 않음 (not equal to)
  • > : (왼쪽 값이) 큼 (greater than)
  • >= : (왼쪽 값이) 같거나 큼 (greater than or equal to)
  • < : (왼쪽 값이) 작음 (less than)
  • <= : (왼쪽 값이) 같거나 작음 (less than or equal to)

모든 비교 연산자의 결과는 반드시 boolean 타입으로 조건을 충족하면 true, 그렇지 않으면 false가 된다. 

==과 !=

등가 비교 연산자로 Equality Operator라고 부른다.

두 개의 값이 같은지, 다른지를 확인할 때 사용한다. 

 

등가 비교 연산자는 모든 타입에서 사용할 수 있다. 

기본 자료형은 같은 종류끼리만 비교가 가능하다. 

ex) int == char, boolean = boolean은 가능 / int == boolean은 불가능

참조 자료형은 그 주소 값이 같은지 확인한다. 

< > <= >= 

두 개의 값이 큰지 작은지를 비교하는 대소 비교 연산자로 Relational Operator라고 부른다. 

값을 비교하기 때문에 숫자에서만 사용할 수 있다. 

논리연산자들을 알아보자

논리 연산자 (Conditional Operator) 

  • && : AND 결합 (Conditional AND), 두 개의 조건이 모두 true일 때만 true
  • || : OR 결합 (Conditional OR), 두 조건 중 하나라도 true이면 true

||(OR)의 경우 앞 조건이 true이면 뒤 조건을 확인하지 않기 때문에 이 점을 주의해야 한다.

int x = 1;
if ( x == 1 || ++x == 2) {
	System.out.println(x);
}

위 코드는 x==1이 true이므로 조건문 안의 System.out.println(x);를 바로 수행해 증가 연산자가 적용되지 않은 x의 값인 1이 출력된다.

아주 특이한 ? : 연산자

if 조건문을 간단하게 처리해주는 ? : 로 구성되어 있는 삼항 연산자라는 게 있다. 영어로는 그냥 Conditional Operator ? : 라고 한다.

변수 = (boolean조건식) ? true일 때 값 : false일 때 값;

특이한 연산자로는 instanceof라는 것도 있는데 기호가 아닌 자바의 예악어로 되어 있는 유일한 연산자이다. 

기본 자료형의 형 변환을 이용한 변신

형변환은 영어로 Casting이라고 하고, 서로 다른 타입 사이에 변환하는 작업을 하는 것을 의미한다. 

기본 자료형과 참조 자료형 모두 괄호로 묶어주면 형 변환이 된다.

 

기본 자료형 중에 boolean은 형 변환이 되지 않는다. 그리고 기본 자료형과 참조 자료형은 서로 형변환할 수 없다.

기본 자료형을 형 변환할 때는 자료형의 크기가 매우 중요하다. 

  • 작은 타입 -> 큰 타입으로 형변환할 때는 별도로 해줄 것이 없지만,
  • 큰 타입 -> 작은 타입으로 형변환할 때는 소괄호 안에 작은 타입을 명시해주고, 값이 변할 수 있으므로 주의해야 한다.

타입 별 사용 가능한 연산자 알아보기

정수형

구분   연산자
결과가 boolean인 경우 숫자 비교 연산자  < > <= >= 
  숫자 동등 연산자  == !=
결과가 int나 long인 경우 기본 사칙 연산자 + - * / %
  증감 연산자  ++ --
  비트 연산자  & | ^ ~ << >> >>>
기타 연산자 삼항 연산자 ? :
  형 변환 연산자 (타입)
  문자열 더하기 연산자 +

소수형

구분   연산자
결과가 boolean인 경우  숫자 비교 연산자 < > <= >=
  숫자 동등 연산자  == !=
결과가 int나 long인 경우  기본 사칙 연산자  + - * / %
  증감 연산자  ++ --
기타 연산자 삼항 연산자 ? :
  형 변환 연산자 (타입)
  문자열 더하기 연산자  +

booelan 타입

구분 연산자
동등 연산자  == !=
조건적 논리 연산자  && ||
논리 연산자  ! & | ^
삼항 연산자  ? :
문자열 더하기 연산자 

조건적 논리 연산자가 아닌 논리 연산자들은 숫자에 사용하면 비트 연산을, boolean에 사용하면 논리 연산을 수행한다.

연산자  내용
& 두 값이 모두 true일 때만 true
두 값이 모두 false일 때만 false
^ 두 값이 서로 다를 경우 true, 같은 경우 false

&&의 경우 좌측의 연산이 false이면 우측을 실행하지 않고, ||의 경우 좌측의 연산이 true이면 우측 연산을 수행하지 않는다.

반면에 &와 |의 경우는 좌측 연산 결과와 우측 연산 결과를 비교해야 하기 때문에 모두 수행한다. 


정리해 봅시다

1. 값을 할당할 때 사용하는 연산자의 기호는?

= (대입 연산자)

2. 기본적인 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지를 계산할 때 사용하는 연산자의 기호는?

+ - * / %

3. +=는 무엇을 할 때 사용하는 연산자인가요?

왼쪽에 있는 변수에 오른쪽 항의 값을 더할 때 사용한다.

4. 여러분들이 연산의 순서를 모르거나 확실히 하고 싶을 때에는 어떤 기호를 사용해야 하나요?

소괄호

5. ==와 !=의 차이는 무엇인가요?

==은 두 값이 같은지 확인하는 거고, !=은 두 값이 다른지 확인하는 연산자이다.

6. <와 <=의 차이는 무엇인가요?

<은 왼쪽 값이 오른쪽 값보다 더 작은 지 확인하는 연산자고, <=은 왼쪽 값이 오른쪽 값보다 작거나 같은지 확인하는 연산자이다.

7. !연산자는 어떤 타입에 사용할 수 있나요?

boolean

8. ? :로 표시하는 삼항 연산자의 ?와 :뒤에 명시해주는 값은 무엇을 의미하나요?

? 뒤에는 조건문이 true일 때의 값을 의미하고, : 뒤에는 조건문이 false일 때의 값을 의미한다.

9. 자바는 형 변환을 한다고 했는데, short의 값을 long에 할당할 때는 어떤 것을 해주어야 하나요?

long이 더 큰 자료형이므로 아무것도 해주지 않아도 된다.

10. 반대로 long 값을 short에 할당할 때에는 어떤 것을 해주어야 하나요?

short에 비해 큰 자료형인 long의 값을 short에 할당하는 것이므로 형변환을 위해 소괄호 안에 short를 써줘야 한다.

11. 9와 10번의 경우 중 어떤 경우가 기존 값이 사라지고, 엉뚱한 값으로 바뀔 수 있나요?

10번

 

728x90