반응형

2.5 키보드 입력과 Scanner 사용 – 표준 입력을 통해 값 읽어오기, Scanner 클래스 활용

여러분, 프로그램 실행 도중에 사용자로부터 직접 값을 입력받을 수 있다면 훨씬 유연하고 똑똑한 코드가 될 수 있다는 사실, 알고 계셨나요? 바로 Scanner가 그 핵심 역할을 해낸답니다!

반응형

안녕하세요, 자바 학습자 여러분 😊 오늘은 자바 프로그램에서 키보드를 통해 데이터를 입력받는 방법을 배워볼 거예요. 사실 지금까지는 값을 직접 코드에 써 넣는 방식으로만 프로그램을 작성했을 텐데요, 이제는 사용자가 직접 입력한 정보를 읽어올 수 있는 표준 입력 방식에 대해 배워볼 차례입니다! Scanner 클래스는 자바에서 매우 자주 쓰이는 입력 도구인데요, 그만큼 실전에서도 활용도가 아주 높아요. 특히 초보 개발자 분들이 처음으로 사용자와 상호작용하는 프로그램을 만들어볼 수 있는 좋은 기회가 되니, 이번 주제 놓치지 말고 꼭 챙겨보세요!

1. 키보드 입력이란? 🤔

자바 프로그램에서 키보드 입력은 사용자로부터 실시간으로 값을 입력받는 방법입니다. 보통 우리가 작성한 프로그램은 정해진 값을 기준으로 동작하죠. 하지만 키보드 입력 기능이 들어가면 사용자의 행동에 따라 결과가 달라지는 인터랙티브한 프로그램이 됩니다.

예를 들어, 사용자의 이름을 입력받아 인사 메시지를 출력하거나, 두 수를 입력받아 더한 결과를 보여주는 프로그램처럼요! 이런 기능을 만들기 위해선 표준 입력이라는 개념을 이해해야 합니다.

🧾 표준 입력(Standard Input)의 개념

  • 운영체제에서 표준 입력 장치는 보통 키보드입니다.
  • 자바는 이 입력을 읽기 위해 System.in 스트림을 제공합니다.
  • System.in은 기본적으로 바이트 단위로 입력을 처리합니다.

💡 하지만 문자열이나 숫자 입력을 처리하려면?

이때 등장하는 것이 바로 Scanner 클래스입니다. Scanner는 System.in을 기반으로 문자열, 정수, 실수 등 다양한 자료형을 손쉽게 읽을 수 있게 도와주는 아주 고마운 도구랍니다.

📋 정리: 키보드 입력 이해 포인트

항목 내용
표준 입력 System.in으로 처리되는 기본 키보드 입력 스트림
문자 처리 System.in은 바이트 단위로만 처리하기 때문에 불편함 존재
Scanner System.in을 쉽게 사용할 수 있도록 도와주는 입력 처리 클래스

다음 섹션에서는 본격적으로 Scanner 클래스가 뭔지, 왜 쓰는지, 그리고 어떻게 쓰는지를 차근차근 알려드릴게요! 🔍

2. Scanner 클래스의 개념과 필요성 📚

Scanner 클래스는 자바에서 사용자 입력을 쉽게 처리하기 위해 제공되는 도구입니다. 콘솔에 입력한 데이터를 텍스트 단위로 읽어들여 원하는 데이터 형식으로 바꾸어줍니다. 복잡한 입출력 처리를 직접 구현하지 않고도 다양한 형식의 데이터를 손쉽게 다룰 수 있어요.

🔍 Scanner 클래스의 주요 기능

  • 문자열 입력 → next(), nextLine()
  • 정수 입력 → nextInt()
  • 실수 입력 → nextDouble(), nextFloat()

🧠 왜 Scanner가 필요한가요?

  1. 입력을 자동으로 자료형에 맞게 변환해줘서 따로 파싱할 필요가 없어요.
  2. 한 줄 전체 혹은 공백 단위로 유연하게 읽기가 가능해요.
  3. 자바에서 제공하는 API라 설정 없이 바로 사용 가능하죠!

📌 Scanner 클래스 선언 예시

import java.util.Scanner;

public class InputExample {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in); // Scanner 객체 생성
        System.out.print("이름을 입력하세요: ");
        String name = sc.nextLine(); // 문자열 입력 받기
        System.out.println("안녕하세요, " + name + "님!");
    }
}

📢 Scanner 사용 시 주의할 점

next()nextLine()은 작동 방식이 달라서 입력값이 의도와 다르게 처리될 수 있어요. 줄바꿈(\n) 문제를 주의해서 사용해야 합니다. 이 부분은 뒤에서 더 자세히 다룰게요.

지금까지 Scanner의 기본 개념을 살펴봤어요. 다음 파트에서는 이 Scanner를 실제로 어떻게 쓰는지 단계별로 알아볼 거예요!

