JAVA

자바 연산자 — 계산하고 비교하고 판단하기

PANCO_IT
#자바#JAVA#연산자#삼항연산자

계산기와 숫자가 적힌 서류

이미지 출처: Pexels (Pixabay) · Pexels License

지난 편에서 사용자에게 값을 입력받았습니다. 그런데 값을 받아 놓기만 해서는 아무 일도 일어나지 않습니다. 받은 값으로 계산하고, 비교하고, 판단해야 비로소 프로그램이 됩니다. 그 도구가 오늘의 주제, 연산자입니다.

이름이 낯설 뿐 대부분 초등학교 산수에서 이미 본 기호들입니다. 종류가 많아 보여도 무리 지어 보면 몇 개 안 됩니다.

연산자 4무리: 산술은 계산값, 비교와 논리는 참·거짓, 증감은 1 증가·감소

산술 연산자 — 계산하고, 남기기

우리가 아는 사칙연산에 나머지(%) 하나가 더 있습니다.

System.out.println(7 + 3);   // 10
System.out.println(7 - 3);   // 4
System.out.println(7 * 3);   // 21
System.out.println(7 / 3);   // 2  (정수끼리 나누면 몫만 남습니다)
System.out.println(7 % 3);   // 1  (나누고 남은 나머지)

쉽게 — %"나누고 남은 것" 입니다. 사탕 7개를 3명이 나누면 한 명당 2개(/)씩 가져가고 1개가 남습니다(%). 남은 그 1개가 %의 결과입니다.

이 나머지가 생각보다 쓸모가 많습니다. 실무에서 가장 많이 쓰는 두 가지만 봅니다.

int num = 56789;
System.out.println(num % 2);     // 1   → 홀수 (0이면 짝수)
System.out.println(num % 10);    // 9   → 오른쪽 끝 한 자리
System.out.println(num % 100);   // 89  → 오른쪽 끝 두 자리

짝수·홀수 판별(% 2)과 끝자리 뽑기(% 10, % 100)입니다. 뒤에서 짝수·홀수 판별기를 직접 만들어 봅니다.

대입 연산자 — 넣기, 그리고 줄여 쓰기

=는 "같다"가 아니라 "오른쪽 값을 왼쪽 공간에 넣어라" 는 명령입니다. 그리고 "지금 값에 얼마를 더해서 다시 넣기"는 워낙 자주 쓰여서 줄여 쓰는 형태가 따로 있습니다.

int a = 10;

a += 10;   // a = a + 10; 과 같습니다 → 20
a -= 5;    // a = a - 5;  과 같습니다 → 15
a *= 3;    // a = a * 3;  과 같습니다 → 45
System.out.println(a);   // 45

+= -= *= /= %=복합 대입 연산자라고 부릅니다. 뜻은 하나입니다. "계산한 다음 그 자리에 다시 넣어라."

단골 함정 — === 는 완전히 다릅니다. =넣기(대입), ==같은지 묻기(비교) 입니다. age = 20은 age에 20을 집어넣는 것이고, age == 20은 age가 20인지 물어보는 것입니다. 비교할 자리에 등호를 하나만 쓰면 값이 바뀌어 버리거나 오류가 납니다.

= 는 넣기(대입), == 는 묻기(비교)로 결과는 true 또는 false

헷갈릴 때는 소리 내어 읽습니다. =는 "넣어라", ==는 "같은가?"입니다.

비교 연산자 — 결과는 참 또는 거짓

두 값을 견주면 결과는 숫자가 아니라 true(참) / false(거짓) 로 나옵니다.

int a = 10, b = 20;
System.out.println(a > b);    // false
System.out.println(a <= b);   // true
System.out.println(a != b);   // true  (다른가?)
연산자
==같다
!=다르다
> <크다 / 작다
>= <=크거나 같다 / 작거나 같다

이 참·거짓이 다음 편의 조건문(if)으로 그대로 이어집니다. 비교 연산자는 조건문의 재료라고 보면 됩니다.

논리 연산자 — 조건을 묶기

조건이 하나가 아닐 때 그리고 / 또는으로 엮습니다.

int score = 85;
boolean pass = (score >= 60) && (score <= 100);
System.out.println(pass);   // true
  • && (그리고) — 양쪽이 모두 참이어야 참입니다.
  • || (또는) — 둘 중 하나만 참이어도 참입니다.
  • ! (부정) — 참과 거짓을 뒤집습니다.