3. Scanner 클래스 기본 사용법 🔤

Scanner 클래스는 입력을 다룰 수 있는 다양한 메서드를 제공합니다. 가장 기본적인 사용법은 객체를 생성한 뒤, 필요한 입력 메서드를 호출하는 방식입니다.

✅ Scanner 객체 생성

Scanner sc = new Scanner(System.in);

위 코드는 키보드 입력을 받을 준비를 하는 것이고, sc는 Scanner 객체의 이름입니다. 다른 이름을 써도 되지만, sc는 관례적으로 많이 사용됩니다.

🧾 주요 입력 메서드

메서드 설명
next() 단어 하나 (공백 전까지)
nextLine() 줄 전체 입력 (엔터 전까지)
nextInt() 정수 입력
nextDouble() 실수 입력

📌 주의! next() vs nextLine()

많은 초보자들이 실수하는 부분이 바로 next()nextLine()의 차이입니다. next()는 공백 전까지만 읽고, nextLine()은 한 줄 전체를 읽습니다. 그래서 앞에 nextInt() 등을 사용하고 바로 nextLine()을 쓰면, 줄바꿈 문자(\n)가 남아서 빈 문자열을 읽는 문제가 발생합니다.

🎯 입력 처리 기본 예제

import java.util.Scanner;

public class InputTypes {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.print("이름을 입력하세요: ");
        String name = sc.nextLine();

        System.out.print("나이를 입력하세요: ");
        int age = sc.nextInt();

        System.out.println("이름: " + name);
        System.out.println("나이: " + age);
    }
}

다음 장에서는 정수, 실수, 문자열 등 다양한 자료형을 입력받는 방법을 좀 더 구체적으로 살펴볼게요!

4. 다양한 자료형 입력 받기 🎛

Scanner 클래스를 활용하면 다양한 자료형의 입력을 받을 수 있습니다. 대표적으로 문자열, 정수, 실수, 불린값 등을 처리할 수 있어요. 아래에 각각의 자료형별 입력 방식과 주의할 점을 정리해드릴게요.

📦 자료형별 입력 메서드

자료형 메서드 예시
문자열 nextLine() sc.nextLine();
정수 nextInt() sc.nextInt();
실수 (double) nextDouble() sc.nextDouble();
실수 (float) nextFloat() sc.nextFloat();
불린 (true/false) nextBoolean() sc.nextBoolean();

💡 예외 상황 주의하기

  • 숫자 입력 시 숫자가 아닌 문자를 입력하면 InputMismatchException 오류 발생
  • nextInt() → nextLine() 순으로 쓸 때 줄바꿈 문제로 빈 값 입력될 수 있음

🧪 실습 예제: 다양한 입력 받기

import java.util.Scanner;

public class InputTypesExample {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.print("문자열 입력: ");
        String text = sc.nextLine();

        System.out.print("정수 입력: ");
        int number = sc.nextInt();

        System.out.print("실수 입력: ");
        double dnum = sc.nextDouble();

        System.out.print("참/거짓 입력 (true/false): ");
        boolean flag = sc.nextBoolean();

        System.out.println("입력된 문자열: " + text);
        System.out.println("입력된 정수: " + number);
        System.out.println("입력된 실수: " + dnum);
        System.out.println("입력된 불린값: " + flag);
    }
}

다양한 자료형을 입력받고 출력해보는 간단한 프로그램이지만, 실제 프로젝트에서도 아주 유용하게 쓰이는 패턴이랍니다. 다음 장에서는 입력 도중 발생할 수 있는 오류와 그 해결법을 살펴볼게요. 🙌

5. 자주 발생하는 입력 오류와 해결법 🛠

Scanner를 사용할 때 가장 자주 마주치는 문제는 바로 입력값의 처리 순서와 예외 발생입니다. 특히 nextInt()nextLine()의 혼용, 사용자가 예상치 못한 값을 입력했을 때 프로그램이 멈추는 현상 등이 대표적이에요.

😵 nextInt() 사용 후 nextLine()이 무시될 때

nextInt()는 숫자 입력 후 엔터키(\n)는 읽지 않고 남깁니다. 그래서 그 다음 nextLine()이 실행되면, 남아 있던 줄바꿈 문자를 그대로 읽어버려서 빈 문자열이 입력된 것처럼 처리되죠.

System.out.print("나이 입력: ");
int age = sc.nextInt();  // 숫자 입력

sc.nextLine(); // 줄바꿈 제거용 (중요!)

System.out.print("이름 입력: ");
String name = sc.nextLine(); // 이제 정상적으로 입력 받음

⚠️ InputMismatchException 예외

nextInt()nextDouble()숫자만을 입력받아야 하는데, 사용자가 실수로 문자열이나 특수기호를 입력하면 InputMismatchException이 발생해요.

🛡 해결 방법

  • try-catch 문으로 예외 처리하기
  • 문자열로 먼저 받은 후 Integer.parseInt()로 변환
try {
    int age = sc.nextInt();
} catch (InputMismatchException e) {
    System.out.println("정수를 입력해주세요!");
}

📝 오류 상황 정리

오류 상황 원인 해결책
nextLine()이 건너뛰어짐 nextInt() 이후 줄바꿈 문자가 남아있음 sc.nextLine() 한 번 호출해서 제거
입력 예외 발생 입력값과 메서드 자료형 불일치 try-catch로 예외 처리

입력 도중 발생하는 오류는 처음에는 꽤 당황스럽지만, 그 원인을 정확히 알면 금방 해결할 수 있어요. 이제 마지막으로, Scanner를 활용한 실전 예제를 만들어 보며 정리해볼게요! 🎯

6. Scanner를 활용한 입력 예제 실습 ✍️

이제 우리가 배운 내용을 종합해서 Scanner 클래스를 실제로 사용하는 프로그램을 만들어 볼 차례예요. 이 실습에서는 문자열, 정수, 실수를 모두 입력받아 처리해보는 간단한 인터랙티브 콘솔 애플리케이션을 구현해봅니다. 🎮

🎯 목표

  • 사용자로부터 이름, 나이, 키(cm)를 입력받기
  • 입력된 정보를 바탕으로 간단한 인사 메시지 출력하기

📌 실전 코드

import java.util.Scanner;

public class UserProfile {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.print("이름을 입력하세요: ");
        String name = sc.nextLine();

        System.out.print("나이를 입력하세요: ");
        int age = sc.nextInt();
        sc.nextLine(); // 버퍼 비우기

        System.out.print("키(cm)를 입력하세요: ");
        double height = sc.nextDouble();

        System.out.println("\n--- 입력 결과 ---");
        System.out.println("이름: " + name);
        System.out.println("나이: " + age + "세");
        System.out.println("키: " + height + "cm");

        System.out.println("\n반갑습니다, " + name + "님! 👋");
    }
}

✅ 실행 예시

이름을 입력하세요: 민수
나이를 입력하세요: 24
키(cm)를 입력하세요: 175.5

--- 입력 결과 ---
이름: 민수
나이: 24세
키: 175.5cm

반갑습니다, 민수님! 👋

🔍 실습을 통해 확인할 포인트

  • 입력 순서에 따라 줄바꿈 처리가 필요한 부분을 확인했나요?
  • 다양한 자료형 입력을 자연스럽게 처리할 수 있었나요?

이제 여러분도 Scanner를 활용한 사용자 입력 처리를 충분히 이해하셨을 거예요. 다음 섹션에서는 마무리로 이 장에서 배운 핵심 내용을 정리하고, 태그와 함께 마무리 인사를 전하겠습니다 😊

마무리하며 ✨

이번 글에서는 자바에서 사용자로부터 값을 입력받기 위한 Scanner 클래스의 개념부터 실제 활용까지 꼼꼼히 살펴봤습니다. 단순히 값을 출력하는 프로그램을 넘어서, 사용자의 입력을 받아 동적으로 동작하는 프로그램을 만드는 데 있어 Scanner는 매우 강력한 도구라는 걸 알 수 있었죠.

특히 nextInt()nextLine()의 차이, 입력 예외 처리, 줄바꿈 버퍼 문제 등은 실무와 과제 모두에서 자주 마주치는 포인트이니 꼭 익혀두시기 바랍니다. 입력 예제 실습까지 직접 해보셨다면, 이제 여러분도 키보드 입력과 Scanner는 마스터하셨다고 봐도 좋아요! 💯

다음 장에서는 조건문과 흐름 제어에 대해 배워보게 될 텐데요, 그 전에 이번 Scanner 실습을 조금 더 응용해서 미니 계산기나 간단한 설문 프로그램도 한번 도전해보는 건 어떨까요? 😉

반응형
반응형

2.4 연산자 우선순위 개념과 괄호를 통한 제어

이 표현식, 과연 어떤 결과가 나올까요? 자바 연산자 우선순위와 평가 순서를 이해하지 못하면 의도치 않은 결과가 나올 수도 있어요!

반응형

안녕하세요! 오늘은 자바 연산자의 우선순위와 평가 순서에 대해 알아보려 해요. 프로그래밍을 처음 배우는 분들이 가장 혼란스러워하는 부분 중 하나인데요. 예를 들어 `a + b * c`라는 표현식에서 어떤 연산이 먼저 실행될지 바로 알 수 있으신가요? 😅 이런 혼란을 방지하려면 연산자의 우선순위와 평가 방향을 정확히 이해하는 게 정말 중요해요. 그리고 괄호를 적절히 활용하는 습관도요! 이번 글에서는 자바에서 사용되는 다양한 연산자의 우선순위를 한눈에 살펴보고, 어떤 상황에서 괄호를 사용해야 할지 예제를 통해 배워볼 거예요. 실전 코딩을 하다 보면 연산 순서가 결과에 큰 영향을 미치는 경우가 정말 많거든요. 자, 그럼 함께 알아볼까요? ✨