쉽게 — &&는 "지갑도 있고 그리고 시간도 있어야" 나갈 수 있는 것, ||는 "카드 또는 현금 중 하나만 있어도" 계산되는 것과 같습니다.

한 가지만 더 알아 둡니다. &&왼쪽이 거짓이면 오른쪽은 아예 확인하지 않습니다. 이미 결과가 거짓으로 정해졌기 때문입니다(||는 왼쪽이 참이면 오른쪽을 건너뜁니다). 지금은 "쓸데없는 계산을 건너뛴다" 정도로만 기억해도 충분합니다.

증감 연산자 — 1씩 늘리고 줄이기

++는 1 더하기, --는 1 빼기입니다. 반복문에서 아주 자주 만납니다.

int n = 5;
n++;                     // n = n + 1; 과 같습니다
System.out.println(n);   // 6
n--;                     // n = n - 1; 과 같습니다
System.out.println(n);   // 5

함정 — n++(후위)와 ++n(전위)은 한 줄에 혼자 쓰면 결과가 같지만, 다른 계산에 섞여 들어가면 값을 꺼내는 시점이 달라져 결과가 갈립니다. ++n먼저 1을 더하고 그 값을 쓰고, n++지금 값을 먼저 쓰고 나중에 1을 더합니다. 처음에는 n++;처럼 한 줄에 하나씩 단순하게 쓰면 헷갈릴 일이 없습니다.

삼항 연산자 — 한 줄로 갈라지기

조건에 따라 둘 중 하나를 고르는 일은 아주 흔합니다. 이것을 한 줄로 쓰는 것이 삼항 연산자입니다.

(조건식) ? 참일 때의 값 : 거짓일 때의 값
int score = 85;
char grade = (score > 90) ? 'A' : ((score > 80) ? 'B' : 'C');
System.out.println(score + "점은 " + grade + "등급입니다.");
// 출력: 85점은 B등급입니다.

score가 90보다 크면 'A', 아니면 다시 80보다 큰지 물어 'B', 그것도 아니면 'C'입니다. 물음표는 "~인가?", 콜론은 "아니면" 이라고 읽으면 그대로 문장이 됩니다.

직접 해 보기 — 짝수·홀수 판별기

지난 편의 Scanner와 오늘의 %, 그리고 삼항 연산자를 한꺼번에 씁니다. 복붙해서 바로 돌려 볼 수 있습니다.

import java.util.Scanner;

public class EvenOdd {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("정수 하나: ");
        int num = sc.nextInt();

        String result = (num % 2 == 0) ? "짝수입니다" : "홀수입니다";
        System.out.println(num + "은(는) " + result);

        sc.close();
    }
}

7을 넣으면 7은(는) 홀수입니다가 나옵니다. 다섯 줄 남짓한 코드지만 입력받고, 계산하고, 판단해서, 출력하는 프로그램의 기본 흐름이 전부 들어 있습니다.

참고 — 비트·시프트 연산자

& | ^ ~(비트)와 << >>(시프트)는 숫자를 0과 1의 비트 단위로 다루는 연산자입니다. 예를 들어 20 << 3은 비트를 왼쪽으로 세 칸 밀어 160이 되고, 20 >> 3은 오른쪽으로 밀어 2가 됩니다.

성능 최적화나 저수준 처리에서 쓰이며, 왕초보 단계에서는 "이런 것도 있구나" 정도로 넘어가도 충분합니다. 필요해지는 순간에 다시 찾아보면 됩니다.

한 장 정리

무리연산자결과
산술+ - * / %계산값
대입= += -= *= /=왼쪽 공간에 넣기
비교== != > < >= <=참 / 거짓
논리&& || !참 / 거짓
증감++ --1 증가 / 감소
삼항(조건) ? A : BA 또는 B

이것만 기억하면 됩니다. %는 나머지이고 짝수·홀수 판별에 쓰입니다. 비교와 논리의 결과는 언제나 참 또는 거짓입니다. 그리고 =는 넣기, ==는 비교 — 이 둘만은 절대 헷갈리지 않습니다.

미니 퀴즈

개념을 제대로 잡았는지 직접 풀어 봅니다. 정답은 눌러야 나옵니다.

미니 퀴즈

OX 3문제 + 4지선다 2문제


포켓코딩(JAVA1) 5편 · 예제 출처: 강사 개인 GitHub 저장소. 다음 편: 조건문 — 갈림길 만들기(if · switch).

PANCO_IT

IT 지식을 정리하는 개발자

관련 글