1. 연산자 우선순위란 무엇인가요? 🤔

프로그래밍 언어에서는 다양한 연산자들이 존재하죠. 자바에서도 덧셈(+), 곱셈(*), 논리 연산자(&&), 비교 연산자(==) 등 여러 종류의 연산자를 사용할 수 있습니다. 그런데 이 연산자들이 한 줄의 코드에서 여러 개 등장하면 어떤 순서로 연산이 될까요? 바로 그때 필요한 개념이 연산자 우선순위입니다.

예를 들어, 다음과 같은 식을 생각해볼게요:

int result = 10 + 2 * 3;

이 코드에서 *+보다 우선순위가 높기 때문에 2 * 3이 먼저 계산되고 그 결과에 10이 더해져 최종적으로 result = 16이 됩니다. 만약 +를 먼저 계산하고 싶다면 어떻게 해야 할까요? 그렇죠. 괄호를 사용해서 (10 + 2) * 3처럼 바꾸면 됩니다.

✅ 왜 우선순위가 중요할까요?

  • 논리적 오류 방지: 연산 순서를 잘못 이해하면 전혀 다른 결과가 나올 수 있어요.
  • 가독성 향상: 괄호를 적절히 활용하면 코드의 의도를 명확히 표현할 수 있어요.
  • 디버깅 시간 절약: 우선순위를 제대로 이해하면 의도하지 않은 결과로 인한 디버깅 시간을 줄일 수 있어요.

🧠 실생활에 비유해 볼까요?

커피를 마시기 전에 물을 끓여야 하잖아요? 순서를 바꾸면 안 되죠! 자바에서도 마찬가지예요. 연산자의 순서를 잘못 지정하면 "끓이기 전에 마신" 것 같은 결과가 나옵니다. 😅

다음 섹션에서는 자바에서 제공하는 전체 연산자 우선순위를 표로 한눈에 정리해 드릴게요. 복잡한 것 같아도 금방 익숙해질 수 있어요!

2. 자바의 연산자 우선순위 표 📊

자바에서는 여러 연산자들이 미리 정해진 우선순위(priority)에 따라 평가됩니다. 아래는 자바 공식 문서 기준으로 정리한 연산자 우선순위 표입니다. 높은 우선순위를 가진 연산자가 먼저 실행됩니다.

우선순위 연산자 설명
1 (가장 높음) [], (), . 배열 인덱스, 괄호, 멤버 접근
2 ++, -- 단항 후위 연산자
3 ++, --, +, -, ~, ! 단항 전위 연산자
4 *, /, % 곱셈, 나눗셈, 나머지
5 +, - 덧셈, 뺄셈
6 <<, >>, >>> 비트 이동
7 <, <=, >, >=, instanceof 비교 연산자
8 ==, != 등가 비교
9 & 비트 AND
10 ^ 비트 XOR
11 | 비트 OR
12 && 논리 AND
13 || 논리 OR
14 ?: 삼항 연산자
15 =, +=, -= 등 대입 연산자

표가 길다고 너무 부담 갖지 마세요! 처음에는 외우기보다는 "곱셈/나눗셈이 덧셈/뺄셈보다 먼저다"와 같은 자주 쓰는 우선순위만 기억해도 충분합니다. 그리고 항상 괄호를 통해 연산 순서를 명확하게 지정해주는 습관을 들이면 실수를 줄일 수 있어요.

3. 평가 순서(Associativity)란? 🔄

연산자 우선순위는 어떤 연산이 먼저 실행되는지를 알려주죠. 그런데 우선순위가 같은 연산자들이 나열되면 어떤 방향으로 평가될까요? 이때 필요한 개념이 바로 평가 순서(Associativity)입니다.

🧭 좌측 결합과 우측 결합

대부분의 연산자는 왼쪽에서 오른쪽으로(Left-to-Right) 평가됩니다. 하지만 몇몇 연산자는 오른쪽에서 왼쪽으로(Right-to-Left) 평가돼요. 예제를 보며 확인해볼게요!

int a = 10, b = 20, c = 30;
int result = a + b + c;

위 식에서는 + 연산자의 우선순위는 같고, 좌측 결합이 적용되므로 (a + b) + c로 계산됩니다. 반면 아래와 같은 예제를 볼까요?

int x;
x = y = z = 100;

여기서 대입 연산자 =우측 결합을 따릅니다. 그래서 z = 100이 먼저 실행되고, 그 결과가 y에 대입되고, 마지막으로 x에 대입돼요. 즉 x = (y = (z = 100))과 같은 순서로 평가됩니다.

📝 주요 연산자의 결합 방향

연산자 결합 방향 예시
+, -, *, /, %, &, |, ^, &&, || Left-to-Right a + b + c → (a + b) + c
=, +=, -=, *=, /=, %= Right-to-Left x = y = z = 100 → x = (y = (z = 100))
?: (삼항 연산자) Right-to-Left result = condition ? a : b;

이렇게 평가 순서까지 이해하면 복잡한 식도 더욱 명확하게 읽을 수 있어요! 다음 장에서는 이 모든 우선순위와 평가 순서를 괄호를 이용해 어떻게 제어할 수 있는지 실전 예제로 알아볼게요. 💡

4. 괄호의 필요성과 사용법 🎯

연산자 우선순위나 평가 순서를 완벽하게 외우지 못해도 괜찮아요. 왜냐하면 괄호를 활용하면 어떤 연산을 먼저 처리할지 프로그래머가 직접 제어할 수 있기 때문이에요! 괄호는 우선순위를 강제로 바꾸는 가장 강력한 도구이자, 가독성을 높이는 최고의 방법이에요.

📌 괄호 사용의 예

int result1 = 10 + 2 * 3;        // 결과: 16
int result2 = (10 + 2) * 3;      // 결과: 36

위 코드에서 result1은 기본 우선순위에 따라 곱셈이 먼저 계산돼 2 * 3 = 6이 되고, 그 후에 10 + 6이 돼서 결과는 16이 나와요. 하지만 result2는 괄호로 덧셈이 먼저 실행되도록 했기 때문에 (10 + 2) * 3 = 36이라는 결과가 나옵니다. 바로 이런 차이를 의도적으로 만들기 위해 괄호를 사용하는 거예요.

🧼 괄호는 가독성 향상에도 효과적!

  • 팀원들이 코드를 볼 때, 괄호로 연산 순서가 명확히 드러나면 해석하기 훨씬 쉬워요.
  • 코드 리뷰 시 혼란을 줄이고, 예기치 않은 오류 가능성을 줄일 수 있어요.

💡 괄호 사용 꿀팁

  1. 복잡한 수식이거나 연산자가 여러 개 섞여 있을 때는 무조건 괄호로 명확히 하자!
  2. 조건문, 반복문 안의 조건식에서도 괄호를 적극 활용하자.
  3. 계산 결과가 다르게 나올 수 있는 경우에는 실험적으로 괄호를 써서 테스트해보자.

괄호 하나로 코드의 운명이 바뀐다는 말, 과장 같지만 사실이에요! 😉 다음 섹션에서는 실전에서 자주 마주치는 헷갈리기 쉬운 표현식들을 통해 우선순위의 실제 활용을 확인해볼게요.

5. 헷갈리기 쉬운 표현식 예제 ⚠️

실제로 코드를 작성하다 보면, 우선순위와 평가 순서를 제대로 이해하지 못해 의도와 다른 결과를 얻게 되는 경우가 많아요. 아래 예제들을 함께 보며 어떤 부분이 헷갈리는지, 그리고 어떻게 해결하면 좋은지 확인해봐요!

🔍 예제 1: 논리 연산자와 비교 연산자의 충돌

boolean result = 5 < 3 && 10 > 5;

이 표현식은 5 < 3이 먼저 계산돼서 false가 되고, 이후 false && true가 되죠. 결과는 false입니다. 괄호 없이도 잘 작동하긴 하지만, 다음처럼 명시적으로 괄호를 써주는 게 좋아요:

boolean result = (5 < 3) && (10 > 5);

🔍 예제 2: 문자열 연결과 덧셈의 혼동

System.out.println("합계: " + 10 + 5);

이 코드는 "합계: 10"5가 문자열로 붙어서 "합계: 105"가 출력됩니다. 예상했던 "합계: 15"가 아니죠. 이를 해결하려면 괄호를 사용해서 덧셈이 먼저 되도록 해야 해요.

System.out.println("합계: " + (10 + 5)); // 출력: 합계: 15

🔍 예제 3: 삼항 연산자 중첩 사용

int a = 5;
String result = (a > 0) ? (a < 10 ? "0~9" : "10이상") : "0이하";

삼항 연산자는 우측 결합이기 때문에 위와 같이 중첩해서 쓸 수 있어요. 하지만 조건이 복잡해질수록 괄호로 각 조건을 명확히 구분하지 않으면 가독성이 떨어지고 버그가 발생할 위험이 커져요.

📌 실수 줄이는 팁 요약

  • 문자열 연산과 숫자 연산이 섞일 때는 꼭 괄호로 연산 순서를 분명히 하기
  • 조건문 안에서 삼항 연산자 중첩 사용은 최대한 피하고, 꼭 필요하다면 괄호로 구분
  • 애매한 표현식은 변수로 나눠서 중간 계산값을 확인하는 것도 좋은 습관

실제 개발자들도 종종 겪는 실수들, 미리 알고 있으면 훨씬 수월하게 피할 수 있겠죠? 😊 이제 마지막으로, 우리가 배운 개념들을 실전 문제로 풀어보면서 연산자 우선순위에 익숙해져 볼까요?

6. 연산자 우선순위 실전 문제와 해설 🧩

자, 이제까지 배운 연산자 우선순위평가 순서, 괄호 사용 등을 종합해서 실전 문제로 연습해볼 시간입니다! 직접 코드를 예측해보며 실력을 점검해보세요 💪

🔧 실전 문제 1

int result = 4 + 3 * 2;
System.out.println(result);
  • 예상 결과: 10
  • 해설: 3 * 2가 먼저 계산돼서 6, 그 다음 4 + 6 = 10

🔧 실전 문제 2

int result = (4 + 3) * 2;
System.out.println(result);
  • 예상 결과: 14
  • 해설: 괄호로 4 + 3를 먼저 계산하므로 7 * 2 = 14

🔧 실전 문제 3

int x = 10;
int y = 5;
int result = x > y && y < 3 ? 100 : 200;
System.out.println(result);
  • 예상 결과: 200
  • 해설: x > ytrue, y < 3false, 전체 true && false = false. 삼항 조건식의 결과는 200

📚 정리 요약

  • 자바 연산자는 우선순위에 따라 순서가 정해지며, 같은 순위일 경우 평가 방향(결합 순서)에 따라 결정됩니다.
  • 복잡하거나 혼동되는 식은 괄호를 사용해 명확히 제어하세요!
  • 우선순위를 외우기보다, 자주 쓰이는 연산의 순서를 기억하고 실습을 통해 익히는 것이 효과적입니다.

이제 자바의 연산자 우선순위에 대해 훨씬 더 자신이 생기셨을 거예요. 🙌 다음 시간에는 연산자 외에 또 다른 핵심 개념인 제어문으로 넘어가볼게요! 😊

마무리하며 🧠

연산자 우선순위와 평가 순서, 그리고 괄호의 사용법은 자바를 비롯한 모든 프로그래밍 언어에서 핵심적인 개념이에요. 우리가 생각하는 연산 순서와 컴파일러가 실제로 계산하는 순서가 다르면, 전혀 의도하지 않은 결과가 나올 수 있어요. 그래서 항상 명확한 괄호 사용기본 원칙의 이해가 중요하답니다.

 

지금 당장은 모든 연산자의 우선순위를 외우기 어렵더라도, 자주 사용하는 것부터 하나씩 익혀가면서 연습을 하다 보면 자연스럽게 익숙해질 거예요. 그리고 괄호는 언제나 여러분의 친구라는 사실! 😉 복잡한 코드일수록 괄호로 감싸주는 습관을 들이면 실수도 줄고, 협업 시에도 훨씬 가독성 좋은 코드를 만들 수 있답니다.

 

 끝까지 함께 해주셔서 고맙습니다 🙏

반응형
반응형

2.3 연산자와 표현식 – 산술, 대입, 비교, 논리 연산자 및 삼항 연산자 사용법

"자바 연산자는 단순한 기호가 아닙니다. 코드의 흐름과 논리를 결정하는 핵심 도구죠. 여러분은 그 진짜 의미를 제대로 알고 계신가요?"

반응형

안녕하세요, 여러분 😊 오늘은 자바 기본 문법에서 아주 중요한 파트인 연산자와 표현식에 대해 함께 배워볼 시간이에요! 숫자 계산뿐 아니라 조건 판단, 변수 값 변경, 논리 흐름 제어까지... 프로그래밍의 거의 모든 흐름은 연산자로 이루어진다고 해도 과언이 아니죠. 이번 포스팅에서는 산술 연산자부터 삼항 연산자까지 꼭 알아야 할 자바 연산자들의 사용법을 초보자 시선에서 차근차근 설명해 드릴게요. 실습 예제도 함께 보면서 하나씩 익혀보면 훨씬 쉬워질 거예요. 그럼 바로 시작해볼까요?

1. 산술 연산자 ✏️

산술 연산자는 숫자를 다룰 때 가장 기본이 되는 연산자입니다. 더하기(+), 빼기(-), 곱하기(*), 나누기(/), 나머지(%)와 같이 수학 시간에 배웠던 사칙연산 개념이 그대로 적용돼요. 자바에서는 정수, 실수에 상관없이 이 연산자들을 자유롭게 사용할 수 있어요.

📌 산술 연산자 종류

연산자 기능 예시
+ 더하기 3 + 5 → 8
- 빼기 10 - 4 → 6
* 곱하기 6 * 2 → 12
/ 나누기 10 / 2 → 5
% 나머지 7 % 3 → 1

🧪 간단한 실습 예제

int a = 10;
int b = 3;

System.out.println("a + b = " + (a + b));
System.out.println("a - b = " + (a - b));
System.out.println("a * b = " + (a * b));
System.out.println("a / b = " + (a / b));
System.out.println("a % b = " + (a % b));

위 예제를 실행해 보면 각각의 연산 결과를 콘솔에 출력할 수 있어요. 특히 정수형 나눗셈은 결과가 소수가 아닌 정수로 나온다는 점, 그리고 나머지 연산자는 '짝수/홀수 판단' 같은 곳에서 자주 사용된다는 점을 꼭 기억하세요!

  • Tip: 나머지 연산자(%)는 짝수인지 홀수인지 판단할 때 유용하게 쓰여요.
  • 실수형 연산에서는 int 대신 double 타입을 사용해야 더 정확한 결과를 얻을 수 있어요.

산술 연산자는 우리가 코딩을 하면서 제일 자주 만나게 되는 친구입니다. 친숙해지면 생각보다 금방 손에 익게 돼요. 다양한 숫자 조합으로 직접 실습해보는 것도 큰 도움이 되겠죠?

2. 대입 연산자와 복합 대입 🔄

변수에 값을 넣어주는 대입 연산자는 프로그래밍에서 가장 기본적이면서도 자주 쓰이는 연산입니다. 단순히 = 기호 하나지만, 그 의미는 '같다'가 아니라 오른쪽 값을 왼쪽 변수에 넣는다라는 뜻이에요. 여기에 산술 연산자를 조합한 복합 대입 연산자를 사용하면 코드가 훨씬 짧고 간결해진답니다.

📌 기본 대입 및 복합 대입 연산자 종류

연산자 설명 예시
= 우변 값을 좌변 변수에 대입 x = 10;
+= 덧셈 후 대입 x += 5; // x = x + 5
-= 뺄셈 후 대입 x -= 3; // x = x - 3
*= 곱셈 후 대입 x *= 2; // x = x * 2
/= 나눗셈 후 대입 x /= 2; // x = x / 2
%= 나머지 후 대입 x %= 3; // x = x % 3

🧪 예제로 이해하기

int x = 10;

x += 5;  // x = 15
x -= 3;  // x = 12
x *= 2;  // x = 24
x /= 4;  // x = 6
x %= 4;  // x = 2

System.out.println("최종 값: " + x);

이처럼 복합 대입 연산자를 사용하면 가독성이 좋아지고 코드도 간결해지죠. 반복적으로 사용하는 연산에는 매우 유용하답니다!

  • 주의: 대입 연산자에서 =는 '같다'가 아니라 '할당한다'라는 의미예요!

복합 대입 연산자는 초보자들이 자바 문법에 익숙해지는 데 아주 좋은 연습 대상이에요. 조금만 익숙해지면, 반복문에서도 정말 편하게 사용할 수 있게 된답니다 😊

3. 비교 연산자 📊

조건을 검사할 때 빠질 수 없는 도구가 바로 비교 연산자입니다. 숫자나 값이 서로 같은지, 큰지, 작은지를 판단해서 true 또는 false를 반환해요. 이 결과는 조건문(if, while 등)과 함께 사용되며, 프로그램의 흐름을 결정하는 핵심 역할을 합니다.

📌 비교 연산자 종류

연산자 기능 예시
== 같은 값인지 비교 5 == 5 → true
!= 같지 않은지 비교 4 != 3 → true
> 왼쪽이 더 큰가 7 > 5 → true
< 왼쪽이 더 작은가 3 < 6 → true
>= 크거나 같은가 5 >= 5 → true
<= 작거나 같은가 4 <= 5 → true

🧪 조건문과 함께 사용해 보기

int age = 20;

if (age >= 18) {
  System.out.println("성인입니다.");
} else {
  System.out.println("미성년자입니다.");
}

비교 연산자 결과는 항상 true 또는 false로 반환되며, 조건문에서 이 값에 따라 코드의 흐름이 달라집니다.

  • Tip: ==는 값이 같은지를 비교하지만, 문자열 비교에는 equals()를 사용해야 해요!

비교 연산자를 자유자재로 다룰 수 있다면, 조건문과 반복문까지 훨씬 쉽게 활용할 수 있어요. 다양한 숫자와 조건으로 실습해보는 걸 추천드려요 😊

4. 논리 연산자 ✅❌

논리 연산자는 여러 조건을 AND(&&), OR(||), NOT(!)으로 결합하거나 부정할 때 사용하는 연산자입니다. 단일 조건을 넘어서 복잡한 조건식을 만들 때 필수적으로 사용돼요. 조건문과 함께 자주 쓰이며, 연산 결과는 항상 true 또는 false입니다.

📌 논리 연산자 종류

연산자 기능 예시
&& AND: 모두 참일 때만 true (x > 0) && (x < 10)
|| OR: 하나라도 참이면 true (x < 0) || (x > 100)
! NOT: true → false, false → true !(x == 0)

🧪 논리 연산자 실습 예제

int age = 25;
boolean hasID = true;

if (age >= 20 && hasID) {
  System.out.println("입장 가능합니다.");
}

if (age < 18 || !hasID) {
  System.out.println("입장 불가입니다.");
}

위 예제에서 AND 조건은 둘 다 참일 때만 동작하고, OR 조건은 하나만 참이어도 참이 되며, NOT은 조건을 부정하는 역할을 해요.

  • Tip: 복잡한 조건식은 괄호 ()를 사용해서 우선순위를 명확히 해주세요!

논리 연산자는 if문, while문과 정말 자주 사용되기 때문에 반드시 익숙해져야 해요. 직접 조건을 바꿔보면서 다양한 결과를 실습해보는 걸 추천드려요 💡

5. 삼항 연산자 (조건 연산자) 🎯

삼항 연산자는 조건문을 한 줄로 간결하게 표현할 수 있는 유용한 연산자입니다. 형식은 아래와 같이 간단한 구조를 가지며, 복잡한 조건 없이도 짧은 분기 처리에 자주 활용됩니다.

조건식 ? 참일 때의 값 : 거짓일 때의 값;

🧪 간단한 삼항 연산자 예제

int score = 85;

String result = (score >= 80) ? "합격" : "불합격";

System.out.println("결과: " + result);

위 예제에서는 점수가 80 이상이면 "합격", 아니면 "불합격"이라는 문자열을 출력합니다. if-else 문을 간단하게 대체할 수 있는 멋진 표현이죠!

🧩 삼항 연산자 실전 예시

int num = 7;

String type = (num % 2 == 0) ? "짝수" : "홀수";

System.out.println("이 숫자는 " + type + "입니다.");

삼항 연산자는 코드를 짧고 깔끔하게 만들고 싶을 때 정말 유용합니다. 단, 너무 많은 조건을 삼항 연산자 하나에 몰아넣으면 오히려 가독성이 떨어질 수 있으니 간단한 조건에서만 사용하는 게 좋아요.

  • Tip: 삼항 연산자는 return 문 안에서도 자주 사용돼요. 예: return (x > 0) ? x : -x;

삼항 연산자는 초보자에게 꼭 추천하는 표현 방식이에요. if문만 쓰던 코드가 한 줄로 정리되면 뭔가 뿌듯하거든요 😎

6. 연산자 우선순위와 표현식의 흐름 🔁

자바에서 여러 개의 연산자가 한 줄에 함께 등장할 경우, 어떤 연산이 먼저 수행될까요? 바로 이때 연산자 우선순위가 중요한 역할을 해요. 우선순위가 높은 연산자부터 먼저 계산되고, 우선순위가 같다면 연산 방향(왼쪽 → 오른쪽)에 따라 처리됩니다.

📌 주요 연산자 우선순위 (상위 순)

우선순위 연산자 종류 예시
1 괄호 () (a + b)
2 단항 연산자 +, -, ! -x, !flag
3 산술 연산자 *, /, % a * b
4 산술 연산자 +, - a + b
5 비교 연산자 >, <, == x == y
6 논리 연산자 &&, || a && b
7 삼항 연산자 ? : 조건 ? 참 : 거짓
8 대입 연산자 =, +=, -= x = 5

🧪 우선순위에 따른 연산 흐름 예제

int result = 10 + 2 * 3;

System.out.println("결과: " + result);  // 출력값은 16

위 예제에서 덧셈보다 곱셈이 먼저 수행되기 때문에 2 * 3 = 6이 계산되고, 그 결과에 10을 더해 16이 출력되는 거예요.

  • Tip: 우선순위가 헷갈릴 땐 ()로 명확히 지정해주는 습관이 좋아요!

표현식을 분석하고 계산하는 능력은 코딩 실력을 키우는 데 정말 중요한 포인트예요. 눈으로 계산 순서를 따라가며 직접 예제를 실습해 보세요 🔍

마무리 ✨

지금까지 자바에서 사용되는 다양한 연산자들을 하나하나 살펴보면서 산술, 대입, 비교, 논리, 삼항 연산자연산자 우선순위에 대해 학습해봤어요. 처음엔 단순한 기호처럼 보이지만, 실제 프로그래밍에서는 코드의 흐름을 결정짓는 중요한 요소들이라는 걸 느끼셨을 거예요.

 

연산자는 단순히 외워서 끝낼 게 아니라 직접 손으로 코드에 적용해보면서 감각적으로 익히는 것이 훨씬 중요해요. 연산자들을 조합해 다양한 표현식을 만들고, 직접 실행 결과를 확인해보는 과정을 반복하다 보면 어느새 여러분도 자연스럽게 익숙해질 거예요 😊

 

다음 챕터에서는 조건문과 반복문을 활용해 더 유용한 프로그램 흐름 제어를 배워볼 예정이에요. 기대해주세요!

반응형

+ Recent posts